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.
Files changed (247) hide show
  1. package/LICENSE +21 -0
  2. package/Package.swift +104 -0
  3. package/README.md +111 -2
  4. package/Sources/ReactNitroRenderer/Animations/AnimationCurve+toUIAnimationCurve.swift +31 -0
  5. package/Sources/ReactNitroRenderer/Animations/HybridAnimator.swift +36 -0
  6. package/Sources/ReactNitroRenderer/Animations/View+Animations.swift +39 -0
  7. package/Sources/ReactNitroRenderer/Components/HybridLabel.swift +89 -0
  8. package/Sources/ReactNitroRenderer/Components/HybridScrollView.swift +21 -0
  9. package/Sources/ReactNitroRenderer/Components/HybridScrollViewContent.swift +36 -0
  10. package/Sources/ReactNitroRenderer/Components/HybridView.swift +22 -0
  11. package/Sources/ReactNitroRenderer/Components/View.swift +267 -0
  12. package/Sources/ReactNitroRenderer/CustomViewController.swift +36 -0
  13. package/Sources/ReactNitroRenderer/Extensions/Corner+toCACornerMask.swift +16 -0
  14. package/Sources/ReactNitroRenderer/Extensions/CornerCurve+toUICornerCurve.swift +23 -0
  15. package/Sources/ReactNitroRenderer/Extensions/EdgeInsets+UIEdgeInsets.swift +7 -0
  16. package/Sources/ReactNitroRenderer/Extensions/ModifierKey+toUIKeyModifierFlags.swift +31 -0
  17. package/Sources/ReactNitroRenderer/Extensions/Point+CGPoint.swift +15 -0
  18. package/Sources/ReactNitroRenderer/Extensions/UIGestureRecognizerState+toUIGestureRecognizerState.swift +39 -0
  19. package/Sources/ReactNitroRenderer/Gestures/HybridGestureRecognizer.swift +40 -0
  20. package/Sources/ReactNitroRenderer/Gestures/HybridLongPressGestureRecognizer.swift +53 -0
  21. package/Sources/ReactNitroRenderer/Gestures/HybridPanGestureRecognizer.swift +52 -0
  22. package/Sources/ReactNitroRenderer/Gestures/HybridTapGestureRecognizer.swift +42 -0
  23. package/Sources/ReactNitroRenderer/HybridApplication.swift +19 -0
  24. package/Sources/ReactNitroRenderer/HybridScreen.swift +22 -0
  25. package/Sources/ReactNitroRenderer/HybridViewController.swift +66 -0
  26. package/Sources/ReactNitroRenderer/HybridWindow.swift +25 -0
  27. package/Sources/ReactNitroRenderer/HybridWindowScene.swift +16 -0
  28. package/Sources/ReactNitroRenderer/RegisterRootCallback.swift +28 -0
  29. package/Sources/ReactNitroRenderer/RuntimeReloadableAppDelegate.swift +14 -0
  30. package/Sources/ReactNitroRenderer/SafeAreaInsetsListeners.swift +22 -0
  31. package/Sources/ReactNitroRenderer/UIColor+initRGBA.swift +10 -0
  32. package/Sources/ReactNitroRenderer/UIColor+rgba.swift +20 -0
  33. package/Sources/ReactNitroRenderer/ViewController.swift +13 -0
  34. package/Sources/ReactNitroRenderer/Window.swift +12 -0
  35. package/Sources/ReactNitroRenderer/WindowScene.swift +12 -0
  36. package/Sources/ReactNitroRenderer/YGNode.swift +46 -0
  37. package/nitrogen/generated/.gitattributes +1 -0
  38. package/nitrogen/generated/apple/ReactNitroRenderer-Swift-Cxx-Bridge.cpp +376 -0
  39. package/nitrogen/generated/apple/ReactNitroRendererAppleCxx/ReactNitroRendererAppleCxx.cpp +9 -0
  40. package/nitrogen/generated/apple/ReactNitroRendererAppleCxx/include/ReactNitroRendererAppleCxx/ReactNitroRendererAppleCxx.h +245 -0
  41. package/nitrogen/generated/apple/ReactNitroRendererAutolinking.cpp +46 -0
  42. package/nitrogen/generated/apple/ReactNitroRendererAutolinking.mm +24 -0
  43. package/nitrogen/generated/apple/c++/AnimationCurve-Swift.cpp +42 -0
  44. package/nitrogen/generated/apple/c++/Corner-Swift.cpp +52 -0
  45. package/nitrogen/generated/apple/c++/CornerCurve-Swift.cpp +46 -0
  46. package/nitrogen/generated/apple/c++/EdgeInsets-Swift.cpp +35 -0
  47. package/nitrogen/generated/apple/c++/Frame-Swift.cpp +35 -0
  48. package/nitrogen/generated/apple/c++/GestureRecognizerState-Swift.cpp +44 -0
  49. package/nitrogen/generated/apple/c++/HybridAnimatorSpecSwift.cpp +53 -0
  50. package/nitrogen/generated/apple/c++/HybridAnimatorSpec_cxx-Swift.cpp +28 -0
  51. package/nitrogen/generated/apple/c++/HybridApplicationSpecSwift.cpp +58 -0
  52. package/nitrogen/generated/apple/c++/HybridApplicationSpec_cxx-Swift.cpp +28 -0
  53. package/nitrogen/generated/apple/c++/HybridGestureRecognizerSpecSwift.cpp +48 -0
  54. package/nitrogen/generated/apple/c++/HybridGestureRecognizerSpec_cxx-Swift.cpp +28 -0
  55. package/nitrogen/generated/apple/c++/HybridLabelSpecSwift.cpp +49 -0
  56. package/nitrogen/generated/apple/c++/HybridLabelSpec_cxx-Swift.cpp +28 -0
  57. package/nitrogen/generated/apple/c++/HybridLongPressGestureRecognizerSpecSwift.cpp +85 -0
  58. package/nitrogen/generated/apple/c++/HybridLongPressGestureRecognizerSpec_cxx-Swift.cpp +28 -0
  59. package/nitrogen/generated/apple/c++/HybridPanGestureRecognizerSpecSwift.cpp +89 -0
  60. package/nitrogen/generated/apple/c++/HybridPanGestureRecognizerSpec_cxx-Swift.cpp +28 -0
  61. package/nitrogen/generated/apple/c++/HybridScreenSpecSwift.cpp +44 -0
  62. package/nitrogen/generated/apple/c++/HybridScreenSpec_cxx-Swift.cpp +28 -0
  63. package/nitrogen/generated/apple/c++/HybridScrollViewContentSpecSwift.cpp +40 -0
  64. package/nitrogen/generated/apple/c++/HybridScrollViewContentSpec_cxx-Swift.cpp +28 -0
  65. package/nitrogen/generated/apple/c++/HybridScrollViewSpecSwift.cpp +40 -0
  66. package/nitrogen/generated/apple/c++/HybridScrollViewSpec_cxx-Swift.cpp +28 -0
  67. package/nitrogen/generated/apple/c++/HybridTapGestureRecognizerSpecSwift.cpp +67 -0
  68. package/nitrogen/generated/apple/c++/HybridTapGestureRecognizerSpec_cxx-Swift.cpp +28 -0
  69. package/nitrogen/generated/apple/c++/HybridViewControllerSpecSwift.cpp +91 -0
  70. package/nitrogen/generated/apple/c++/HybridViewControllerSpec_cxx-Swift.cpp +28 -0
  71. package/nitrogen/generated/apple/c++/HybridViewSpecSwift.cpp +231 -0
  72. package/nitrogen/generated/apple/c++/HybridViewSpec_cxx-Swift.cpp +28 -0
  73. package/nitrogen/generated/apple/c++/HybridWindowSceneSpecSwift.cpp +34 -0
  74. package/nitrogen/generated/apple/c++/HybridWindowSceneSpec_cxx-Swift.cpp +28 -0
  75. package/nitrogen/generated/apple/c++/HybridWindowSpecSwift.cpp +53 -0
  76. package/nitrogen/generated/apple/c++/HybridWindowSpec_cxx-Swift.cpp +28 -0
  77. package/nitrogen/generated/apple/c++/ListenerSubscription-Swift.cpp +37 -0
  78. package/nitrogen/generated/apple/c++/ModifierKey-Swift.cpp +52 -0
  79. package/nitrogen/generated/apple/c++/Point-Swift.cpp +33 -0
  80. package/nitrogen/generated/apple/c++/Point3D-Swift.cpp +34 -0
  81. package/nitrogen/generated/apple/c++/Size-Swift.cpp +33 -0
  82. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/ReactNitroRendererAutolinking.hpp +13 -0
  83. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/AnimationCurve-Swift.hpp +23 -0
  84. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Corner-Swift.hpp +23 -0
  85. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/CornerCurve-Swift.hpp +23 -0
  86. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/EdgeInsets-Swift.hpp +23 -0
  87. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Frame-Swift.hpp +23 -0
  88. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/GestureRecognizerState-Swift.hpp +23 -0
  89. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridAnimatorSpecSwift.hpp +73 -0
  90. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridAnimatorSpec_cxx-Swift.hpp +23 -0
  91. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridApplicationSpecSwift.hpp +74 -0
  92. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridApplicationSpec_cxx-Swift.hpp +23 -0
  93. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridGestureRecognizerSpecSwift.hpp +74 -0
  94. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridGestureRecognizerSpec_cxx-Swift.hpp +23 -0
  95. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLabelSpecSwift.hpp +74 -0
  96. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLabelSpec_cxx-Swift.hpp +23 -0
  97. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLongPressGestureRecognizerSpecSwift.hpp +82 -0
  98. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridLongPressGestureRecognizerSpec_cxx-Swift.hpp +23 -0
  99. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridPanGestureRecognizerSpecSwift.hpp +80 -0
  100. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridPanGestureRecognizerSpec_cxx-Swift.hpp +23 -0
  101. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScreenSpecSwift.hpp +73 -0
  102. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScreenSpec_cxx-Swift.hpp +23 -0
  103. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewContentSpecSwift.hpp +72 -0
  104. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewContentSpec_cxx-Swift.hpp +23 -0
  105. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewSpecSwift.hpp +72 -0
  106. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridScrollViewSpec_cxx-Swift.hpp +23 -0
  107. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridTapGestureRecognizerSpecSwift.hpp +78 -0
  108. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridTapGestureRecognizerSpec_cxx-Swift.hpp +23 -0
  109. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewControllerSpecSwift.hpp +77 -0
  110. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewControllerSpec_cxx-Swift.hpp +23 -0
  111. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewSpecSwift.hpp +102 -0
  112. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridViewSpec_cxx-Swift.hpp +23 -0
  113. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSceneSpecSwift.hpp +71 -0
  114. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSceneSpec_cxx-Swift.hpp +23 -0
  115. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSpecSwift.hpp +74 -0
  116. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/HybridWindowSpec_cxx-Swift.hpp +23 -0
  117. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/ListenerSubscription-Swift.hpp +23 -0
  118. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/ModifierKey-Swift.hpp +23 -0
  119. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Point-Swift.hpp +23 -0
  120. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Point3D-Swift.hpp +23 -0
  121. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/ReactNitroRenderer-Swift-Cxx-Umbrella.hpp +69 -0
  122. package/nitrogen/generated/apple/c++/include/ReactNitroRenderer/private/Size-Swift.hpp +23 -0
  123. package/nitrogen/generated/apple/c++/include/module.modulemap +12 -0
  124. package/nitrogen/generated/apple/swift/AnimationCurve.swift +64 -0
  125. package/nitrogen/generated/apple/swift/Callback___ReactNitroRenderer__HybridWindowSpec_cxx___ReactNitroRenderer__HybridWindowSceneSpec_cxx.swift +71 -0
  126. package/nitrogen/generated/apple/swift/Callback_void.swift +60 -0
  127. package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__EdgeInsets.swift +66 -0
  128. package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__HybridLongPressGestureRecognizerSpec_cxx.swift +66 -0
  129. package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__HybridPanGestureRecognizerSpec_cxx.swift +66 -0
  130. package/nitrogen/generated/apple/swift/Callback_void___ReactNitroRenderer__HybridTapGestureRecognizerSpec_cxx.swift +66 -0
  131. package/nitrogen/generated/apple/swift/Corner.swift +64 -0
  132. package/nitrogen/generated/apple/swift/CornerCurve.swift +54 -0
  133. package/nitrogen/generated/apple/swift/EdgeInsets.swift +49 -0
  134. package/nitrogen/generated/apple/swift/Frame.swift +49 -0
  135. package/nitrogen/generated/apple/swift/GestureRecognizerState.swift +74 -0
  136. package/nitrogen/generated/apple/swift/HybridAnimatorSpec.swift +67 -0
  137. package/nitrogen/generated/apple/swift/HybridAnimatorSpec_cxx.swift +158 -0
  138. package/nitrogen/generated/apple/swift/HybridApplicationSpec.swift +67 -0
  139. package/nitrogen/generated/apple/swift/HybridApplicationSpec_cxx.swift +160 -0
  140. package/nitrogen/generated/apple/swift/HybridGestureRecognizerSpec.swift +67 -0
  141. package/nitrogen/generated/apple/swift/HybridGestureRecognizerSpec_cxx.swift +147 -0
  142. package/nitrogen/generated/apple/swift/HybridLabelSpec.swift +66 -0
  143. package/nitrogen/generated/apple/swift/HybridLabelSpec_cxx.swift +157 -0
  144. package/nitrogen/generated/apple/swift/HybridLongPressGestureRecognizerSpec.swift +70 -0
  145. package/nitrogen/generated/apple/swift/HybridLongPressGestureRecognizerSpec_cxx.swift +193 -0
  146. package/nitrogen/generated/apple/swift/HybridPanGestureRecognizerSpec.swift +69 -0
  147. package/nitrogen/generated/apple/swift/HybridPanGestureRecognizerSpec_cxx.swift +195 -0
  148. package/nitrogen/generated/apple/swift/HybridScreenSpec.swift +67 -0
  149. package/nitrogen/generated/apple/swift/HybridScreenSpec_cxx.swift +146 -0
  150. package/nitrogen/generated/apple/swift/HybridScrollViewContentSpec.swift +66 -0
  151. package/nitrogen/generated/apple/swift/HybridScrollViewContentSpec_cxx.swift +148 -0
  152. package/nitrogen/generated/apple/swift/HybridScrollViewSpec.swift +66 -0
  153. package/nitrogen/generated/apple/swift/HybridScrollViewSpec_cxx.swift +148 -0
  154. package/nitrogen/generated/apple/swift/HybridTapGestureRecognizerSpec.swift +68 -0
  155. package/nitrogen/generated/apple/swift/HybridTapGestureRecognizerSpec_cxx.swift +175 -0
  156. package/nitrogen/generated/apple/swift/HybridViewControllerSpec.swift +68 -0
  157. package/nitrogen/generated/apple/swift/HybridViewControllerSpec_cxx.swift +185 -0
  158. package/nitrogen/generated/apple/swift/HybridViewSpec.swift +89 -0
  159. package/nitrogen/generated/apple/swift/HybridViewSpec_cxx.swift +335 -0
  160. package/nitrogen/generated/apple/swift/HybridWindowSceneSpec.swift +65 -0
  161. package/nitrogen/generated/apple/swift/HybridWindowSceneSpec_cxx.swift +136 -0
  162. package/nitrogen/generated/apple/swift/HybridWindowSpec.swift +65 -0
  163. package/nitrogen/generated/apple/swift/HybridWindowSpec_cxx.swift +156 -0
  164. package/nitrogen/generated/apple/swift/ListenerSubscription.swift +29 -0
  165. package/nitrogen/generated/apple/swift/ModifierKey.swift +64 -0
  166. package/nitrogen/generated/apple/swift/Point.swift +35 -0
  167. package/nitrogen/generated/apple/swift/Point3D.swift +42 -0
  168. package/nitrogen/generated/apple/swift/Promise___ReactNitroRenderer__HybridWindowSpec_cxx.swift +102 -0
  169. package/nitrogen/generated/apple/swift/Promise_void.swift +100 -0
  170. package/nitrogen/generated/apple/swift/ReactNitroRenderer+ForeignTypeMetadata.swift +34 -0
  171. package/nitrogen/generated/apple/swift/Size.swift +35 -0
  172. package/nitrogen/generated/hybrid-classes.json +144 -0
  173. package/nitrogen/generated/shared/c++/ReactNitroRendererCxxModule.cpp +2 -0
  174. package/nitrogen/generated/shared/c++/include/ReactNitroRenderer/ReactNitroRendererCxxModule.hpp +2 -0
  175. package/nitrogen/generated/shared/javascript/Animator.cjs +19 -0
  176. package/nitrogen/generated/shared/javascript/Animator.d.cts +9 -0
  177. package/nitrogen/generated/shared/javascript/Application.cjs +19 -0
  178. package/nitrogen/generated/shared/javascript/Application.d.cts +9 -0
  179. package/nitrogen/generated/shared/javascript/GestureRecognizer.cjs +19 -0
  180. package/nitrogen/generated/shared/javascript/GestureRecognizer.d.cts +9 -0
  181. package/nitrogen/generated/shared/javascript/Label.cjs +19 -0
  182. package/nitrogen/generated/shared/javascript/Label.d.cts +9 -0
  183. package/nitrogen/generated/shared/javascript/LongPressGestureRecognizer.cjs +19 -0
  184. package/nitrogen/generated/shared/javascript/LongPressGestureRecognizer.d.cts +9 -0
  185. package/nitrogen/generated/shared/javascript/PanGestureRecognizer.cjs +19 -0
  186. package/nitrogen/generated/shared/javascript/PanGestureRecognizer.d.cts +9 -0
  187. package/nitrogen/generated/shared/javascript/Screen.cjs +19 -0
  188. package/nitrogen/generated/shared/javascript/Screen.d.cts +9 -0
  189. package/nitrogen/generated/shared/javascript/ScrollView.cjs +19 -0
  190. package/nitrogen/generated/shared/javascript/ScrollView.d.cts +9 -0
  191. package/nitrogen/generated/shared/javascript/ScrollViewContent.cjs +19 -0
  192. package/nitrogen/generated/shared/javascript/ScrollViewContent.d.cts +9 -0
  193. package/nitrogen/generated/shared/javascript/TapGestureRecognizer.cjs +19 -0
  194. package/nitrogen/generated/shared/javascript/TapGestureRecognizer.d.cts +9 -0
  195. package/nitrogen/generated/shared/javascript/View.cjs +19 -0
  196. package/nitrogen/generated/shared/javascript/View.d.cts +9 -0
  197. package/nitrogen/generated/shared/javascript/ViewController.cjs +19 -0
  198. package/nitrogen/generated/shared/javascript/ViewController.d.cts +9 -0
  199. package/nitrogen/generated/shared/javascript/Window.cjs +19 -0
  200. package/nitrogen/generated/shared/javascript/Window.d.cts +9 -0
  201. package/nitrogen/generated/shared/javascript/WindowScene.cjs +19 -0
  202. package/nitrogen/generated/shared/javascript/WindowScene.d.cts +9 -0
  203. package/package.json +42 -4
  204. package/src/NitroRendererHostConfig.ts +396 -0
  205. package/src/PropSetter.ts +29 -0
  206. package/src/StylePropSetters.ts +145 -0
  207. package/src/ViewPropSetters.ts +33 -0
  208. package/src/ViewRegistry.ts +47 -0
  209. package/src/YogaPropSetters.ts +347 -0
  210. package/src/components/ScrollView.tsx +30 -0
  211. package/src/components/ScrollViewContent.tsx +12 -0
  212. package/src/components/Text.tsx +34 -0
  213. package/src/components/View.ts +33 -0
  214. package/src/contexts/RootContext.ts +5 -0
  215. package/src/getViewYogaNode.ts +9 -0
  216. package/src/hooks/useRootContext.ts +11 -0
  217. package/src/hooks/useSafeAreaInsets.ts +36 -0
  218. package/src/hybrids.ts +9 -0
  219. package/src/index.ts +30 -0
  220. package/src/registerApp.ts +22 -0
  221. package/src/renderRoot.ts +44 -0
  222. package/src/specs/Animations/AnimationCurve.ts +6 -0
  223. package/src/specs/Animations/Animator.nitro.ts +16 -0
  224. package/src/specs/Application.nitro.ts +20 -0
  225. package/src/specs/Corner.ts +1 -0
  226. package/src/specs/EdgeInsets.ts +13 -0
  227. package/src/specs/Frame.ts +6 -0
  228. package/src/specs/Gestures/GestureRecognizer.nitro.ts +26 -0
  229. package/src/specs/Gestures/LongPressGestureRecognizer.nitro.ts +26 -0
  230. package/src/specs/Gestures/PanGestureRecognizer.nitro.ts +33 -0
  231. package/src/specs/Gestures/TapGestureRecognizer.nitro.ts +20 -0
  232. package/src/specs/Label.nitro.ts +16 -0
  233. package/src/specs/ListenerSubscription.ts +3 -0
  234. package/src/specs/Screen.nitro.ts +16 -0
  235. package/src/specs/ScrollView.nitro.ts +14 -0
  236. package/src/specs/ScrollViewContent.nitro.ts +14 -0
  237. package/src/specs/Size.ts +4 -0
  238. package/src/specs/View.nitro.ts +112 -0
  239. package/src/specs/ViewController.nitro.ts +29 -0
  240. package/src/specs/Window.nitro.ts +20 -0
  241. package/src/specs/WindowScene.nitro.ts +15 -0
  242. package/src/types/ReactNitroReconcilerHostConfig.ts +44 -0
  243. package/src/types/ReactRoot.ts +5 -0
  244. package/src/types/StrictMap.ts +6 -0
  245. package/src/types/ViewPropsUpdater.ts +30 -0
  246. package/src/types/YogaStyleProps.ts +47 -0
  247. package/src/utils/arePropArraysEqual.ts +18 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Margelo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9
