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
@@ -0,0 +1,267 @@
1
+ //
2
+ // View.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Marc Rousavy on 18.09.26.
6
+ //
7
+
8
+ public import UIKit
9
+ internal import NitroModules
10
+ internal import yoga
11
+
12
+ public protocol View: AnyObject {
13
+ associatedtype ViewType: UIView
14
+ associatedtype AllowedChildrenType
15
+ var view: ViewType { get }
16
+ var yogaNode: YGNode { get }
17
+ var parentReference: (any HybridViewSpec)? { get set }
18
+ var yogaNodePtr: Double { get }
19
+ var cornerCurve: CornerCurve { get set }
20
+ }
21
+
22
+ public extension View {
23
+ var safeAreaInsets: EdgeInsets {
24
+ let insets = view.safeAreaInsets
25
+ return EdgeInsets(insets)
26
+ }
27
+
28
+ var parent: (any HybridViewSpec)? {
29
+ return parentReference
30
+ }
31
+
32
+ var yogaNodePtr: Double {
33
+ let address = UInt(bitPattern: yogaNode.ref)
34
+ let bits = UInt64(address)
35
+ return Double(bitPattern: bits)
36
+ }
37
+
38
+ //MARK: Props
39
+
40
+ var backgroundColor: Double? {
41
+ guard let color = view.backgroundColor else {
42
+ return nil
43
+ }
44
+ let resolved = color.resolvedColor(with: view.traitCollection)
45
+ guard let rgba = resolved.rgba else {
46
+ return nil
47
+ }
48
+ return Double(rgba)
49
+ }
50
+
51
+ func setBackgroundColor(color: Double) throws {
52
+ guard let rgba = UInt32(exactly: color) else {
53
+ throw RuntimeError("Invalid background color \(color): expected an integer between 0 and 0xffffffff in 0xRRGGBBAA format.")
54
+ }
55
+ view.backgroundColor = UIColor(rgba: rgba)
56
+ }
57
+
58
+ var opacity: Double {
59
+ get {
60
+ return view.alpha
61
+ }
62
+ set {
63
+ view.alpha = newValue
64
+ }
65
+ }
66
+
67
+ var borderWidth: Double? {
68
+ get {
69
+ return view.layer.borderWidth
70
+ }
71
+ set {
72
+ view.layer.borderWidth = newValue ?? 0
73
+ }
74
+ }
75
+
76
+ var borderColor: Double? {
77
+ guard let color = view.layer.borderColor else {
78
+ return nil
79
+ }
80
+ let uiColor = UIColor(cgColor: color)
81
+ guard let rgba = uiColor.rgba else {
82
+ return nil
83
+ }
84
+ return Double(rgba)
85
+ }
86
+
87
+ func setBorderColor(color: Double?) throws {
88
+ guard let color else {
89
+ view.layer.borderColor = nil
90
+ return;
91
+ }
92
+
93
+ guard let rgba = UInt32(exactly: color) else {
94
+ throw RuntimeError("Invalid background color \(color): expected an integer between 0 and 0xffffffff in 0xRRGGBBAA format.")
95
+ }
96
+ view.layer.borderColor = UIColor(rgba: rgba).cgColor
97
+ }
98
+
99
+ var cornerRadius: Double {
100
+ get {
101
+ return view.layer.cornerRadius
102
+ }
103
+ set {
104
+ view.layer.cornerRadius = newValue
105
+ }
106
+ }
107
+
108
+ var maskedCorners: [Corner] {
109
+ get {
110
+ let mask = view.layer.maskedCorners
111
+ let corners: [Corner] = [.topleft, .topright, .bottomleft, .bottomright]
112
+ return corners.filter { corner in
113
+ let cornerMask = corner.toCACornerMask()
114
+ return mask.contains(cornerMask)
115
+ }
116
+ }
117
+ set {
118
+ var mask: CACornerMask = []
119
+ for corner in newValue {
120
+ let cornerMask = corner.toCACornerMask()
121
+ mask.formUnion(cornerMask)
122
+ }
123
+ view.layer.maskedCorners = mask
124
+ }
125
+ }
126
+
127
+ var cornerCurve: CornerCurve {
128
+ get {
129
+ let curve = view.layer.cornerCurve
130
+ return CornerCurve(curve)
131
+ }
132
+ set {
133
+ let curve = newValue.toUICornerCurve()
134
+ view.layer.cornerCurve = curve
135
+ }
136
+ }
137
+
138
+ var translation: Point3D {
139
+ let transform = view.layer.transform
140
+ let x = Double(transform.m41)
141
+ let y = Double(transform.m42)
142
+ let z = Double(transform.m43)
143
+ return Point3D(x: x, y: y, z: z)
144
+ }
145
+
146
+ func setTranslation(x: Double, y: Double, z: Double) throws {
147
+ guard x.isFinite && y.isFinite && z.isFinite else {
148
+ throw RuntimeError("Invalid translation (\(x), \(y), \(z)): expected finite numbers.")
149
+ }
150
+ var transform = view.layer.transform
151
+ transform.m41 = CGFloat(x)
152
+ transform.m42 = CGFloat(y)
153
+ transform.m43 = CGFloat(z)
154
+ let isUnchanged = CATransform3DEqualToTransform(view.layer.transform, transform)
155
+ if isUnchanged {
156
+ return
157
+ }
158
+ view.layer.transform = transform
159
+ }
160
+
161
+ var scale: Point3D {
162
+ let transform = view.layer.transform
163
+ let x = Double(transform.m11)
164
+ let y = Double(transform.m22)
165
+ let z = Double(transform.m33)
166
+ return Point3D(x: x, y: y, z: z)
167
+ }
168
+
169
+ func setScale(x: Double, y: Double, z: Double) throws {
170
+ guard x.isFinite && y.isFinite && z.isFinite else {
171
+ throw RuntimeError("Invalid scale (\(x), \(y), \(z)): expected finite numbers.")
172
+ }
173
+ // TODO: Remove zero substitution once UIKit fixes zero-scale transform interpolation on all supported iOS versions.
174
+ // Reports: https://stackoverflow.com/questions/25964224/cgaffinetransformscale-not-working-with-zero-scale
175
+ // https://stackoverflow.com/questions/75793513/uiview-animation-downscale-instantly-hides-the-view
176
+ let zeroScaleReplacement = 0.00001
177
+ var transform = view.layer.transform
178
+ transform.m11 = CGFloat(x == 0 ? zeroScaleReplacement : x)
179
+ transform.m22 = CGFloat(y == 0 ? zeroScaleReplacement : y)
180
+ transform.m33 = CGFloat(z == 0 ? zeroScaleReplacement : z)
181
+ let isUnchanged = CATransform3DEqualToTransform(view.layer.transform, transform)
182
+ if isUnchanged {
183
+ return
184
+ }
185
+ view.layer.transform = transform
186
+ }
187
+
188
+ func getFrame() -> Frame {
189
+ let size = view.bounds.size
190
+ let center = view.center
191
+ return Frame(x: center.x - size.width / 2,
192
+ y: center.y - size.height / 2,
193
+ width: size.width,
194
+ height: size.height)
195
+ }
196
+
197
+ func setFrame(frame: Frame) throws {
198
+ view.bounds.size = CGSize(width: frame.width, height: frame.height)
199
+ view.center = CGPoint(x: frame.x + frame.width / 2,
200
+ y: frame.y + frame.height / 2)
201
+ }
202
+
203
+ func afterUpdate() {
204
+ let isYogaNodeDirty = YGNodeIsDirty(yogaNode.ref)
205
+ if isYogaNodeDirty {
206
+ let overflow = YGNodeStyleGetOverflow(yogaNode.ref)
207
+ view.clipsToBounds = overflow == .hidden
208
+ }
209
+ }
210
+
211
+ //MARK: Gestures
212
+
213
+ func setGestureRecognizers(gestureRecognizers: [any HybridGestureRecognizerSpec]?) throws {
214
+ view.gestureRecognizers?.forEach { prevGestureRecognizer in
215
+ view.removeGestureRecognizer(prevGestureRecognizer)
216
+ }
217
+ gestureRecognizers?.forEach { newGestureRecognizer in
218
+ view.addGestureRecognizer(newGestureRecognizer.gestureRecognizer)
219
+ }
220
+ }
221
+
222
+ var isUserInteractionEnabled: Bool {
223
+ get {
224
+ return view.isUserInteractionEnabled
225
+ }
226
+ set {
227
+ view.isUserInteractionEnabled = newValue
228
+ }
229
+ }
230
+ }
231
+
232
+ public extension View where Self: HybridViewSpec {
233
+ //MARK: Child mutations
234
+
235
+ func appendChild(child: any HybridViewSpec) throws {
236
+ let childView = try getAllowedChildView(child: child)
237
+ view.addSubview(childView)
238
+ child.parentReference = self
239
+ }
240
+
241
+ func insertBefore(child: any HybridViewSpec, beforeChild: any HybridViewSpec) throws {
242
+ let childView = try getAllowedChildView(child: child)
243
+ let beforeChildView = try getAllowedChildView(child: beforeChild)
244
+ if child === beforeChild {
245
+ return
246
+ }
247
+ view.insertSubview(childView, belowSubview: beforeChildView)
248
+ child.parentReference = self
249
+ }
250
+
251
+ func removeChild(child: any HybridViewSpec) throws {
252
+ let childView = try getAllowedChildView(child: child)
253
+ childView.removeFromSuperview()
254
+ child.parentReference = nil
255
+ }
256
+
257
+ private func getAllowedChildView(child: any HybridViewSpec) throws -> UIView {
258
+ if AllowedChildrenType.self == Never.self {
259
+ throw RuntimeError("\(Self.self) does not support children!")
260
+ }
261
+ guard child is AllowedChildrenType else {
262
+ let expectedType = String(describing: AllowedChildrenType.self)
263
+ throw RuntimeError("Unsupported child View type for \(Self.self). Expected \(expectedType).")
264
+ }
265
+ return child.view
266
+ }
267
+ }
@@ -0,0 +1,36 @@
1
+ internal import NitroModules
2
+ internal import UIKit
3
+
4
+ final class CustomViewController: UIViewController {
5
+ private var onKeyPressedListeners: [UIKeyCommand: () -> Void] = [:]
6
+ private let safeAreaInsetsListeners = SafeAreaInsetsListeners()
7
+
8
+ override func viewSafeAreaInsetsDidChange() {
9
+ super.viewSafeAreaInsetsDidChange()
10
+ let insets = view.safeAreaInsets
11
+ let edgeInsets = EdgeInsets(insets)
12
+ safeAreaInsetsListeners.emit(edgeInsets)
13
+ }
14
+
15
+ func addOnSafeAreaInsetsChangedListener(_ listener: @escaping (EdgeInsets) -> Void) -> ListenerSubscription {
16
+ return safeAreaInsetsListeners.add(listener)
17
+ }
18
+
19
+ func addOnKeyPressedListener(key: String, modifiers: [ModifierKey], onPress: @escaping () -> Void) -> ListenerSubscription {
20
+ let modifierFlags = modifiers.toUIKeyModifierFlags()
21
+ let command = UIKeyCommand(input: key,
22
+ modifierFlags: modifierFlags,
23
+ action: #selector(handleKeyCommand(_:)))
24
+ onKeyPressedListeners[command] = onPress
25
+ addKeyCommand(command)
26
+ return ListenerSubscription(remove: .native {
27
+ self.removeKeyCommand(command)
28
+ self.onKeyPressedListeners.removeValue(forKey: command)
29
+ })
30
+ }
31
+
32
+ @objc private func handleKeyCommand(_ command: UIKeyCommand) {
33
+ guard let listener = onKeyPressedListeners[command] else { return }
34
+ listener()
35
+ }
36
+ }
@@ -0,0 +1,16 @@
1
+ internal import UIKit
2
+
3
+ extension Corner {
4
+ func toCACornerMask() -> CACornerMask {
5
+ switch self {
6
+ case .topleft:
7
+ return .layerMinXMinYCorner
8
+ case .topright:
9
+ return .layerMaxXMinYCorner
10
+ case .bottomleft:
11
+ return .layerMinXMaxYCorner
12
+ case .bottomright:
13
+ return .layerMaxXMaxYCorner
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,23 @@
1
+ internal import UIKit
2
+
3
+ extension CornerCurve {
4
+ init(_ uiCornerCurve: CALayerCornerCurve) {
5
+ switch uiCornerCurve {
6
+ case .circular:
7
+ self = .circular
8
+ case .continuous:
9
+ self = .continuous
10
+ default:
11
+ preconditionFailure("Unknown corner curve: \(uiCornerCurve.rawValue)")
12
+ }
13
+ }
14
+
15
+ func toUICornerCurve() -> CALayerCornerCurve {
16
+ switch self {
17
+ case .circular:
18
+ return .circular
19
+ case .continuous:
20
+ return .continuous
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,7 @@
1
+ internal import UIKit
2
+
3
+ extension EdgeInsets {
4
+ init(_ insets: UIEdgeInsets) {
5
+ self.init(top: insets.top, right: insets.right, bottom: insets.bottom, left: insets.left)
6
+ }
7
+ }
@@ -0,0 +1,31 @@
1
+ //
2
+ // ModifierKey+toUIKeyModifierFlags.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Marc Rousavy on 18.09.26.
6
+ //
7
+
8
+ internal import UIKit
9
+
10
+ extension ModifierKey {
11
+ func toUIKeyModifierFlags() -> UIKeyModifierFlags {
12
+ switch self {
13
+ case .command:
14
+ return .command
15
+ case .alternate:
16
+ return .alternate
17
+ case .control:
18
+ return .control
19
+ case .shift:
20
+ return .shift
21
+ }
22
+ }
23
+ }
24
+
25
+ extension [ModifierKey] {
26
+ func toUIKeyModifierFlags() -> UIKeyModifierFlags {
27
+ return reduce(into: UIKeyModifierFlags()) { flags, modifier in
28
+ flags.formUnion(modifier.toUIKeyModifierFlags())
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,15 @@
1
+ internal import CoreGraphics
2
+
3
+ extension Point {
4
+ init(_ point: CGPoint) {
5
+ let x = Double(point.x)
6
+ let y = Double(point.y)
7
+ self.init(x: x, y: y)
8
+ }
9
+
10
+ var cgPoint: CGPoint {
11
+ let x = CGFloat(self.x)
12
+ let y = CGFloat(self.y)
13
+ return CGPoint(x: x, y: y)
14
+ }
15
+ }
@@ -0,0 +1,39 @@
1
+ internal import UIKit
2
+
3
+ extension GestureRecognizerState {
4
+ init(_ uiGestureRecognizerState: UIGestureRecognizer.State) {
5
+ switch uiGestureRecognizerState {
6
+ case .possible:
7
+ self = .possible
8
+ case .began:
9
+ self = .began
10
+ case .changed:
11
+ self = .changed
12
+ case .ended:
13
+ self = .ended
14
+ case .cancelled:
15
+ self = .cancelled
16
+ case .failed:
17
+ self = .failed
18
+ @unknown default:
19
+ preconditionFailure("Unknown gesture recognizer state: \(uiGestureRecognizerState.rawValue)")
20
+ }
21
+ }
22
+
23
+ func toUIGestureRecognizerState() -> UIGestureRecognizer.State {
24
+ switch self {
25
+ case .possible:
26
+ return .possible
27
+ case .began:
28
+ return .began
29
+ case .changed:
30
+ return .changed
31
+ case .ended:
32
+ return .ended
33
+ case .cancelled:
34
+ return .cancelled
35
+ case .failed:
36
+ return .failed
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,40 @@
1
+ //
2
+ // HybridGestureRecognizer.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Hanno Gödecke on 19.10.2026.
6
+ //
7
+
8
+ public import UIKit
9
+
10
+ public protocol HybridGestureRecognizer: AnyObject {
11
+ associatedtype Recognizer: UIGestureRecognizer
12
+ var gestureRecognizer: Recognizer { get }
13
+
14
+ var numberOfTouches: Double { get }
15
+ var isEnabled: Bool { get set }
16
+ var state: GestureRecognizerState { get }
17
+ }
18
+
19
+ extension HybridGestureRecognizer {
20
+ var numberOfTouches: Double {
21
+ get {
22
+ return Double(gestureRecognizer.numberOfTouches)
23
+ }
24
+ }
25
+
26
+ var isEnabled: Bool {
27
+ get {
28
+ return gestureRecognizer.isEnabled
29
+ }
30
+ set {
31
+ gestureRecognizer.isEnabled = newValue
32
+ }
33
+ }
34
+
35
+ var state: GestureRecognizerState {
36
+ get {
37
+ return GestureRecognizerState(gestureRecognizer.state)
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,53 @@
1
+ internal import NitroModules
2
+ internal import UIKit
3
+
4
+ final class HybridLongPressGestureRecognizer: HybridLongPressGestureRecognizerSpec, HybridGestureRecognizer {
5
+ var gestureRecognizer: UILongPressGestureRecognizer = UILongPressGestureRecognizer()
6
+ var onLongPress: any Callback<any HybridLongPressGestureRecognizerSpec, Void>?
7
+
8
+ override init() throws {
9
+ try super.init()
10
+ let action = #selector(handleLongPress(_:))
11
+ self.gestureRecognizer.addTarget(self, action: action)
12
+ }
13
+
14
+ var minimumPressDuration: Double {
15
+ get {
16
+ return gestureRecognizer.minimumPressDuration
17
+ }
18
+ set {
19
+ gestureRecognizer.minimumPressDuration = newValue
20
+ }
21
+ }
22
+
23
+ var allowableMovement: Double {
24
+ get {
25
+ return Double(gestureRecognizer.allowableMovement)
26
+ }
27
+ set {
28
+ gestureRecognizer.allowableMovement = CGFloat(newValue)
29
+ }
30
+ }
31
+
32
+ var numberOfTapsRequired: Double {
33
+ get {
34
+ return Double(gestureRecognizer.numberOfTapsRequired)
35
+ }
36
+ set {
37
+ gestureRecognizer.numberOfTapsRequired = Int(newValue)
38
+ }
39
+ }
40
+
41
+ var numberOfTouchesRequired: Double {
42
+ get {
43
+ return Double(gestureRecognizer.numberOfTouchesRequired)
44
+ }
45
+ set {
46
+ gestureRecognizer.numberOfTouchesRequired = Int(newValue)
47
+ }
48
+ }
49
+
50
+ @objc private func handleLongPress(_ recognizer: UILongPressGestureRecognizer) throws {
51
+ try self.onLongPress?.callSync(self)
52
+ }
53
+ }
@@ -0,0 +1,52 @@
1
+ //
2
+ // HybridPanGestureRecognizer.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Hanno Gödecke on 20.10.2026.
6
+ //
7
+
8
+ internal import NitroModules
9
+ internal import UIKit
10
+
11
+ final class HybridPanGestureRecognizer : HybridPanGestureRecognizerSpec, HybridGestureRecognizer {
12
+ var gestureRecognizer: UIPanGestureRecognizer = UIPanGestureRecognizer()
13
+ var onPan: any Callback<any HybridPanGestureRecognizerSpec, Void>?
14
+
15
+ override init() throws {
16
+ try super.init()
17
+ let action = #selector(handlePan(_:))
18
+ self.gestureRecognizer.addTarget(self, action: action)
19
+ }
20
+
21
+ var maximumNumberOfTouches: Double {
22
+ get {
23
+ return Double(gestureRecognizer.maximumNumberOfTouches)
24
+ }
25
+ set {
26
+ gestureRecognizer.maximumNumberOfTouches = Int(newValue)
27
+ }
28
+ }
29
+
30
+ var minimumNumberOfTouches: Double {
31
+ get {
32
+ return Double(gestureRecognizer.minimumNumberOfTouches)
33
+ }
34
+ set {
35
+ gestureRecognizer.minimumNumberOfTouches = Int(newValue)
36
+ }
37
+ }
38
+
39
+ func translation(inParent: any HybridViewSpec) throws -> Point {
40
+ let translation = gestureRecognizer.translation(in: inParent.view)
41
+ return Point(translation)
42
+ }
43
+
44
+ func velocity(inParent: any HybridViewSpec) throws -> Point {
45
+ let velocity = gestureRecognizer.velocity(in: inParent.view)
46
+ return Point(velocity)
47
+ }
48
+
49
+ @objc private func handlePan(_ recognizer: UITapGestureRecognizer) throws {
50
+ try self.onPan?.callSync(self)
51
+ }
52
+ }
@@ -0,0 +1,42 @@
1
+ //
2
+ // HybridTapGestureRecorgnizer.swift
3
+ // ReactNitroRenderer
4
+ //
5
+ // Created by Hanno Gödecke on 19.10.2026.
6
+ //
7
+
8
+ internal import NitroModules
9
+ internal import UIKit
10
+
11
+ final class HybridTapGestureRecognizer : HybridTapGestureRecognizerSpec, HybridGestureRecognizer {
12
+ var gestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer()
13
+ var onTap: any Callback<any HybridTapGestureRecognizerSpec, Void>?
14
+
15
+ override init() throws {
16
+ try super.init()
17
+ let action = #selector(handleTap(_:))
18
+ self.gestureRecognizer.addTarget(self, action: action)
19
+ }
20
+
21
+ var numberOfTapsRequired: Double {
22
+ get {
23
+ return Double(gestureRecognizer.numberOfTapsRequired)
24
+ }
25
+ set {
26
+ gestureRecognizer.numberOfTapsRequired = Int(newValue)
27
+ }
28
+ }
29
+
30
+ var numberOfTouchesRequired: Double {
31
+ get {
32
+ return Double(gestureRecognizer.numberOfTouchesRequired)
33
+ }
34
+ set {
35
+ gestureRecognizer.numberOfTouchesRequired = Int(newValue)
36
+ }
37
+ }
38
+
39
+ @objc private func handleTap(_ recognizer: UITapGestureRecognizer) throws {
40
+ try self.onTap?.callSync(self)
41
+ }
42
+ }
@@ -0,0 +1,19 @@
1
+ internal import NitroModules
2
+ internal import UIKit
3
+
4
+ final class HybridApplication: HybridApplicationSpec {
5
+ static func createView() throws -> any HybridViewSpec {
6
+ return try HybridView()
7
+ }
8
+
9
+ static func registerRoot(onSceneCreated: any Callback<any HybridWindowSceneSpec, any HybridWindowSpec>) throws {
10
+ try RegisterRootCallback.registerRoot(onSceneCreated: onSceneCreated)
11
+ }
12
+
13
+ static func reloadRuntime() throws {
14
+ guard let reloadableRuntime = UIApplication.shared.delegate as? any RuntimeReloadableAppDelegate else {
15
+ throw RuntimeError("Failed to reload Runtime - The main `AppDelegate` does not implement `RuntimeReloadableAppDelegate`!")
16
+ }
17
+ reloadableRuntime.reloadRuntime()
18
+ }
19
+ }
@@ -0,0 +1,22 @@
1
+ internal import NitroModules
2
+ internal import UIKit
3
+
4
+ final class HybridScreen: HybridScreenSpec {
5
+ private let screen: UIScreen
6
+
7
+ var size: Size {
8
+ return Size(width: screen.bounds.width, height: screen.bounds.height)
9
+ }
10
+ var displayScale: Double {
11
+ return screen.scale
12
+ }
13
+ var brightness: Double {
14
+ return screen.brightness
15
+ }
16
+
17
+ init(screen: UIScreen) {
18
+ self.screen = screen
19
+ // The generated base initializer is empty. Wrapping this UIKit object cannot fail.
20
+ try! super.init()
21
+ }
22
+ }