react-nitro-renderer 0.0.0-stage → 0.0.1-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/Package.swift +104 -0
- package/README.md +111 -2
- package/Sources/ReactNitroRenderer/Animations/AnimationCurve+toUIAnimationCurve.swift +31 -0
- package/Sources/ReactNitroRenderer/Animations/HybridAnimator.swift +36 -0
- package/Sources/ReactNitroRenderer/Animations/View+Animations.swift +39 -0
- package/Sources/ReactNitroRenderer/Components/HybridLabel.swift +89 -0
- package/Sources/ReactNitroRenderer/Components/HybridScrollView.swift +21 -0
- package/Sources/ReactNitroRenderer/Components/HybridScrollViewContent.swift +36 -0
- package/Sources/ReactNitroRenderer/Components/HybridView.swift +22 -0
- package/Sources/ReactNitroRenderer/Components/View.swift +267 -0
- package/Sources/ReactNitroRenderer/CustomViewController.swift +36 -0
- package/Sources/ReactNitroRenderer/Extensions/Corner+toCACornerMask.swift +16 -0
- package/Sources/ReactNitroRenderer/Extensions/CornerCurve+toUICornerCurve.swift +23 -0
- package/Sources/ReactNitroRenderer/Extensions/EdgeInsets+UIEdgeInsets.swift +7 -0
- package/Sources/ReactNitroRenderer/Extensions/ModifierKey+toUIKeyModifierFlags.swift +31 -0
- package/Sources/ReactNitroRenderer/Extensions/Point+CGPoint.swift +15 -0
- package/Sources/ReactNitroRenderer/Extensions/UIGestureRecognizerState+toUIGestureRecognizerState.swift +39 -0
- package/Sources/ReactNitroRenderer/Gestures/HybridGestureRecognizer.swift +40 -0
- package/Sources/ReactNitroRenderer/Gestures/HybridLongPressGestureRecognizer.swift +53 -0
- package/Sources/ReactNitroRenderer/Gestures/HybridPanGestureRecognizer.swift +52 -0
- package/Sources/ReactNitroRenderer/Gestures/HybridTapGestureRecognizer.swift +42 -0
- package/Sources/ReactNitroRenderer/HybridApplication.swift +19 -0
- package/Sources/ReactNitroRenderer/HybridScreen.swift +22 -0
- package/Sources/ReactNitroRenderer/HybridViewController.swift +66 -0
- package/Sources/ReactNitroRenderer/HybridWindow.swift +25 -0
- package/Sources/ReactNitroRenderer/HybridWindowScene.swift +16 -0
- package/Sources/ReactNitroRenderer/RegisterRootCallback.swift +28 -0
- package/Sources/ReactNitroRenderer/RuntimeReloadableAppDelegate.swift +14 -0
- package/Sources/ReactNitroRenderer/SafeAreaInsetsListeners.swift +22 -0
- package/Sources/ReactNitroRenderer/UIColor+initRGBA.swift +10 -0
- package/Sources/ReactNitroRenderer/UIColor+rgba.swift +20 -0
- package/Sources/ReactNitroRenderer/ViewController.swift +13 -0
- package/Sources/ReactNitroRenderer/Window.swift +12 -0
- package/Sources/ReactNitroRenderer/WindowScene.swift +12 -0
- package/Sources/ReactNitroRenderer/YGNode.swift +46 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/apple/ReactNitroRenderer-Swift-Cxx-Bridge.cpp +376 -0
- package/nitrogen/generated/apple/ReactNitroRendererAppleCxx/ReactNitroRendererAppleCxx.cpp +9 -0
- package/nitrogen/generated/apple/ReactNitroRendererAppleCxx/include/ReactNitroRendererAppleCxx/ReactNitroRendererAppleCxx.h +245 -0
- package/nitrogen/generated/apple/ReactNitroRendererAutolinking.cpp +46 -0
- package/nitrogen/generated/apple/ReactNitroRendererAutolinking.mm +24 -0
- package/nitrogen/generated/apple/c++/AnimationCurve-Swift.cpp +42 -0
- package/nitrogen/generated/apple/c++/Corner-Swift.cpp +52 -0
- package/nitrogen/generated/apple/c++/CornerCurve-Swift.cpp +46 -0
- package/nitrogen/generated/apple/c++/EdgeInsets-Swift.cpp +35 -0
- package/nitrogen/generated/apple/c++/Frame-Swift.cpp +35 -0
- package/nitrogen/generated/apple/c++/GestureRecognizerState-Swift.cpp +44 -0
- package/nitrogen/generated/apple/c++/HybridAnimatorSpecSwift.cpp +53 -0
- package/nitrogen/generated/apple/c++/HybridAnimatorSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridApplicationSpecSwift.cpp +58 -0
- package/nitrogen/generated/apple/c++/HybridApplicationSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridGestureRecognizerSpecSwift.cpp +48 -0
- package/nitrogen/generated/apple/c++/HybridGestureRecognizerSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridLabelSpecSwift.cpp +49 -0
- package/nitrogen/generated/apple/c++/HybridLabelSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridLongPressGestureRecognizerSpecSwift.cpp +85 -0
- package/nitrogen/generated/apple/c++/HybridLongPressGestureRecognizerSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridPanGestureRecognizerSpecSwift.cpp +89 -0
- package/nitrogen/generated/apple/c++/HybridPanGestureRecognizerSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridScreenSpecSwift.cpp +44 -0
- package/nitrogen/generated/apple/c++/HybridScreenSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridScrollViewContentSpecSwift.cpp +40 -0
- package/nitrogen/generated/apple/c++/HybridScrollViewContentSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridScrollViewSpecSwift.cpp +40 -0
- package/nitrogen/generated/apple/c++/HybridScrollViewSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridTapGestureRecognizerSpecSwift.cpp +67 -0
- package/nitrogen/generated/apple/c++/HybridTapGestureRecognizerSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridViewControllerSpecSwift.cpp +91 -0
- package/nitrogen/generated/apple/c++/HybridViewControllerSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridViewSpecSwift.cpp +231 -0
- package/nitrogen/generated/apple/c++/HybridViewSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridWindowSceneSpecSwift.cpp +34 -0
- package/nitrogen/generated/apple/c++/HybridWindowSceneSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/HybridWindowSpecSwift.cpp +53 -0
- package/nitrogen/generated/apple/c++/HybridWindowSpec_cxx-Swift.cpp +28 -0
- package/nitrogen/generated/apple/c++/ListenerSubscription-Swift.cpp +37 -0
- package/nitrogen/generated/apple/c++/ModifierKey-Swift.cpp +52 -0
- package/nitrogen/generated/apple/c++/Point-Swift.cpp +33 -0
- package/nitrogen/generated/apple/c++/Point3D-Swift.cpp +34 -0
- package/nitrogen/generated/apple/c++/Size-Swift.cpp +33 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/ReactNitroRendererAutolinking.hpp +13 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/AnimationCurve-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Corner-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/CornerCurve-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/EdgeInsets-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Frame-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/GestureRecognizerState-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridAnimatorSpecSwift.hpp +73 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridAnimatorSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridApplicationSpecSwift.hpp +74 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridApplicationSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridGestureRecognizerSpecSwift.hpp +74 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridGestureRecognizerSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLabelSpecSwift.hpp +74 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLabelSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLongPressGestureRecognizerSpecSwift.hpp +82 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLongPressGestureRecognizerSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridPanGestureRecognizerSpecSwift.hpp +80 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridPanGestureRecognizerSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScreenSpecSwift.hpp +73 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScreenSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewContentSpecSwift.hpp +72 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewContentSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewSpecSwift.hpp +72 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridTapGestureRecognizerSpecSwift.hpp +78 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridTapGestureRecognizerSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewControllerSpecSwift.hpp +77 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewControllerSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewSpecSwift.hpp +102 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSceneSpecSwift.hpp +71 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSceneSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSpecSwift.hpp +74 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSpec_cxx-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/ListenerSubscription-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/ModifierKey-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Point-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Point3D-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/ReactNitroRenderer-Swift-Cxx-Umbrella.hpp +69 -0
- package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Size-Swift.hpp +23 -0
- package/nitrogen/generated/apple/c++/include/module.modulemap +12 -0
- package/nitrogen/generated/apple/swift/AnimationCurve.swift +64 -0
- package/nitrogen/generated/apple/swift/Callback___ReactNitroRenderer__HybridWindowSpec_cxx___ReactNitroRenderer__HybridWindowSceneSpec_cxx.swift +71 -0
- package/nitrogen/generated/apple/swift/Callback_void.swift +60 -0
- package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__EdgeInsets.swift +66 -0
- package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__HybridLongPressGestureRecognizerSpec_cxx.swift +66 -0
- package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__HybridPanGestureRecognizerSpec_cxx.swift +66 -0
- package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__HybridTapGestureRecognizerSpec_cxx.swift +66 -0
- package/nitrogen/generated/apple/swift/Corner.swift +64 -0
- package/nitrogen/generated/apple/swift/CornerCurve.swift +54 -0
- package/nitrogen/generated/apple/swift/EdgeInsets.swift +49 -0
- package/nitrogen/generated/apple/swift/Frame.swift +49 -0
- package/nitrogen/generated/apple/swift/GestureRecognizerState.swift +74 -0
- package/nitrogen/generated/apple/swift/HybridAnimatorSpec.swift +67 -0
- package/nitrogen/generated/apple/swift/HybridAnimatorSpec_cxx.swift +158 -0
- package/nitrogen/generated/apple/swift/HybridApplicationSpec.swift +67 -0
- package/nitrogen/generated/apple/swift/HybridApplicationSpec_cxx.swift +160 -0
- package/nitrogen/generated/apple/swift/HybridGestureRecognizerSpec.swift +67 -0
- package/nitrogen/generated/apple/swift/HybridGestureRecognizerSpec_cxx.swift +147 -0
- package/nitrogen/generated/apple/swift/HybridLabelSpec.swift +66 -0
- package/nitrogen/generated/apple/swift/HybridLabelSpec_cxx.swift +157 -0
- package/nitrogen/generated/apple/swift/HybridLongPressGestureRecognizerSpec.swift +70 -0
- package/nitrogen/generated/apple/swift/HybridLongPressGestureRecognizerSpec_cxx.swift +193 -0
- package/nitrogen/generated/apple/swift/HybridPanGestureRecognizerSpec.swift +69 -0
- package/nitrogen/generated/apple/swift/HybridPanGestureRecognizerSpec_cxx.swift +195 -0
- package/nitrogen/generated/apple/swift/HybridScreenSpec.swift +67 -0
- package/nitrogen/generated/apple/swift/HybridScreenSpec_cxx.swift +146 -0
- package/nitrogen/generated/apple/swift/HybridScrollViewContentSpec.swift +66 -0
- package/nitrogen/generated/apple/swift/HybridScrollViewContentSpec_cxx.swift +148 -0
- package/nitrogen/generated/apple/swift/HybridScrollViewSpec.swift +66 -0
- package/nitrogen/generated/apple/swift/HybridScrollViewSpec_cxx.swift +148 -0
- package/nitrogen/generated/apple/swift/HybridTapGestureRecognizerSpec.swift +68 -0
- package/nitrogen/generated/apple/swift/HybridTapGestureRecognizerSpec_cxx.swift +175 -0
- package/nitrogen/generated/apple/swift/HybridViewControllerSpec.swift +68 -0
- package/nitrogen/generated/apple/swift/HybridViewControllerSpec_cxx.swift +185 -0
- package/nitrogen/generated/apple/swift/HybridViewSpec.swift +89 -0
- package/nitrogen/generated/apple/swift/HybridViewSpec_cxx.swift +335 -0
- package/nitrogen/generated/apple/swift/HybridWindowSceneSpec.swift +65 -0
- package/nitrogen/generated/apple/swift/HybridWindowSceneSpec_cxx.swift +136 -0
- package/nitrogen/generated/apple/swift/HybridWindowSpec.swift +65 -0
- package/nitrogen/generated/apple/swift/HybridWindowSpec_cxx.swift +156 -0
- package/nitrogen/generated/apple/swift/ListenerSubscription.swift +29 -0
- package/nitrogen/generated/apple/swift/ModifierKey.swift +64 -0
- package/nitrogen/generated/apple/swift/Point.swift +35 -0
- package/nitrogen/generated/apple/swift/Point3D.swift +42 -0
- package/nitrogen/generated/apple/swift/Promise___ReactNitroRenderer__HybridWindowSpec_cxx.swift +102 -0
- package/nitrogen/generated/apple/swift/Promise_void.swift +100 -0
- package/nitrogen/generated/apple/swift/ReactNitroRenderer+ForeignTypeMetadata.swift +34 -0
- package/nitrogen/generated/apple/swift/Size.swift +35 -0
- package/nitrogen/generated/hybrid-classes.json +144 -0
- package/nitrogen/generated/shared/c++/ReactNitroRendererCxxModule.cpp +2 -0
- package/nitrogen/generated/shared/c++/include/ReactNitroRenderer/ReactNitroRendererCxxModule.hpp +2 -0
- package/nitrogen/generated/shared/javascript/Animator.cjs +19 -0
- package/nitrogen/generated/shared/javascript/Animator.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/Application.cjs +19 -0
- package/nitrogen/generated/shared/javascript/Application.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/GestureRecognizer.cjs +19 -0
- package/nitrogen/generated/shared/javascript/GestureRecognizer.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/Label.cjs +19 -0
- package/nitrogen/generated/shared/javascript/Label.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/LongPressGestureRecognizer.cjs +19 -0
- package/nitrogen/generated/shared/javascript/LongPressGestureRecognizer.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/PanGestureRecognizer.cjs +19 -0
- package/nitrogen/generated/shared/javascript/PanGestureRecognizer.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/Screen.cjs +19 -0
- package/nitrogen/generated/shared/javascript/Screen.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/ScrollView.cjs +19 -0
- package/nitrogen/generated/shared/javascript/ScrollView.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/ScrollViewContent.cjs +19 -0
- package/nitrogen/generated/shared/javascript/ScrollViewContent.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/TapGestureRecognizer.cjs +19 -0
- package/nitrogen/generated/shared/javascript/TapGestureRecognizer.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/View.cjs +19 -0
- package/nitrogen/generated/shared/javascript/View.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/ViewController.cjs +19 -0
- package/nitrogen/generated/shared/javascript/ViewController.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/Window.cjs +19 -0
- package/nitrogen/generated/shared/javascript/Window.d.cts +9 -0
- package/nitrogen/generated/shared/javascript/WindowScene.cjs +19 -0
- package/nitrogen/generated/shared/javascript/WindowScene.d.cts +9 -0
- package/package.json +42 -4
- package/src/NitroRendererHostConfig.ts +396 -0
- package/src/PropSetter.ts +29 -0
- package/src/StylePropSetters.ts +145 -0
- package/src/ViewPropSetters.ts +33 -0
- package/src/ViewRegistry.ts +47 -0
- package/src/YogaPropSetters.ts +347 -0
- package/src/components/ScrollView.tsx +30 -0
- package/src/components/ScrollViewContent.tsx +12 -0
- package/src/components/Text.tsx +34 -0
- package/src/components/View.ts +33 -0
- package/src/contexts/RootContext.ts +5 -0
- package/src/getViewYogaNode.ts +9 -0
- package/src/hooks/useRootContext.ts +11 -0
- package/src/hooks/useSafeAreaInsets.ts +36 -0
- package/src/hybrids.ts +9 -0
- package/src/index.ts +30 -0
- package/src/registerApp.ts +22 -0
- package/src/renderRoot.ts +44 -0
- package/src/specs/Animations/AnimationCurve.ts +6 -0
- package/src/specs/Animations/Animator.nitro.ts +16 -0
- package/src/specs/Application.nitro.ts +20 -0
- package/src/specs/Corner.ts +1 -0
- package/src/specs/EdgeInsets.ts +13 -0
- package/src/specs/Frame.ts +6 -0
- package/src/specs/Gestures/GestureRecognizer.nitro.ts +26 -0
- package/src/specs/Gestures/LongPressGestureRecognizer.nitro.ts +26 -0
- package/src/specs/Gestures/PanGestureRecognizer.nitro.ts +33 -0
- package/src/specs/Gestures/TapGestureRecognizer.nitro.ts +20 -0
- package/src/specs/Label.nitro.ts +16 -0
- package/src/specs/ListenerSubscription.ts +3 -0
- package/src/specs/Screen.nitro.ts +16 -0
- package/src/specs/ScrollView.nitro.ts +14 -0
- package/src/specs/ScrollViewContent.nitro.ts +14 -0
- package/src/specs/Size.ts +4 -0
- package/src/specs/View.nitro.ts +112 -0
- package/src/specs/ViewController.nitro.ts +29 -0
- package/src/specs/Window.nitro.ts +20 -0
- package/src/specs/WindowScene.nitro.ts +15 -0
- package/src/types/ReactNitroReconcilerHostConfig.ts +44 -0
- package/src/types/ReactRoot.ts +5 -0
- package/src/types/StrictMap.ts +6 -0
- package/src/types/ViewPropsUpdater.ts +30 -0
- package/src/types/YogaStyleProps.ts +47 -0
- package/src/utils/arePropArraysEqual.ts +18 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useContext } from 'react'
|
|
2
|
+
import { RootContext } from '../contexts/RootContext'
|
|
3
|
+
|
|
4
|
+
/** Reads the view controller hosting the current React Nitro root. */
|
|
5
|
+
export function useRootContext() {
|
|
6
|
+
const context = useContext(RootContext)
|
|
7
|
+
if (context === undefined) {
|
|
8
|
+
throw new Error('This hook must be used inside a React Nitro root created by renderRoot().')
|
|
9
|
+
}
|
|
10
|
+
return context
|
|
11
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useMemo, useSyncExternalStore } from 'react'
|
|
2
|
+
import type { EdgeInsets } from '../specs/EdgeInsets'
|
|
3
|
+
import { useRootContext } from './useRootContext'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the closest view controller's root view safe area in points and subscribes to changes.
|
|
7
|
+
* The returned {@linkcode EdgeInsets} retain their identity while values are unchanged.
|
|
8
|
+
* @throws When called outside a root created by renderRoot().
|
|
9
|
+
*/
|
|
10
|
+
export function useSafeAreaInsets(): EdgeInsets {
|
|
11
|
+
const viewController = useRootContext()
|
|
12
|
+
const store = useMemo(() => {
|
|
13
|
+
const view = viewController.view
|
|
14
|
+
let snapshot = view.safeAreaInsets
|
|
15
|
+
return {
|
|
16
|
+
getSnapshot: () => {
|
|
17
|
+
const insets = view.safeAreaInsets
|
|
18
|
+
const isUnchanged = insets.top === snapshot.top &&
|
|
19
|
+
insets.right === snapshot.right &&
|
|
20
|
+
insets.bottom === snapshot.bottom &&
|
|
21
|
+
insets.left === snapshot.left
|
|
22
|
+
if (isUnchanged) {
|
|
23
|
+
return snapshot
|
|
24
|
+
}
|
|
25
|
+
snapshot = insets
|
|
26
|
+
return snapshot
|
|
27
|
+
},
|
|
28
|
+
subscribe: (onChange: () => void) => {
|
|
29
|
+
const subscription = viewController.addOnSafeAreaInsetsChangedListener(onChange)
|
|
30
|
+
return subscription.remove
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
}, [viewController])
|
|
34
|
+
|
|
35
|
+
return useSyncExternalStore(store.subscribe, store.getSnapshot)
|
|
36
|
+
}
|
package/src/hybrids.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Application } from './specs/Application.nitro'
|
|
2
|
+
export { Label } from './specs/Label.nitro'
|
|
3
|
+
export { Screen } from './specs/Screen.nitro'
|
|
4
|
+
export { ScrollView } from './specs/ScrollView.nitro'
|
|
5
|
+
export { ScrollViewContent } from './specs/ScrollViewContent.nitro'
|
|
6
|
+
export { View } from './specs/View.nitro'
|
|
7
|
+
export { ViewController } from './specs/ViewController.nitro'
|
|
8
|
+
export { Window } from './specs/Window.nitro'
|
|
9
|
+
export { WindowScene } from './specs/WindowScene.nitro'
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Initialize runtime globals before renderer modules evaluate.
|
|
2
|
+
export { registerApp } from './registerApp'
|
|
3
|
+
export * from './types/ReactNitroReconcilerHostConfig'
|
|
4
|
+
export { Application, ViewController, Window, WindowScene } from './hybrids'
|
|
5
|
+
export * from './components/View'
|
|
6
|
+
export type { Point3D, CornerCurve } from './specs/View.nitro'
|
|
7
|
+
export type { Corner } from './specs/Corner'
|
|
8
|
+
export * from './components/Text'
|
|
9
|
+
export * from './components/ScrollView'
|
|
10
|
+
export * from './components/ScrollViewContent'
|
|
11
|
+
export * from './getViewYogaNode'
|
|
12
|
+
export * from './renderRoot'
|
|
13
|
+
export { useSafeAreaInsets } from './hooks/useSafeAreaInsets'
|
|
14
|
+
export { useRootContext } from './hooks/useRootContext'
|
|
15
|
+
export { RootContext as ViewControllerContext } from './contexts/RootContext'
|
|
16
|
+
export { registerView } from './ViewRegistry'
|
|
17
|
+
export { viewPropsSetters } from './ViewPropSetters'
|
|
18
|
+
export type { ViewDefinitionMap } from './types/ViewPropsUpdater'
|
|
19
|
+
export type { ListenerSubscription } from './specs/ListenerSubscription'
|
|
20
|
+
export type { EdgeInsets } from './specs/EdgeInsets'
|
|
21
|
+
|
|
22
|
+
// Gestures
|
|
23
|
+
export { GestureRecognizerState } from './specs/Gestures/GestureRecognizer.nitro'
|
|
24
|
+
export * from './specs/Gestures/TapGestureRecognizer.nitro'
|
|
25
|
+
export * from './specs/Gestures/PanGestureRecognizer.nitro'
|
|
26
|
+
export * from './specs/Gestures/LongPressGestureRecognizer.nitro'
|
|
27
|
+
|
|
28
|
+
// Animations
|
|
29
|
+
export { type Animator } from './specs/Animations/Animator.nitro'
|
|
30
|
+
export { AnimationCurve } from './specs/Animations/AnimationCurve'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import 'react-nitro-runtime'
|
|
2
|
+
import { createElement, type ComponentType } from 'react'
|
|
3
|
+
import { Application, ViewController, Window } from './hybrids'
|
|
4
|
+
import { renderRoot } from './renderRoot'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Registers the component rendered in each application window.
|
|
8
|
+
* Installs the runtime globals and owns the default native window setup.
|
|
9
|
+
* @param App The application's root React component.
|
|
10
|
+
* @see {@linkcode renderRoot} for applications that create their own native windows.
|
|
11
|
+
* @example
|
|
12
|
+
* registerApp(App)
|
|
13
|
+
*/
|
|
14
|
+
export function registerApp(App: ComponentType): void {
|
|
15
|
+
Application.registerRoot((scene) => {
|
|
16
|
+
const controller = new ViewController()
|
|
17
|
+
controller.view.setBackgroundColor(0xffffffff)
|
|
18
|
+
const element = createElement(App)
|
|
19
|
+
renderRoot(element, controller)
|
|
20
|
+
return new Window(scene, controller)
|
|
21
|
+
})
|
|
22
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createNitroRenderer } from "./NitroRendererHostConfig";
|
|
2
|
+
import type { ViewController } from "./specs/ViewController.nitro";
|
|
3
|
+
import type { ReactRoot } from "./types/ReactRoot";
|
|
4
|
+
import { createElement } from "react";
|
|
5
|
+
import { RootContext } from "./contexts/RootContext";
|
|
6
|
+
|
|
7
|
+
export function renderRoot(
|
|
8
|
+
reactElement: React.ReactElement,
|
|
9
|
+
rootViewController: ViewController,
|
|
10
|
+
) {
|
|
11
|
+
const reactRootView: ReactRoot = {
|
|
12
|
+
rootView: rootViewController.view,
|
|
13
|
+
};
|
|
14
|
+
const ReactNitroRenderer = createNitroRenderer(reactRootView.rootView);
|
|
15
|
+
const reactContainer = ReactNitroRenderer.createContainer(
|
|
16
|
+
reactRootView,
|
|
17
|
+
1, // tag
|
|
18
|
+
null, //hydrationCallbacks
|
|
19
|
+
false, //isStrictMode
|
|
20
|
+
false, // concurrentUpdatesByDefaultOverride
|
|
21
|
+
"surface-", // identifierPrefix,
|
|
22
|
+
function onUncaughtError(error, info) {
|
|
23
|
+
console.error("React Nitro Renderer Error:", error, info);
|
|
24
|
+
},
|
|
25
|
+
function onCaughtError(error, info) {
|
|
26
|
+
console.error("React Nitro Renderer Caught Error:", error, info);
|
|
27
|
+
},
|
|
28
|
+
function onRecoverableError(error, info) {
|
|
29
|
+
console.error("React Nitro Renderer Recoverable Error:", error, info);
|
|
30
|
+
},
|
|
31
|
+
function onDefaultTransitionIndicator() {
|
|
32
|
+
console.warn(
|
|
33
|
+
"onDefaultTransitionIndicator() called, no idea what it does",
|
|
34
|
+
);
|
|
35
|
+
},
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const rootElement = createElement(
|
|
39
|
+
RootContext.Provider,
|
|
40
|
+
{ value: rootViewController },
|
|
41
|
+
reactElement,
|
|
42
|
+
);
|
|
43
|
+
ReactNitroRenderer.updateContainer(rootElement, reactContainer);
|
|
44
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from "nitro-core";
|
|
2
|
+
|
|
3
|
+
export * from "#nitro/Animator";
|
|
4
|
+
|
|
5
|
+
@iOS({
|
|
6
|
+
language: 'swift',
|
|
7
|
+
implementation: {
|
|
8
|
+
className: 'HybridAnimator'
|
|
9
|
+
},
|
|
10
|
+
allowInheritance: false,
|
|
11
|
+
})
|
|
12
|
+
export declare class Animator extends HybridObject {
|
|
13
|
+
startAnimation(afterDelay?: number): void;
|
|
14
|
+
pauseAnimation(): void;
|
|
15
|
+
stopAnimation(withoutFinishing?: boolean): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from 'nitro-core'
|
|
2
|
+
import type { WindowScene } from './WindowScene.nitro'
|
|
3
|
+
import type { Window } from './Window.nitro'
|
|
4
|
+
import type { View } from './View.nitro'
|
|
5
|
+
|
|
6
|
+
export * from '#nitro/Application'
|
|
7
|
+
|
|
8
|
+
@iOS({
|
|
9
|
+
language: 'swift',
|
|
10
|
+
implementation: {
|
|
11
|
+
className: 'HybridApplication',
|
|
12
|
+
},
|
|
13
|
+
})
|
|
14
|
+
export declare class Application extends HybridObject {
|
|
15
|
+
static createView(): View
|
|
16
|
+
|
|
17
|
+
static registerRoot(onSceneCreated: (scene: WindowScene) => Window): void
|
|
18
|
+
|
|
19
|
+
static reloadRuntime(): void
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Corner = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { View } from './View.nitro'
|
|
2
|
+
|
|
3
|
+
/** Insets in points from a {@linkcode View}'s edges. @see {@linkcode View.safeAreaInsets} */
|
|
4
|
+
export interface EdgeInsets {
|
|
5
|
+
/** Distance from the top edge, in points. */
|
|
6
|
+
readonly top: number
|
|
7
|
+
/** Distance from the right edge, in points. */
|
|
8
|
+
readonly right: number
|
|
9
|
+
/** Distance from the bottom edge, in points. */
|
|
10
|
+
readonly bottom: number
|
|
11
|
+
/** Distance from the left edge, in points. */
|
|
12
|
+
readonly left: number
|
|
13
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from "nitro-core";
|
|
2
|
+
|
|
3
|
+
export * from "#nitro/GestureRecognizer";
|
|
4
|
+
|
|
5
|
+
// https://developer.apple.com/documentation/uikit/uigesturerecognizer/state-swift.property
|
|
6
|
+
export enum GestureRecognizerState {
|
|
7
|
+
Possible,
|
|
8
|
+
Began,
|
|
9
|
+
Changed,
|
|
10
|
+
Ended,
|
|
11
|
+
Cancelled,
|
|
12
|
+
Failed,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@iOS({
|
|
16
|
+
language: "swift",
|
|
17
|
+
allowInheritance: true,
|
|
18
|
+
allowMultipleImplementations: true,
|
|
19
|
+
protocolConformances: [{ protocol: "HybridGestureRecognizer" }],
|
|
20
|
+
})
|
|
21
|
+
export declare class GestureRecognizer extends HybridObject {
|
|
22
|
+
readonly numberOfTouches: number;
|
|
23
|
+
isEnabled: boolean;
|
|
24
|
+
|
|
25
|
+
readonly state: GestureRecognizerState
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { iOS } from "nitro-core";
|
|
2
|
+
import type { GestureRecognizer } from "./GestureRecognizer.nitro";
|
|
3
|
+
|
|
4
|
+
export * from "#nitro/LongPressGestureRecognizer";
|
|
5
|
+
|
|
6
|
+
@iOS({
|
|
7
|
+
language: "swift",
|
|
8
|
+
implementation: {
|
|
9
|
+
className: "HybridLongPressGestureRecognizer",
|
|
10
|
+
},
|
|
11
|
+
allowInheritance: false,
|
|
12
|
+
})
|
|
13
|
+
export declare class LongPressGestureRecognizer extends GestureRecognizer {
|
|
14
|
+
public constructor();
|
|
15
|
+
|
|
16
|
+
/** The minimum press duration in seconds. Defaults to 0.5. */
|
|
17
|
+
minimumPressDuration: number;
|
|
18
|
+
/** The maximum movement in points before recognition fails. Defaults to 10. */
|
|
19
|
+
allowableMovement: number;
|
|
20
|
+
/** The number of full taps required before the final press. Defaults to 0. */
|
|
21
|
+
numberOfTapsRequired: number;
|
|
22
|
+
numberOfTouchesRequired: number;
|
|
23
|
+
|
|
24
|
+
/** Called when the long press begins, changes, ends, or is cancelled. */
|
|
25
|
+
onLongPress?: (recognizer: LongPressGestureRecognizer) => void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { iOS } from "nitro-core";
|
|
2
|
+
import type { GestureRecognizer } from "./GestureRecognizer.nitro";
|
|
3
|
+
import type { View } from "../View.nitro";
|
|
4
|
+
|
|
5
|
+
export * from "#nitro/PanGestureRecognizer";
|
|
6
|
+
|
|
7
|
+
export type Point = { x: number; y: number };
|
|
8
|
+
|
|
9
|
+
@iOS({
|
|
10
|
+
language: "swift",
|
|
11
|
+
implementation: {
|
|
12
|
+
className: "HybridPanGestureRecognizer",
|
|
13
|
+
},
|
|
14
|
+
allowInheritance: false,
|
|
15
|
+
})
|
|
16
|
+
export declare class PanGestureRecognizer extends GestureRecognizer {
|
|
17
|
+
public constructor();
|
|
18
|
+
|
|
19
|
+
maximumNumberOfTouches: number;
|
|
20
|
+
minimumNumberOfTouches: number;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Interprets the pan gesture in the coordinate system of the specified view.
|
|
24
|
+
*/
|
|
25
|
+
translation(inParent: View): Point;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Interprets the velocity of the pan gesture in the coordinate system of the specified view.
|
|
29
|
+
*/
|
|
30
|
+
velocity(inParent: View): Point;
|
|
31
|
+
|
|
32
|
+
onPan?: (recognizer: PanGestureRecognizer) => void
|
|
33
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { iOS } from "nitro-core";
|
|
2
|
+
import type { GestureRecognizer } from "./GestureRecognizer.nitro";
|
|
3
|
+
|
|
4
|
+
export * from "#nitro/TapGestureRecognizer";
|
|
5
|
+
|
|
6
|
+
@iOS({
|
|
7
|
+
language: "swift",
|
|
8
|
+
implementation: {
|
|
9
|
+
className: "HybridTapGestureRecognizer",
|
|
10
|
+
},
|
|
11
|
+
allowInheritance: false,
|
|
12
|
+
})
|
|
13
|
+
export declare class TapGestureRecognizer extends GestureRecognizer {
|
|
14
|
+
public constructor();
|
|
15
|
+
|
|
16
|
+
numberOfTapsRequired: number;
|
|
17
|
+
numberOfTouchesRequired: number;
|
|
18
|
+
|
|
19
|
+
onTap?: (recognizer: TapGestureRecognizer) => void
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { iOS } from 'nitro-core'
|
|
2
|
+
import type { View } from './View.nitro'
|
|
3
|
+
|
|
4
|
+
export * from '#nitro/Label'
|
|
5
|
+
|
|
6
|
+
@iOS({
|
|
7
|
+
language: 'swift',
|
|
8
|
+
implementation: {
|
|
9
|
+
className: 'HybridLabel',
|
|
10
|
+
},
|
|
11
|
+
})
|
|
12
|
+
export declare class Label extends View {
|
|
13
|
+
public constructor()
|
|
14
|
+
|
|
15
|
+
text?: string
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from 'nitro-core'
|
|
2
|
+
import type { Size } from './Size'
|
|
3
|
+
|
|
4
|
+
export * from '#nitro/Screen'
|
|
5
|
+
|
|
6
|
+
@iOS({
|
|
7
|
+
language: 'swift',
|
|
8
|
+
implementation: {
|
|
9
|
+
className: 'HybridScreen',
|
|
10
|
+
},
|
|
11
|
+
})
|
|
12
|
+
export declare class Screen extends HybridObject {
|
|
13
|
+
readonly size: Size
|
|
14
|
+
readonly displayScale: number
|
|
15
|
+
readonly brightness: number
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { iOS } from 'nitro-core'
|
|
2
|
+
import type { View } from './View.nitro'
|
|
3
|
+
|
|
4
|
+
export * from '#nitro/ScrollView'
|
|
5
|
+
|
|
6
|
+
@iOS({
|
|
7
|
+
language: 'swift',
|
|
8
|
+
implementation: {
|
|
9
|
+
className: 'HybridScrollView',
|
|
10
|
+
},
|
|
11
|
+
})
|
|
12
|
+
export declare class ScrollView extends View {
|
|
13
|
+
public constructor()
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { iOS } from 'nitro-core'
|
|
2
|
+
import type { View } from './View.nitro'
|
|
3
|
+
|
|
4
|
+
export * from '#nitro/ScrollViewContent'
|
|
5
|
+
|
|
6
|
+
@iOS({
|
|
7
|
+
language: 'swift',
|
|
8
|
+
implementation: {
|
|
9
|
+
className: 'HybridScrollViewContent',
|
|
10
|
+
},
|
|
11
|
+
})
|
|
12
|
+
export declare class ScrollViewContent extends View {
|
|
13
|
+
public constructor()
|
|
14
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from 'nitro-core'
|
|
2
|
+
import type { Frame } from './Frame'
|
|
3
|
+
import type { Corner } from './Corner'
|
|
4
|
+
import type { GestureRecognizer } from './Gestures/GestureRecognizer.nitro'
|
|
5
|
+
import type { AnimationCurve } from './Animations/AnimationCurve'
|
|
6
|
+
import type { Animator } from './Animations/Animator.nitro'
|
|
7
|
+
import type { EdgeInsets } from './EdgeInsets'
|
|
8
|
+
|
|
9
|
+
export * from '#nitro/View'
|
|
10
|
+
|
|
11
|
+
export type CornerCurve = "circular" | "continuous"
|
|
12
|
+
|
|
13
|
+
export type Point3D = {
|
|
14
|
+
x: number
|
|
15
|
+
y: number
|
|
16
|
+
z: number
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@iOS({
|
|
20
|
+
language: 'swift',
|
|
21
|
+
allowMultipleImplementations: true,
|
|
22
|
+
allowInheritance: true,
|
|
23
|
+
protocolConformances: [{ protocol: 'View' }],
|
|
24
|
+
})
|
|
25
|
+
export declare class View extends HybridObject {
|
|
26
|
+
protected constructor()
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The parent view set by appendChild or insertBefore.
|
|
30
|
+
* Returns the existing HybridView, or undefined for roots and detached views.
|
|
31
|
+
*/
|
|
32
|
+
readonly parent?: View
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The safe area insets relative to this view's bounds, in points.
|
|
36
|
+
* Insets are zero while detached or when the view is entirely inside its parent's safe area.
|
|
37
|
+
*/
|
|
38
|
+
readonly safeAreaInsets: EdgeInsets
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* We interact with yoga from typescript using static hermes ffi, which
|
|
42
|
+
* doesn't support complex types. This is the c-pointer to the yoga node of this view.
|
|
43
|
+
* It's a 64-bit Double with the bit pattern of a unsigned 64-bit Int (UInt64 in Swift).
|
|
44
|
+
*/
|
|
45
|
+
readonly yogaNodePtr: number
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The background color as an unsigned 32-bit `0xRRGGBBAA` sRGB number.
|
|
49
|
+
* Returns `0x00000000` when unset or the native color cannot be represented as RGB.
|
|
50
|
+
*/
|
|
51
|
+
readonly backgroundColor?: number
|
|
52
|
+
/**
|
|
53
|
+
* Sets a fixed sRGB color in `0xRRGGBBAA` format (alpha is the last byte).
|
|
54
|
+
* For example, `0xff0000ff` is opaque red and `0x00000000` is transparent.
|
|
55
|
+
* @throws If color is not a finite integer between `0` and `0xffffffff`.
|
|
56
|
+
*/
|
|
57
|
+
setBackgroundColor(color: number): void
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The opacity of the view and its children, from 0 (transparent) to 1 (opaque).
|
|
61
|
+
* Defaults to 1.
|
|
62
|
+
*/
|
|
63
|
+
opacity: number
|
|
64
|
+
|
|
65
|
+
borderWidth?: number
|
|
66
|
+
readonly borderColor?: number
|
|
67
|
+
setBorderColor(color?: number): void
|
|
68
|
+
cornerRadius: number
|
|
69
|
+
/**
|
|
70
|
+
* The corners rounded by cornerRadius. Defaults to all four corners.
|
|
71
|
+
* Pass an empty array to leave every corner square.
|
|
72
|
+
*/
|
|
73
|
+
maskedCorners: Corner[]
|
|
74
|
+
cornerCurve: CornerCurve
|
|
75
|
+
|
|
76
|
+
setTranslation(x: number, y: number, z: number): void
|
|
77
|
+
readonly translation: Point3D
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Scales each axis around the view's center without changing its layout or translation.
|
|
81
|
+
* On iOS, each exact zero is applied as `0.00001` to avoid broken UIKit transform animations.
|
|
82
|
+
* The `scale` getter returns these applied values. Use `opacity = 0` to fully hide the view.
|
|
83
|
+
* @see https://stackoverflow.com/questions/25964224/cgaffinetransformscale-not-working-with-zero-scale
|
|
84
|
+
* @see https://stackoverflow.com/questions/75793513/uiview-animation-downscale-instantly-hides-the-view
|
|
85
|
+
*/
|
|
86
|
+
setScale(x: number, y: number, z: number): void
|
|
87
|
+
/** Applied scale factors, including the zero substitution described in `setScale`. */
|
|
88
|
+
readonly scale: Point3D
|
|
89
|
+
|
|
90
|
+
getFrame(): Frame
|
|
91
|
+
setFrame(frame: Frame): void
|
|
92
|
+
|
|
93
|
+
appendChild(child: View): void;
|
|
94
|
+
insertBefore(child: View, beforeChild: View): void;
|
|
95
|
+
removeChild(child: View): void;
|
|
96
|
+
/**
|
|
97
|
+
* Called right after updating props.
|
|
98
|
+
*/
|
|
99
|
+
afterUpdate(): void
|
|
100
|
+
|
|
101
|
+
setGestureRecognizers(gestureRecognizers?: GestureRecognizer[]): void
|
|
102
|
+
isUserInteractionEnabled: boolean
|
|
103
|
+
|
|
104
|
+
animate(duration: number, curve: AnimationCurve, animations: () => void): Animator
|
|
105
|
+
/**
|
|
106
|
+
* Animated the changes with spring.
|
|
107
|
+
* @param duration The duration of the spring animation in seconds.
|
|
108
|
+
* @param dampingRatio The damping ratio to apply to the initial acceleration and oscillation. To smoothly decelerate the animation without oscillation, specify a value of 1. Specify values closer to 0 to create less damping and more oscillation.
|
|
109
|
+
* @param animations Callback with the changes to perform.
|
|
110
|
+
*/
|
|
111
|
+
animateSpring(duration: number, dampingRatio: number, animations: () => void): Animator
|
|
112
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from 'nitro-core'
|
|
2
|
+
import type { View } from './View.nitro'
|
|
3
|
+
import type { ListenerSubscription } from './ListenerSubscription'
|
|
4
|
+
import type { EdgeInsets } from './EdgeInsets'
|
|
5
|
+
|
|
6
|
+
export * from '#nitro/ViewController'
|
|
7
|
+
|
|
8
|
+
export type ModifierKey = 'command' | 'alternate' | 'control' | 'shift'
|
|
9
|
+
|
|
10
|
+
@iOS({
|
|
11
|
+
language: 'swift',
|
|
12
|
+
implementation: {
|
|
13
|
+
className: 'HybridViewController',
|
|
14
|
+
},
|
|
15
|
+
protocolConformances: [{ protocol: 'ViewController' }],
|
|
16
|
+
})
|
|
17
|
+
export declare class ViewController extends HybridObject {
|
|
18
|
+
public constructor()
|
|
19
|
+
|
|
20
|
+
readonly view: View
|
|
21
|
+
/**
|
|
22
|
+
* Observes changes to this controller's root {@linkcode View.safeAreaInsets}.
|
|
23
|
+
* Remove the returned subscription when observation is no longer needed.
|
|
24
|
+
*/
|
|
25
|
+
addOnSafeAreaInsetsChangedListener(listener: (insets: EdgeInsets) => void): ListenerSubscription
|
|
26
|
+
present(other: ViewController, animated: boolean, completion: () => void): void
|
|
27
|
+
dismiss(animated: boolean, completion: () => void): void
|
|
28
|
+
addOnKeyPressedListener(key: string, modifiers: ModifierKey[], onPress: () => void): ListenerSubscription
|
|
29
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from 'nitro-core'
|
|
2
|
+
import type { Screen } from './Screen.nitro'
|
|
3
|
+
import type { ViewController } from './ViewController.nitro'
|
|
4
|
+
import type { WindowScene } from './WindowScene.nitro'
|
|
5
|
+
|
|
6
|
+
export * from '#nitro/Window'
|
|
7
|
+
|
|
8
|
+
@iOS({
|
|
9
|
+
language: 'swift',
|
|
10
|
+
implementation: {
|
|
11
|
+
className: 'HybridWindow',
|
|
12
|
+
},
|
|
13
|
+
protocolConformances: [{ protocol: 'Window' }],
|
|
14
|
+
})
|
|
15
|
+
export declare class Window extends HybridObject {
|
|
16
|
+
public constructor(scene: WindowScene, rootViewController: ViewController)
|
|
17
|
+
|
|
18
|
+
readonly screen: Screen
|
|
19
|
+
makeKeyAndVisible(): void
|
|
20
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { iOS, type HybridObject } from 'nitro-core'
|
|
2
|
+
import type { Window } from './Window.nitro'
|
|
3
|
+
|
|
4
|
+
export * from '#nitro/WindowScene'
|
|
5
|
+
|
|
6
|
+
@iOS({
|
|
7
|
+
language: 'swift',
|
|
8
|
+
implementation: {
|
|
9
|
+
className: 'HybridWindowScene',
|
|
10
|
+
},
|
|
11
|
+
protocolConformances: [{ protocol: 'WindowScene' }],
|
|
12
|
+
})
|
|
13
|
+
export declare class WindowScene extends HybridObject {
|
|
14
|
+
readonly windows: Window[]
|
|
15
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type ReactReconciler from "react-reconciler";
|
|
2
|
+
import type { View } from "../specs/View.nitro";
|
|
3
|
+
import type { Label } from "../specs/Label.nitro";
|
|
4
|
+
import type { ViewPropsMap } from "./ViewPropsUpdater";
|
|
5
|
+
import type { ReactRoot } from "./ReactRoot";
|
|
6
|
+
|
|
7
|
+
export type { ViewPropsMap, ViewPropsUpdater } from "./ViewPropsUpdater";
|
|
8
|
+
|
|
9
|
+
export type ReconcilerElementType = keyof ViewPropsMap;
|
|
10
|
+
|
|
11
|
+
export type ReconcilerProps = Record<string, unknown> //ViewPropsMap[ReconcilerElementType];
|
|
12
|
+
|
|
13
|
+
export type ReconcilerHostContext = Readonly<{}>
|
|
14
|
+
|
|
15
|
+
export type ReactNitroReconcilerHostConfig = ReactReconciler.HostConfig<
|
|
16
|
+
// type - react transforms <MyHostComp> to a "MyHostComp" string
|
|
17
|
+
ReconcilerElementType,
|
|
18
|
+
// props - the union of built-in host component props
|
|
19
|
+
ReconcilerProps,
|
|
20
|
+
// container - the renderer's root destination
|
|
21
|
+
ReactRoot,
|
|
22
|
+
// Instance - instances of host elements
|
|
23
|
+
View,
|
|
24
|
+
// TextInstance - React distinguishes text from other elements
|
|
25
|
+
Label,
|
|
26
|
+
// Suspense instance
|
|
27
|
+
View | Label,
|
|
28
|
+
// TODO: Hydratable instance
|
|
29
|
+
never, // TODO: can we leverage hydration somehow (fast first app render from previous state?)
|
|
30
|
+
// FormInstance
|
|
31
|
+
never,
|
|
32
|
+
// PublicInstance,
|
|
33
|
+
View | Label,
|
|
34
|
+
// TODO: HostContext - Context provided to the host components. not decided yet.
|
|
35
|
+
ReconcilerHostContext,
|
|
36
|
+
// ChildSet - only used in persistence/none-mutation node (e.g. fabric)
|
|
37
|
+
never,
|
|
38
|
+
// TODO: TimeoutHandle - used for scheduling timeouts
|
|
39
|
+
ReturnType<typeof setTimeout>,
|
|
40
|
+
// NoTimeout tbh no clue what this is
|
|
41
|
+
-1,
|
|
42
|
+
// TransitionStatus - Seems to be only used by ReactDOM for form actions
|
|
43
|
+
null
|
|
44
|
+
>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Native Map constructor that requires an entry for every key. */
|
|
2
|
+
export type StrictMap<Key extends PropertyKey, Value> = new <
|
|
3
|
+
const Entries extends readonly (readonly [Key, Value])[],
|
|
4
|
+
>(
|
|
5
|
+
entries: Entries & Record<Exclude<Key, Entries[number][0]>, never>,
|
|
6
|
+
) => Map<Key, Value>;
|