+ of the Software, and to permit persons to whom the Software is furnished to do
10
+ so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/Package.swift ADDED
@@ -0,0 +1,104 @@
1
+ // swift-tools-version: 6.4
2
+
3
+ import Foundation
4
+ import PackageDescription
5
+
6
+ let name = "ReactNitroRenderer"
7
+ let generated = "nitrogen/generated"
8
+ let nitroDependencies: [Target.Dependency] = [
9
+ .product(name: "NitroModules", package: "nitro-core"),
10
+ .product(name: "Yoga", package: "react-nitro-yoga"),
11
+ ]
12
+ let cxxSettings: [CXXSetting] = [
13
+ .define("DEBUG", .when(configuration: .debug)),
14
+ .define("NDEBUG", .when(configuration: .release)),
15
+ .disableWarning("nullability-extension"),
16
+ ]
17
+ let swiftSources = ["Sources/ReactNitroRenderer", "\(generated)/apple/swift"]
18
+ let bridgeSources = [
19
+ "c++", "ReactNitroRenderer-Swift-Cxx-Bridge.cpp", "ReactNitroRendererAutolinking.cpp",
20
+ ]
21
+
22
+ // Bare-host integration. Nitrogen generates the bindings; this manifest owns the targets.
23
+ let package = Package(
24
+ name: name,
25
+ platforms: [.iOS(.v16), .macOS(.v13)],
26
+ products: [
27
+ .library(name: name, targets: ["\(name)Cxx", name, "\(name)SwiftBridge"])
28
+ ],
29
+ dependencies: [
30
+ .package(path: "../nitro-core"),
31
+ .package(path: "../react-nitro-yoga"),
32
+ ],
33
+ targets: [
34
+ .target(
35
+ name: "\(name)Cxx",
36
+ dependencies: nitroDependencies,
37
+ path: "\(generated)/shared/c++",
38
+ exclude: ["include"],
39
+ publicHeadersPath: "include",
40
+ cxxSettings: cxxSettings
41
+ ),
42
+ .target(
43
+ name: "\(name)AppleCxx",
44
+ dependencies: [.target(name: "\(name)Cxx")] + nitroDependencies,
45
+ path: "\(generated)/apple/\(name)AppleCxx",
46
+ cxxSettings: cxxSettings
47
+ ),
48
+ .target(
49
+ name: name,
50
+ dependencies: [.target(name: "\(name)AppleCxx")] + nitroDependencies,
51
+ path: ".",
52
+ exclude: excludes(in: ".", keeping: swiftSources),
53
+ sources: swiftSources,
54
+ cxxSettings: cxxSettings,
55
+ swiftSettings: [
56
+ // UIKit implementations run synchronously on the host's main thread.
57
+ .swiftLanguageMode(.v5),
58
+ .unsafeFlags(["-strict-concurrency=minimal"]),
59
+ .enableUpcomingFeature("InternalImportsByDefault"),
60
+ .enableUpcomingFeature("MemberImportVisibility"),
61
+ .interoperabilityMode(.Cxx),
62
+ .unsafeFlags(["-Xfrontend", "-clang-header-expose-decls=has-expose-attr-or-stdlib"]),
63
+ .unsafeFlags([
64
+ "-Xfrontend", "-clang-header-expose-module",
65
+ "-Xfrontend", "NitroModules=NitroModules-Swift.h",
66
+ ]),
67
+ ]
68
+ ),
69
+ .target(
70
+ name: "\(name)SwiftBridge",
71
+ dependencies: [.target(name: name), .target(name: "\(name)AppleCxx")] + nitroDependencies,
72
+ path: "\(generated)/apple",
73
+ exclude: excludes(in: "\(generated)/apple", keeping: bridgeSources) + ["c++/include"],
74
+ sources: bridgeSources,
75
+ publicHeadersPath: "c++/include",
76
+ cxxSettings: cxxSettings + [
77
+ .unsafeFlags(["-I${GENERATED_MODULEMAP_DIR}", "-fno-modules"])
78
+ ]
79
+ ),
80
+ ],
81
+ cxxLanguageStandard: .cxx20
82
+ )
83
+
84
+ func excludes(in path: String, keeping sources: [String]) -> [String] {
85
+ var parents: Set<String> = [""]
86
+ for source in sources {
87
+ var components = source.split(separator: "/").dropLast()
88
+ while !components.isEmpty {
89
+ parents.insert(components.joined(separator: "/"))
90
+ components = components.dropLast()
91
+ }
92
+ }
93
+ let root = URL(fileURLWithPath: Context.packageDirectory).appendingPathComponent(path)
94
+ return parents.sorted().flatMap { parent in
95
+ let entries =
96
+ (try? FileManager.default.contentsOfDirectory(
97
+ atPath: root.appendingPathComponent(parent).path)) ?? []
98
+ return entries.sorted().compactMap { entry in
99
+ let entryPath = parent.isEmpty ? entry : "\(parent)/\(entry)"
100
+ return entry.hasPrefix(".") || sources.contains(entryPath) || parents.contains(entryPath)
101
+ ? nil : entryPath
102
+ }
103
+ }
104
+ }
package/README.md CHANGED
@@ -1,3 +1,112 @@
1
- # Temporary Holding Version
1
+ # React Nitro Renderer
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Install JavaScript dependencies from the repository root with `bun install`.
4
+
5
+ The JavaScript package exports React components such as `View` and `Text`, rendering
6
+ functions, and `registerApp`. For a standard app, register the root component:
7
+
8
+ ```tsx
9
+ import { registerApp } from 'react-nitro-renderer'
10
+ import { App } from './App'
11
+
12
+ registerApp(App)
13
+ ```
14
+
15
+ The renderer initializes runtime globals before loading its rendering dependencies.
16
+ `registerApp` creates a native window and renders the component for each scene.
17
+
18
+ For custom window setup, use `Application`, `ViewController`, `Window` and
19
+ `WindowScene`. Register the root callback with `Application.registerRoot`, then
20
+ create the view controller and window:
21
+
22
+ ```tsx
23
+ import { Application, renderRoot, ViewController, Window } from "react-nitro-renderer";
24
+
25
+ Application.registerRoot((scene) => {
26
+ const viewController = new ViewController();
27
+ renderRoot(<App />, viewController);
28
+ return new Window(scene, viewController);
29
+ });
30
+ ```
31
+
32
+ React roots provide `useSafeAreaInsets()`, which subscribes to the closest
33
+ view controller's root view and returns its insets in points:
34
+
35
+ ```tsx
36
+ function App() {
37
+ const insets = useSafeAreaInsets();
38
+ return (
39
+ <View layout={{ flex: 1, paddingTop: insets.top, paddingBottom: insets.bottom }}>
40
+ <Text>Inside the safe area</Text>
41
+ </View>
42
+ );
43
+ }
44
+ ```
45
+
46
+ The hook is exported from `react-nitro-renderer` and throws outside a React
47
+ Nitro root. Every native view exposes `safeAreaInsets`, including `viewController.view`.
48
+ Insets are relative to that view's bounds, so a view entirely inside its parent's
49
+ safe area reports zero. The controller's
50
+ `addOnSafeAreaInsetsChangedListener(listener)` observes its root view. Call
51
+ `remove()` on the returned subscription when it is no longer needed.
52
+
53
+ Scale and translation are flat style props:
54
+
55
+ ```tsx
56
+ <View style={{ scale: 1.2, scaleX: 1.5, translateX: 20 }} />
57
+ ```
58
+
59
+ `scale` defaults to `1` and sets all three axes. `scaleX`, `scaleY`, and `scaleZ`
60
+ override their respective axes. Scaling preserves
61
+ translation and does not change Yoga layout dimensions. Native view refs expose
62
+ `setScale(x, y, z)` and a readonly `scale` value with `x`, `y`, and `z` fields.
63
+
64
+ On iOS, exact zero scale values are applied as `0.00001` to avoid a UIKit/Core
65
+ Animation bug that can make a view disappear immediately during an exit animation.
66
+ This applies to all scale style props and `setScale`; the `scale` getter returns
67
+ the applied values. Other finite scale values are preserved. Use `opacity: 0`
68
+ when the view must be fully transparent.
69
+
70
+ Public reports describe [zero-scale transform interpolation failures](https://stackoverflow.com/questions/25964224/cgaffinetransformscale-not-working-with-zero-scale)
71
+ and [immediate disappearance when animating to zero](https://stackoverflow.com/questions/75793513/uiview-animation-downscale-instantly-hides-the-view).
72
+
73
+ ## Native renderer
74
+
75
+ The Swift package exposes the `ReactNitroRenderer` library and depends on the
76
+ local `../nitro-core` and `../react-nitro-yoga` packages. The core package builds
77
+ native sources copied from the pinned `nitro-core` dependency installed by `bun install`.
78
+ Add Swift sources under
79
+ `Sources/ReactNitroRenderer/` and use `import NitroModules` to access
80
+ Nitro's Swift types. C++ interoperability is enabled for Nitro's C++-backed types.
81
+
82
+ `Package.swift` owns the standalone host targets. Nitrogen generates their
83
+ bindings from specs configured with `"environment": "bare"`:
84
+
85
+ - `ReactNitroRendererCxx`: `nitrogen/generated/shared/c++`.
86
+ - `ReactNitroRendererAppleCxx`: the generated C++ bridge declarations.
87
+ - `ReactNitroRenderer`: handwritten Swift and `nitrogen/generated/apple/swift`.
88
+ - `ReactNitroRendererSwiftBridge`: `nitrogen/generated/apple/c++`, the generated bridge implementation, and the public autolinking API.
89
+
90
+ The `ReactNitroRenderer` product includes both the Swift module and its C++ wrappers.
91
+ Generated Swift imports `ReactNitroRendererAppleCxx` explicitly. Regenerate
92
+ bindings with `bun run specs` after changing specs or updating Nitrogen.
93
+
94
+ Register the generated HybridObject classes before using their JavaScript classes:
95
+
96
+ ```cpp
97
+ #include <ReactNitroRenderer/ReactNitroRendererAutolinking.hpp>
98
+
99
+ margelo::nitro::renderer::registerHybridClasses();
100
+ ```
101
+
102
+ Build the Swift package from this directory:
103
+
104
+ ```bash
105
+ swift build
106
+ ```
107
+
108
+ Use Swift 6.4's default Swift Build backend (or Xcode). The C++ wrappers use its
109
+ `GENERATED_MODULEMAP_DIR` to include Swift's generated header after the C++ types
110
+ it references; importing that header as an isolated Clang module loses those types.
111
+
112
+ Generate native bindings from the TypeScript specs with `bun run specs`.
@@ -0,0 +1,31 @@
1
+ internal import UIKit
2
+
3
+ extension AnimationCurve {
4
+ init(_ uiAnimationCurve: UIView.AnimationCurve) {
5
+ switch uiAnimationCurve {
6
+ case .linear:
7
+ self = .linear
8
+ case .easeIn:
9
+ self = .easein
10
+ case .easeOut:
11
+ self = .easeout
12
+ case .easeInOut:
13
+ self = .easeinout
14
+ @unknown default:
15
+ preconditionFailure("Unknown animation curve: \(uiAnimationCurve.rawValue)")
16
+ }
17
+ }
18
+
19
+ func toUIAnimationCurve() -> UIView.AnimationCurve {
20
+ switch self {
21
+ case .linear:
22
+ return .linear
23
+ case .easein:
24
+ return .easeIn
25
+ case .easeout:
26
+ return .easeOut
27
+ case .easeinout:
28
+ return .easeInOut
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,36 @@
1
+ //
2
+ // HybridAnimator.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Hanno Gödecke on 21.10.2026.
6
+ //
7
+
8
+ internal import NitroModules
9
+ import UIKit
10
+
11
+ class HybridAnimator : HybridAnimatorSpec {
12
+ var animator: UIViewPropertyAnimator
13
+
14
+ init(animator: UIViewPropertyAnimator) throws {
15
+ self.animator = animator
16
+ try super.init()
17
+ }
18
+
19
+ func startAnimation(afterDelay: Double?) throws {
20
+ guard let delay = afterDelay else {
21
+ animator.startAnimation()
22
+ return
23
+ }
24
+ animator.startAnimation(afterDelay: delay)
25
+ }
26
+
27
+ func pauseAnimation() throws {
28
+ animator.pauseAnimation()
29
+ }
30
+
31
+ func stopAnimation(withoutFinishing: Bool?) throws {
32
+ animator.stopAnimation(withoutFinishing ?? false)
33
+ }
34
+
35
+
36
+ }
@@ -0,0 +1,39 @@
1
+ //
2
+ // View+animations.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Hanno Gödecke on 21.10.2026.
6
+ //
7
+
8
+ import UIKit
9
+ public import NitroModules
10
+ internal import NitroModulesCxx
11
+
12
+ public extension View where Self: HybridViewSpec {
13
+ func animate(duration: Double, curve: AnimationCurve, animations: any NitroModules.Callback<(), Void>) throws -> any HybridAnimatorSpec {
14
+ let uiCurve = curve.toUIAnimationCurve()
15
+ let animator = UIViewPropertyAnimator(duration: duration, curve: uiCurve) {
16
+ do {
17
+ try animations.callSync()
18
+ } catch {
19
+ let cppError = error.toCpp()
20
+ margelo.nitro.GlobalErrorHandler.reportError(.UICallback, cppError)
21
+ }
22
+ }
23
+
24
+ return try HybridAnimator(animator: animator)
25
+ }
26
+
27
+ func animateSpring(duration: Double, dampingRatio: Double, animations: any NitroModules.Callback<(), Void>) throws -> any HybridAnimatorSpec {
28
+ let animator = UIViewPropertyAnimator(duration: duration, dampingRatio: dampingRatio) {
29
+ do {
30
+ try animations.callSync()
31
+ } catch {
32
+ let cppError = error.toCpp()
33
+ margelo.nitro.GlobalErrorHandler.reportError(.UICallback, cppError)
34
+ }
35
+ }
36
+
37
+ return try HybridAnimator(animator: animator)
38
+ }
39
+ }
@@ -0,0 +1,89 @@
1
+ internal import NitroModules
2
+ internal import UIKit
3
+ internal import yoga
4
+
5
+ final class HybridLabel: HybridLabelSpec {
6
+ typealias AllowedChildrenType = Never
7
+
8
+ let view: LabelView
9
+ let yogaNode: YGNode
10
+ var parentReference: (any HybridViewSpec)?
11
+
12
+ override init() throws {
13
+ let label = LabelView()
14
+ view = label
15
+
16
+ yogaNode = YGNode(measure: { width, widthMode, height, heightMode in
17
+ let availableWidth = widthMode == .undefined
18
+ ? CGFloat.greatestFiniteMagnitude
19
+ : CGFloat(width)
20
+ let availableHeight = heightMode == .undefined
21
+ ? CGFloat.greatestFiniteMagnitude
22
+ : CGFloat(height)
23
+ let availableSize = CGSize(width: availableWidth, height: availableHeight)
24
+ let measuredSize = label.sizeThatFits(availableSize)
25
+ var measuredWidth = Float(measuredSize.width)
26
+ var measuredHeight = Float(measuredSize.height)
27
+
28
+ if widthMode == .exactly {
29
+ measuredWidth = width
30
+ } else if widthMode == .atMost {
31
+ measuredWidth = min(measuredWidth, width)
32
+ }
33
+
34
+ if heightMode == .exactly {
35
+ measuredHeight = height
36
+ } else if heightMode == .atMost {
37
+ measuredHeight = min(measuredHeight, height)
38
+ }
39
+
40
+ return YGSize(width: measuredWidth, height: measuredHeight)
41
+ })
42
+ try super.init()
43
+ }
44
+
45
+ func setFrame(frame: Frame) throws {
46
+ // setFrame gets called when we are done calculating the layout
47
+ // For the text content we have to consider any insets, which we are applying here
48
+ let top = contentInset(for: .top)
49
+ let left = contentInset(for: .left)
50
+ let bottom = contentInset(for: .bottom)
51
+ let right = contentInset(for: .right)
52
+ view.contentInsets = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)
53
+ view.bounds.size = CGSize(width: frame.width, height: frame.height)
54
+ view.center = CGPoint(x: frame.x + frame.width / 2,
55
+ y: frame.y + frame.height / 2)
56
+ }
57
+
58
+ private func contentInset(for edge: YGEdge) -> CGFloat {
59
+ let border = YGNodeLayoutGetBorder(yogaNode.ref, edge)
60
+ let padding = YGNodeLayoutGetPadding(yogaNode.ref, edge)
61
+ let inset = border + padding
62
+ return CGFloat(inset)
63
+ }
64
+
65
+ var text: String? {
66
+ get {
67
+ return view.text
68
+ }
69
+ set {
70
+ guard view.text != newValue else { return }
71
+ view.text = newValue
72
+ YGNodeMarkDirty(yogaNode.ref)
73
+ }
74
+ }
75
+ }
76
+
77
+ final class LabelView: UILabel {
78
+ var contentInsets: UIEdgeInsets = .zero {
79
+ didSet {
80
+ guard contentInsets != oldValue else { return }
81
+ setNeedsDisplay()
82
+ }
83
+ }
84
+
85
+ override func drawText(in rect: CGRect) {
86
+ let contentRect = rect.inset(by: contentInsets)
87
+ super.drawText(in: contentRect)
88
+ }
89
+ }
@@ -0,0 +1,21 @@
1
+ //
2
+ // HybridScrollView.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Hanno Gödecke on 29.09.2026.
6
+ //
7
+ // .contentSize is set by HybridScrollViewContent
8
+
9
+ import Foundation
10
+ import UIKit
11
+ import yoga
12
+ import NitroModules
13
+
14
+ final class HybridScrollView: HybridScrollViewSpec {
15
+ typealias AllowedChildrenType = any ScrollViewContent
16
+
17
+ let view = UIScrollView();
18
+
19
+ let yogaNode: YGNode = YGNode()
20
+ var parentReference: (any HybridViewSpec)?
21
+ }
@@ -0,0 +1,36 @@
1
+ //
2
+ // HybridScrollViewContent.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Hanno Gödecke on 29.09.2026.
6
+ //
7
+ // This is expected to be the one and only child of HybridScrollView.
8
+ // It will contain all the ScrollView's content, and will report its size
9
+ // to the UIScrollView as contentSize. This is what makes it scroll, as the
10
+ // content size will be larger than the UIScrollView's bounds.
11
+ //
12
+
13
+
14
+ import UIKit
15
+ import yoga
16
+ import NitroModules
17
+
18
+ protocol ScrollViewContent: View {}
19
+
20
+ final class HybridScrollViewContent: HybridScrollViewContentSpec, ScrollViewContent {
21
+ typealias AllowedChildrenType = any View
22
+
23
+ let view = UIView()
24
+ let yogaNode = YGNode()
25
+ var parentReference: (any HybridViewSpec)?
26
+
27
+ func setFrame(frame: Frame) throws {
28
+ guard let parent, let scrollView = parent.view as? UIScrollView else {
29
+ throw RuntimeError("<ScrollViewContent> must be the direct and only child of <ScrollView>!")
30
+ }
31
+ view.bounds.size = CGSize(width: frame.width, height: frame.height)
32
+ view.center = CGPoint(x: frame.x + frame.width / 2,
33
+ y: frame.y + frame.height / 2)
34
+ scrollView.contentSize = view.bounds.size
35
+ }
36
+ }
@@ -0,0 +1,22 @@
1
+ internal import NitroModules
2
+ internal import UIKit
3
+
4
+ final class HybridView: HybridViewSpec {
5
+ typealias AllowedChildrenType = any View
6
+
7
+ let yogaNode = YGNode()
8
+ var parentReference: (any HybridViewSpec)?
9
+
10
+ let view: UIView
11
+
12
+ override convenience init() throws {
13
+ let view = UIView()
14
+ self.init(view: view)
15
+ }
16
+
17
+ init(view: UIView) {
18
+ self.view = view
19
+ // The generated base initializer is empty. Wrapping this UIKit object cannot fail.
20
+ try! super.init()
21
+ }
22
+ }