@rive-app/react-native 0.1.1-beta.0

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 (451) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +257 -0
  3. package/RNRive.podspec +53 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +155 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +13 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelProperty.kt +20 -0
  10. package/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelPropertyImpl.kt +50 -0
  11. package/android/src/main/java/com/margelo/nitro/rive/BytesDataLoader.kt +9 -0
  12. package/android/src/main/java/com/margelo/nitro/rive/DataLoader.kt +15 -0
  13. package/android/src/main/java/com/margelo/nitro/rive/DataSource.kt +38 -0
  14. package/android/src/main/java/com/margelo/nitro/rive/DataSourceResolver.kt +36 -0
  15. package/android/src/main/java/com/margelo/nitro/rive/EventPropertiesOutputExtensions.kt +12 -0
  16. package/android/src/main/java/com/margelo/nitro/rive/FileDataLoader.kt +21 -0
  17. package/android/src/main/java/com/margelo/nitro/rive/HTTPDataLoader.kt +37 -0
  18. package/android/src/main/java/com/margelo/nitro/rive/HybridRiveFile.kt +98 -0
  19. package/android/src/main/java/com/margelo/nitro/rive/HybridRiveFileFactory.kt +123 -0
  20. package/android/src/main/java/com/margelo/nitro/rive/HybridRiveImage.kt +15 -0
  21. package/android/src/main/java/com/margelo/nitro/rive/HybridRiveImageFactory.kt +23 -0
  22. package/android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt +279 -0
  23. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModel.kt +53 -0
  24. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt +22 -0
  25. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt +22 -0
  26. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt +22 -0
  27. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelImageProperty.kt +21 -0
  28. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelInstance.kt +76 -0
  29. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt +23 -0
  30. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt +22 -0
  31. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelTriggerProperty.kt +21 -0
  32. package/android/src/main/java/com/margelo/nitro/rive/ReferencedAssetLoader.kt +108 -0
  33. package/android/src/main/java/com/margelo/nitro/rive/ResourceDataLoader.kt +44 -0
  34. package/android/src/main/java/com/margelo/nitro/rive/Rive.kt +12 -0
  35. package/android/src/main/java/com/rive/RivePackage.kt +29 -0
  36. package/android/src/main/java/com/rive/RiveReactNativeView.kt +433 -0
  37. package/android/src/main/java/com/rive/RiveViewManager.kt +11 -0
  38. package/ios/BaseHybridViewModelProperty.swift +118 -0
  39. package/ios/BundleDataLoader.swift +25 -0
  40. package/ios/BytesDataLoader.swift +10 -0
  41. package/ios/DataLoader.swift +28 -0
  42. package/ios/DataSource.swift +43 -0
  43. package/ios/DataSourceResolver.swift +55 -0
  44. package/ios/EventPropertiesOutputExtensions.swift +15 -0
  45. package/ios/FileDataLoader.swift +24 -0
  46. package/ios/HTTPDataLoader.swift +31 -0
  47. package/ios/HybridRiveFile.swift +113 -0
  48. package/ios/HybridRiveFileFactory.swift +163 -0
  49. package/ios/HybridRiveImage.swift +17 -0
  50. package/ios/HybridRiveImageFactory.swift +26 -0
  51. package/ios/HybridRiveView.swift +284 -0
  52. package/ios/HybridViewModel.swift +46 -0
  53. package/ios/HybridViewModelBooleanProperty.swift +29 -0
  54. package/ios/HybridViewModelColorProperty.swift +63 -0
  55. package/ios/HybridViewModelEnumProperty.swift +29 -0
  56. package/ios/HybridViewModelImageProperty.swift +31 -0
  57. package/ios/HybridViewModelInstance.swift +51 -0
  58. package/ios/HybridViewModelNumberProperty.swift +35 -0
  59. package/ios/HybridViewModelStringProperty.swift +29 -0
  60. package/ios/HybridViewModelTriggerProperty.swift +30 -0
  61. package/ios/RCTLog.swift +29 -0
  62. package/ios/RCTSwiftLog.h +11 -0
  63. package/ios/RCTSwiftLog.m +38 -0
  64. package/ios/ReferencedAssetLoader.swift +145 -0
  65. package/ios/Rive.swift +5 -0
  66. package/ios/RiveReactNativeView.swift +325 -0
  67. package/ios/Utils.swift +15 -0
  68. package/lib/module/core/Alignment.js +42 -0
  69. package/lib/module/core/Alignment.js.map +1 -0
  70. package/lib/module/core/Errors.js +13 -0
  71. package/lib/module/core/Errors.js.map +1 -0
  72. package/lib/module/core/Events.js +8 -0
  73. package/lib/module/core/Events.js.map +1 -0
  74. package/lib/module/core/Fit.js +51 -0
  75. package/lib/module/core/Fit.js.map +1 -0
  76. package/lib/module/core/NitroRiveViewComponent.js +6 -0
  77. package/lib/module/core/NitroRiveViewComponent.js.map +1 -0
  78. package/lib/module/core/ReferencedAssets.js +4 -0
  79. package/lib/module/core/ReferencedAssets.js.map +1 -0
  80. package/lib/module/core/RiveColor.js +90 -0
  81. package/lib/module/core/RiveColor.js.map +1 -0
  82. package/lib/module/core/RiveFile.js +64 -0
  83. package/lib/module/core/RiveFile.js.map +1 -0
  84. package/lib/module/core/RiveImages.js +5 -0
  85. package/lib/module/core/RiveImages.js.map +1 -0
  86. package/lib/module/core/RiveView.js +51 -0
  87. package/lib/module/core/RiveView.js.map +1 -0
  88. package/lib/module/core/callDispose.js +15 -0
  89. package/lib/module/core/callDispose.js.map +1 -0
  90. package/lib/module/hooks/useRive.js +51 -0
  91. package/lib/module/hooks/useRive.js.map +1 -0
  92. package/lib/module/hooks/useRiveBoolean.js +23 -0
  93. package/lib/module/hooks/useRiveBoolean.js.map +1 -0
  94. package/lib/module/hooks/useRiveColor.js +30 -0
  95. package/lib/module/hooks/useRiveColor.js.map +1 -0
  96. package/lib/module/hooks/useRiveEnum.js +23 -0
  97. package/lib/module/hooks/useRiveEnum.js.map +1 -0
  98. package/lib/module/hooks/useRiveFile.js +128 -0
  99. package/lib/module/hooks/useRiveFile.js.map +1 -0
  100. package/lib/module/hooks/useRiveNumber.js +23 -0
  101. package/lib/module/hooks/useRiveNumber.js.map +1 -0
  102. package/lib/module/hooks/useRiveProperty.js +79 -0
  103. package/lib/module/hooks/useRiveProperty.js.map +1 -0
  104. package/lib/module/hooks/useRiveString.js +23 -0
  105. package/lib/module/hooks/useRiveString.js.map +1 -0
  106. package/lib/module/hooks/useRiveTrigger.js +33 -0
  107. package/lib/module/hooks/useRiveTrigger.js.map +1 -0
  108. package/lib/module/index.js +28 -0
  109. package/lib/module/index.js.map +1 -0
  110. package/lib/module/package.json +1 -0
  111. package/lib/module/specs/ArtboardBy.js +27 -0
  112. package/lib/module/specs/ArtboardBy.js.map +1 -0
  113. package/lib/module/specs/Rive.nitro.js +4 -0
  114. package/lib/module/specs/Rive.nitro.js.map +1 -0
  115. package/lib/module/specs/RiveFile.nitro.js +4 -0
  116. package/lib/module/specs/RiveFile.nitro.js.map +1 -0
  117. package/lib/module/specs/RiveImage.nitro.js +4 -0
  118. package/lib/module/specs/RiveImage.nitro.js.map +1 -0
  119. package/lib/module/specs/RiveView.nitro.js +23 -0
  120. package/lib/module/specs/RiveView.nitro.js.map +1 -0
  121. package/lib/module/specs/ViewModel.nitro.js +4 -0
  122. package/lib/module/specs/ViewModel.nitro.js.map +1 -0
  123. package/lib/module/types.js +2 -0
  124. package/lib/module/types.js.map +1 -0
  125. package/lib/nitrogen/generated/shared/json/RiveViewConfig.json +18 -0
  126. package/lib/typescript/package.json +1 -0
  127. package/lib/typescript/src/core/Alignment.d.ts +39 -0
  128. package/lib/typescript/src/core/Alignment.d.ts.map +1 -0
  129. package/lib/typescript/src/core/Errors.d.ts +14 -0
  130. package/lib/typescript/src/core/Errors.d.ts.map +1 -0
  131. package/lib/typescript/src/core/Events.d.ts +26 -0
  132. package/lib/typescript/src/core/Events.d.ts.map +1 -0
  133. package/lib/typescript/src/core/Fit.d.ts +48 -0
  134. package/lib/typescript/src/core/Fit.d.ts.map +1 -0
  135. package/lib/typescript/src/core/NitroRiveViewComponent.d.ts +4 -0
  136. package/lib/typescript/src/core/NitroRiveViewComponent.d.ts.map +1 -0
  137. package/lib/typescript/src/core/ReferencedAssets.d.ts +15 -0
  138. package/lib/typescript/src/core/ReferencedAssets.d.ts.map +1 -0
  139. package/lib/typescript/src/core/RiveColor.d.ts +53 -0
  140. package/lib/typescript/src/core/RiveColor.d.ts.map +1 -0
  141. package/lib/typescript/src/core/RiveFile.d.ts +62 -0
  142. package/lib/typescript/src/core/RiveFile.d.ts.map +1 -0
  143. package/lib/typescript/src/core/RiveImages.d.ts +3 -0
  144. package/lib/typescript/src/core/RiveImages.d.ts.map +1 -0
  145. package/lib/typescript/src/core/RiveView.d.ts +38 -0
  146. package/lib/typescript/src/core/RiveView.d.ts.map +1 -0
  147. package/lib/typescript/src/core/callDispose.d.ts +7 -0
  148. package/lib/typescript/src/core/callDispose.d.ts.map +1 -0
  149. package/lib/typescript/src/hooks/useRive.d.ts +9 -0
  150. package/lib/typescript/src/hooks/useRive.d.ts.map +1 -0
  151. package/lib/typescript/src/hooks/useRiveBoolean.d.ts +11 -0
  152. package/lib/typescript/src/hooks/useRiveBoolean.d.ts.map +1 -0
  153. package/lib/typescript/src/hooks/useRiveColor.d.ts +14 -0
  154. package/lib/typescript/src/hooks/useRiveColor.d.ts.map +1 -0
  155. package/lib/typescript/src/hooks/useRiveEnum.d.ts +11 -0
  156. package/lib/typescript/src/hooks/useRiveEnum.d.ts.map +1 -0
  157. package/lib/typescript/src/hooks/useRiveFile.d.ts +24 -0
  158. package/lib/typescript/src/hooks/useRiveFile.d.ts.map +1 -0
  159. package/lib/typescript/src/hooks/useRiveNumber.d.ts +11 -0
  160. package/lib/typescript/src/hooks/useRiveNumber.d.ts.map +1 -0
  161. package/lib/typescript/src/hooks/useRiveProperty.d.ts +22 -0
  162. package/lib/typescript/src/hooks/useRiveProperty.d.ts.map +1 -0
  163. package/lib/typescript/src/hooks/useRiveString.d.ts +11 -0
  164. package/lib/typescript/src/hooks/useRiveString.d.ts.map +1 -0
  165. package/lib/typescript/src/hooks/useRiveTrigger.d.ts +11 -0
  166. package/lib/typescript/src/hooks/useRiveTrigger.d.ts.map +1 -0
  167. package/lib/typescript/src/index.d.ts +32 -0
  168. package/lib/typescript/src/index.d.ts.map +1 -0
  169. package/lib/typescript/src/specs/ArtboardBy.d.ts +20 -0
  170. package/lib/typescript/src/specs/ArtboardBy.d.ts.map +1 -0
  171. package/lib/typescript/src/specs/Rive.nitro.d.ts +8 -0
  172. package/lib/typescript/src/specs/Rive.nitro.d.ts.map +1 -0
  173. package/lib/typescript/src/specs/RiveFile.nitro.d.ts +42 -0
  174. package/lib/typescript/src/specs/RiveFile.nitro.d.ts.map +1 -0
  175. package/lib/typescript/src/specs/RiveImage.nitro.d.ts +43 -0
  176. package/lib/typescript/src/specs/RiveImage.nitro.d.ts.map +1 -0
  177. package/lib/typescript/src/specs/RiveView.nitro.d.ts +139 -0
  178. package/lib/typescript/src/specs/RiveView.nitro.d.ts.map +1 -0
  179. package/lib/typescript/src/specs/ViewModel.nitro.d.ts +103 -0
  180. package/lib/typescript/src/specs/ViewModel.nitro.d.ts.map +1 -0
  181. package/lib/typescript/src/types.d.ts +33 -0
  182. package/lib/typescript/src/types.d.ts.map +1 -0
  183. package/nitrogen/generated/android/c++/JAlignment.hpp +80 -0
  184. package/nitrogen/generated/android/c++/JArtboardBy.hpp +68 -0
  185. package/nitrogen/generated/android/c++/JArtboardByTypes.hpp +59 -0
  186. package/nitrogen/generated/android/c++/JDataBindByName.hpp +57 -0
  187. package/nitrogen/generated/android/c++/JDataBindMode.hpp +59 -0
  188. package/nitrogen/generated/android/c++/JEventPropertiesOutput.cpp +30 -0
  189. package/nitrogen/generated/android/c++/JEventPropertiesOutput.hpp +83 -0
  190. package/nitrogen/generated/android/c++/JFit.hpp +77 -0
  191. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  192. package/nitrogen/generated/android/c++/JFunc_void_RiveError.hpp +80 -0
  193. package/nitrogen/generated/android/c++/JFunc_void_UnifiedRiveEvent.hpp +84 -0
  194. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
  195. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
  196. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
  197. package/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.cpp +134 -0
  198. package/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp +68 -0
  199. package/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp +96 -0
  200. package/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp +68 -0
  201. package/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.cpp +104 -0
  202. package/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp +67 -0
  203. package/nitrogen/generated/android/c++/JHybridRiveImageSpec.cpp +52 -0
  204. package/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp +65 -0
  205. package/nitrogen/generated/android/c++/JHybridRiveSpec.cpp +52 -0
  206. package/nitrogen/generated/android/c++/JHybridRiveSpec.hpp +65 -0
  207. package/nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp +299 -0
  208. package/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp +97 -0
  209. package/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp +65 -0
  210. package/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp +68 -0
  211. package/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp +65 -0
  212. package/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp +68 -0
  213. package/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp +66 -0
  214. package/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp +68 -0
  215. package/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp +66 -0
  216. package/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp +68 -0
  217. package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp +115 -0
  218. package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp +71 -0
  219. package/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp +65 -0
  220. package/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp +68 -0
  221. package/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.cpp +48 -0
  222. package/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp +65 -0
  223. package/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp +86 -0
  224. package/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp +70 -0
  225. package/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp +66 -0
  226. package/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp +68 -0
  227. package/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp +61 -0
  228. package/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp +68 -0
  229. package/nitrogen/generated/android/c++/JReferencedAssetsType.hpp +77 -0
  230. package/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp +77 -0
  231. package/nitrogen/generated/android/c++/JRiveError.hpp +63 -0
  232. package/nitrogen/generated/android/c++/JRiveErrorType.hpp +74 -0
  233. package/nitrogen/generated/android/c++/JRiveEventType.hpp +59 -0
  234. package/nitrogen/generated/android/c++/JUnifiedRiveEvent.hpp +96 -0
  235. package/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.cpp +30 -0
  236. package/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp +90 -0
  237. package/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp +88 -0
  238. package/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp +49 -0
  239. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Alignment.kt +28 -0
  240. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardBy.kt +44 -0
  241. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardByTypes.kt +21 -0
  242. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindByName.kt +38 -0
  243. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindMode.kt +21 -0
  244. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/EventPropertiesOutput.kt +72 -0
  245. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Fit.kt +27 -0
  246. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void.kt +80 -0
  247. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_RiveError.kt +80 -0
  248. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_UnifiedRiveEvent.kt +80 -0
  249. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_bool.kt +80 -0
  250. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_double.kt +80 -0
  251. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string.kt +80 -0
  252. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt +71 -0
  253. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt +71 -0
  254. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt +67 -0
  255. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt +57 -0
  256. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveSpec.kt +57 -0
  257. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt +183 -0
  258. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt +70 -0
  259. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt +70 -0
  260. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt +70 -0
  261. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt +70 -0
  262. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt +83 -0
  263. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt +70 -0
  264. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt +55 -0
  265. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt +79 -0
  266. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt +70 -0
  267. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt +70 -0
  268. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ReferencedAssetsType.kt +38 -0
  269. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ResolvedReferencedAsset.kt +50 -0
  270. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveError.kt +41 -0
  271. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveErrorType.kt +26 -0
  272. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveEventType.kt +21 -0
  273. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/UnifiedRiveEvent.kt +53 -0
  274. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.kt +72 -0
  275. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/riveOnLoad.kt +35 -0
  276. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt +50 -0
  277. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewStateUpdater.kt +23 -0
  278. package/nitrogen/generated/android/rive+autolinking.cmake +115 -0
  279. package/nitrogen/generated/android/rive+autolinking.gradle +27 -0
  280. package/nitrogen/generated/android/riveOnLoad.cpp +192 -0
  281. package/nitrogen/generated/android/riveOnLoad.hpp +25 -0
  282. package/nitrogen/generated/ios/RNRive+autolinking.rb +60 -0
  283. package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.cpp +360 -0
  284. package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp +1180 -0
  285. package/nitrogen/generated/ios/RNRive-Swift-Cxx-Umbrella.hpp +161 -0
  286. package/nitrogen/generated/ios/RNRiveAutolinking.mm +137 -0
  287. package/nitrogen/generated/ios/RNRiveAutolinking.swift +220 -0
  288. package/nitrogen/generated/ios/c++/HybridRiveFileFactorySpecSwift.cpp +11 -0
  289. package/nitrogen/generated/ios/c++/HybridRiveFileFactorySpecSwift.hpp +119 -0
  290. package/nitrogen/generated/ios/c++/HybridRiveFileSpecSwift.cpp +11 -0
  291. package/nitrogen/generated/ios/c++/HybridRiveFileSpecSwift.hpp +121 -0
  292. package/nitrogen/generated/ios/c++/HybridRiveImageFactorySpecSwift.cpp +11 -0
  293. package/nitrogen/generated/ios/c++/HybridRiveImageFactorySpecSwift.hpp +100 -0
  294. package/nitrogen/generated/ios/c++/HybridRiveImageSpecSwift.cpp +11 -0
  295. package/nitrogen/generated/ios/c++/HybridRiveImageSpecSwift.hpp +71 -0
  296. package/nitrogen/generated/ios/c++/HybridRiveSpecSwift.cpp +11 -0
  297. package/nitrogen/generated/ios/c++/HybridRiveSpecSwift.hpp +76 -0
  298. package/nitrogen/generated/ios/c++/HybridRiveViewSpecSwift.cpp +11 -0
  299. package/nitrogen/generated/ios/c++/HybridRiveViewSpecSwift.hpp +277 -0
  300. package/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.cpp +11 -0
  301. package/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.hpp +88 -0
  302. package/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.cpp +11 -0
  303. package/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.hpp +88 -0
  304. package/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.cpp +11 -0
  305. package/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.hpp +90 -0
  306. package/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.cpp +11 -0
  307. package/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.hpp +94 -0
  308. package/nitrogen/generated/ios/c++/HybridViewModelInstanceSpecSwift.cpp +11 -0
  309. package/nitrogen/generated/ios/c++/HybridViewModelInstanceSpecSwift.hpp +149 -0
  310. package/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.cpp +11 -0
  311. package/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.hpp +88 -0
  312. package/nitrogen/generated/ios/c++/HybridViewModelPropertySpecSwift.cpp +11 -0
  313. package/nitrogen/generated/ios/c++/HybridViewModelPropertySpecSwift.hpp +69 -0
  314. package/nitrogen/generated/ios/c++/HybridViewModelSpecSwift.cpp +11 -0
  315. package/nitrogen/generated/ios/c++/HybridViewModelSpecSwift.hpp +113 -0
  316. package/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.cpp +11 -0
  317. package/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.hpp +90 -0
  318. package/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.cpp +11 -0
  319. package/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.hpp +89 -0
  320. package/nitrogen/generated/ios/c++/views/HybridRiveViewComponent.mm +136 -0
  321. package/nitrogen/generated/ios/swift/Alignment.swift +68 -0
  322. package/nitrogen/generated/ios/swift/ArtboardBy.swift +89 -0
  323. package/nitrogen/generated/ios/swift/ArtboardByTypes.swift +40 -0
  324. package/nitrogen/generated/ios/swift/DataBindByName.swift +36 -0
  325. package/nitrogen/generated/ios/swift/DataBindMode.swift +40 -0
  326. package/nitrogen/generated/ios/swift/EventPropertiesOutput.swift +19 -0
  327. package/nitrogen/generated/ios/swift/Fit.swift +64 -0
  328. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  329. package/nitrogen/generated/ios/swift/Func_void_RiveError.swift +47 -0
  330. package/nitrogen/generated/ios/swift/Func_void_UnifiedRiveEvent.swift +47 -0
  331. package/nitrogen/generated/ios/swift/Func_void_bool.swift +47 -0
  332. package/nitrogen/generated/ios/swift/Func_void_double.swift +47 -0
  333. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
  334. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_HybridRiveFileSpec_.swift +51 -0
  335. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_HybridRiveImageSpec_.swift +51 -0
  336. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
  337. package/nitrogen/generated/ios/swift/HybridRiveFileFactorySpec.swift +59 -0
  338. package/nitrogen/generated/ios/swift/HybridRiveFileFactorySpec_cxx.swift +207 -0
  339. package/nitrogen/generated/ios/swift/HybridRiveFileSpec.swift +59 -0
  340. package/nitrogen/generated/ios/swift/HybridRiveFileSpec_cxx.swift +204 -0
  341. package/nitrogen/generated/ios/swift/HybridRiveImageFactorySpec.swift +58 -0
  342. package/nitrogen/generated/ios/swift/HybridRiveImageFactorySpec_cxx.swift +185 -0
  343. package/nitrogen/generated/ios/swift/HybridRiveImageSpec.swift +56 -0
  344. package/nitrogen/generated/ios/swift/HybridRiveImageSpec_cxx.swift +126 -0
  345. package/nitrogen/generated/ios/swift/HybridRiveSpec.swift +56 -0
  346. package/nitrogen/generated/ios/swift/HybridRiveSpec_cxx.swift +131 -0
  347. package/nitrogen/generated/ios/swift/HybridRiveViewSpec.swift +79 -0
  348. package/nitrogen/generated/ios/swift/HybridRiveViewSpec_cxx.swift +623 -0
  349. package/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec.swift +57 -0
  350. package/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec_cxx.swift +158 -0
  351. package/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec.swift +57 -0
  352. package/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec_cxx.swift +158 -0
  353. package/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec.swift +57 -0
  354. package/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec_cxx.swift +158 -0
  355. package/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec.swift +58 -0
  356. package/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec_cxx.swift +171 -0
  357. package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec.swift +62 -0
  358. package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec_cxx.swift +271 -0
  359. package/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec.swift +57 -0
  360. package/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec_cxx.swift +158 -0
  361. package/nitrogen/generated/ios/swift/HybridViewModelPropertySpec.swift +56 -0
  362. package/nitrogen/generated/ios/swift/HybridViewModelPropertySpec_cxx.swift +121 -0
  363. package/nitrogen/generated/ios/swift/HybridViewModelSpec.swift +61 -0
  364. package/nitrogen/generated/ios/swift/HybridViewModelSpec_cxx.swift +222 -0
  365. package/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec.swift +57 -0
  366. package/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec_cxx.swift +158 -0
  367. package/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec.swift +58 -0
  368. package/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec_cxx.swift +160 -0
  369. package/nitrogen/generated/ios/swift/ReferencedAssetsType.swift +75 -0
  370. package/nitrogen/generated/ios/swift/ResolvedReferencedAsset.swift +185 -0
  371. package/nitrogen/generated/ios/swift/RiveError.swift +47 -0
  372. package/nitrogen/generated/ios/swift/RiveErrorType.swift +60 -0
  373. package/nitrogen/generated/ios/swift/RiveEventType.swift +40 -0
  374. package/nitrogen/generated/ios/swift/UnifiedRiveEvent.swift +213 -0
  375. package/nitrogen/generated/ios/swift/Variant__any_HybridViewModelInstanceSpec__DataBindMode_DataBindByName.swift +19 -0
  376. package/nitrogen/generated/shared/c++/Alignment.hpp +104 -0
  377. package/nitrogen/generated/shared/c++/ArtboardBy.hpp +86 -0
  378. package/nitrogen/generated/shared/c++/ArtboardByTypes.hpp +76 -0
  379. package/nitrogen/generated/shared/c++/DataBindByName.hpp +75 -0
  380. package/nitrogen/generated/shared/c++/DataBindMode.hpp +62 -0
  381. package/nitrogen/generated/shared/c++/Fit.hpp +68 -0
  382. package/nitrogen/generated/shared/c++/HybridRiveFileFactorySpec.cpp +24 -0
  383. package/nitrogen/generated/shared/c++/HybridRiveFileFactorySpec.hpp +74 -0
  384. package/nitrogen/generated/shared/c++/HybridRiveFileSpec.cpp +25 -0
  385. package/nitrogen/generated/shared/c++/HybridRiveFileSpec.hpp +75 -0
  386. package/nitrogen/generated/shared/c++/HybridRiveImageFactorySpec.cpp +23 -0
  387. package/nitrogen/generated/shared/c++/HybridRiveImageFactorySpec.hpp +69 -0
  388. package/nitrogen/generated/shared/c++/HybridRiveImageSpec.cpp +21 -0
  389. package/nitrogen/generated/shared/c++/HybridRiveImageSpec.hpp +62 -0
  390. package/nitrogen/generated/shared/c++/HybridRiveSpec.cpp +21 -0
  391. package/nitrogen/generated/shared/c++/HybridRiveSpec.hpp +62 -0
  392. package/nitrogen/generated/shared/c++/HybridRiveViewSpec.cpp +54 -0
  393. package/nitrogen/generated/shared/c++/HybridRiveViewSpec.hpp +122 -0
  394. package/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.cpp +25 -0
  395. package/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.hpp +67 -0
  396. package/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.cpp +25 -0
  397. package/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.hpp +67 -0
  398. package/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.cpp +25 -0
  399. package/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.hpp +68 -0
  400. package/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.cpp +24 -0
  401. package/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.hpp +71 -0
  402. package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.cpp +28 -0
  403. package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.hpp +90 -0
  404. package/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.cpp +25 -0
  405. package/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.hpp +67 -0
  406. package/nitrogen/generated/shared/c++/HybridViewModelPropertySpec.cpp +21 -0
  407. package/nitrogen/generated/shared/c++/HybridViewModelPropertySpec.hpp +62 -0
  408. package/nitrogen/generated/shared/c++/HybridViewModelSpec.cpp +27 -0
  409. package/nitrogen/generated/shared/c++/HybridViewModelSpec.hpp +71 -0
  410. package/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.cpp +25 -0
  411. package/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.hpp +68 -0
  412. package/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.cpp +24 -0
  413. package/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.hpp +67 -0
  414. package/nitrogen/generated/shared/c++/ReferencedAssetsType.hpp +79 -0
  415. package/nitrogen/generated/shared/c++/ResolvedReferencedAsset.hpp +95 -0
  416. package/nitrogen/generated/shared/c++/RiveError.hpp +81 -0
  417. package/nitrogen/generated/shared/c++/RiveErrorType.hpp +75 -0
  418. package/nitrogen/generated/shared/c++/RiveEventType.hpp +62 -0
  419. package/nitrogen/generated/shared/c++/UnifiedRiveEvent.hpp +100 -0
  420. package/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.cpp +183 -0
  421. package/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.hpp +124 -0
  422. package/nitrogen/generated/shared/json/RiveViewConfig.json +18 -0
  423. package/package.json +193 -0
  424. package/src/core/Alignment.ts +46 -0
  425. package/src/core/Errors.ts +14 -0
  426. package/src/core/Events.ts +31 -0
  427. package/src/core/Fit.ts +54 -0
  428. package/src/core/NitroRiveViewComponent.ts +18 -0
  429. package/src/core/ReferencedAssets.ts +14 -0
  430. package/src/core/RiveColor.ts +100 -0
  431. package/src/core/RiveFile.ts +149 -0
  432. package/src/core/RiveImages.ts +5 -0
  433. package/src/core/RiveView.tsx +48 -0
  434. package/src/core/callDispose.ts +18 -0
  435. package/src/hooks/useRive.ts +56 -0
  436. package/src/hooks/useRiveBoolean.ts +28 -0
  437. package/src/hooks/useRiveColor.ts +47 -0
  438. package/src/hooks/useRiveEnum.ts +27 -0
  439. package/src/hooks/useRiveFile.ts +184 -0
  440. package/src/hooks/useRiveNumber.ts +28 -0
  441. package/src/hooks/useRiveProperty.ts +110 -0
  442. package/src/hooks/useRiveString.ts +28 -0
  443. package/src/hooks/useRiveTrigger.ts +49 -0
  444. package/src/index.tsx +52 -0
  445. package/src/specs/ArtboardBy.ts +31 -0
  446. package/src/specs/Rive.nitro.ts +6 -0
  447. package/src/specs/RiveFile.nitro.ts +57 -0
  448. package/src/specs/RiveImage.nitro.ts +42 -0
  449. package/src/specs/RiveView.nitro.ts +149 -0
  450. package/src/specs/ViewModel.nitro.ts +126 -0
  451. package/src/types.tsx +34 -0
@@ -0,0 +1,433 @@
1
+ package com.rive
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.widget.FrameLayout
5
+ import androidx.lifecycle.LifecycleObserver
6
+ import androidx.lifecycle.LifecycleOwner
7
+ import app.rive.runtime.kotlin.RiveAnimationView
8
+ import app.rive.runtime.kotlin.RiveViewLifecycleObserver
9
+ import app.rive.runtime.kotlin.controllers.RiveFileController
10
+ import app.rive.runtime.kotlin.core.RefCount
11
+ import com.facebook.react.uimanager.ThemedReactContext
12
+ import app.rive.runtime.kotlin.core.Alignment
13
+ import app.rive.runtime.kotlin.core.File
14
+ import app.rive.runtime.kotlin.core.Fit
15
+ import app.rive.runtime.kotlin.core.RiveEvent
16
+ import app.rive.runtime.kotlin.core.RiveOpenURLEvent
17
+ import app.rive.runtime.kotlin.core.SMIBoolean
18
+ import app.rive.runtime.kotlin.core.SMIInput
19
+ import app.rive.runtime.kotlin.core.SMINumber
20
+ import app.rive.runtime.kotlin.core.SMITrigger
21
+ import app.rive.runtime.kotlin.core.ViewModelInstance
22
+ import app.rive.runtime.kotlin.core.errors.ViewModelException
23
+ import com.margelo.nitro.rive.EventPropertiesOutput
24
+ import com.margelo.nitro.rive.EventPropertiesOutputExtensions as EPO
25
+ import com.margelo.nitro.rive.RiveEventType
26
+ import com.margelo.nitro.rive.UnifiedRiveEvent as RNEvent
27
+ import kotlinx.coroutines.CompletableDeferred
28
+
29
+ sealed class BindData {
30
+ data object None : BindData()
31
+ data object Auto : BindData()
32
+ data class Instance(val instance: ViewModelInstance) : BindData()
33
+ data class ByName(val name: String) : BindData()
34
+ }
35
+
36
+ data class ViewConfiguration(
37
+ val artboardName: String?,
38
+ val stateMachineName: String?,
39
+ val autoPlay: Boolean,
40
+ val riveFile: File,
41
+ val alignment: Alignment,
42
+ val fit: Fit,
43
+ val layoutScaleFactor: Float?,
44
+ val bindData: BindData
45
+ )
46
+
47
+ class ReactNativeRiveViewLifecycleObserver(dependencies: MutableList<RefCount>) :
48
+ RiveViewLifecycleObserver(dependencies) {
49
+ @SuppressLint("MissingSuperCall")
50
+ override fun onDestroy(owner: LifecycleOwner) {
51
+ owner.lifecycle.removeObserver(this)
52
+ }
53
+
54
+ fun dispose() {
55
+ dependencies.forEach { it.release() }
56
+ dependencies.clear()
57
+ }
58
+ }
59
+
60
+ @SuppressLint("ViewConstructor")
61
+ class ReactNativeRiveAnimationView(context: ThemedReactContext) : RiveAnimationView(context) {
62
+ fun dispose() {
63
+ (lifecycleObserver as ReactNativeRiveViewLifecycleObserver).dispose()
64
+ }
65
+
66
+ @SuppressLint("VisibleForTests")
67
+ override fun createObserver(): LifecycleObserver {
68
+ return ReactNativeRiveViewLifecycleObserver(
69
+ listOfNotNull(controller, rendererAttributes.assetLoader).toMutableList()
70
+ )
71
+ }
72
+ }
73
+
74
+ @SuppressLint("ViewConstructor")
75
+ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
76
+ internal var riveAnimationView: ReactNativeRiveAnimationView? = null
77
+ private var eventListeners: MutableList<RiveFileController.RiveEventListener> = mutableListOf()
78
+ private val viewReadyDeferred = CompletableDeferred<Boolean>()
79
+ private var _activeStateMachineName: String? = null
80
+ private var willDispose = false
81
+
82
+ init {
83
+ riveAnimationView = ReactNativeRiveAnimationView(context)
84
+ addView(riveAnimationView)
85
+ }
86
+
87
+ fun dispose() {
88
+ willDispose = true
89
+ }
90
+
91
+ override fun onDetachedFromWindow() {
92
+ if (willDispose) {
93
+ riveAnimationView?.dispose()
94
+ removeEventListeners()
95
+ }
96
+ super.onDetachedFromWindow()
97
+ }
98
+
99
+ //region Public Methods (API)
100
+ suspend fun awaitViewReady(): Boolean {
101
+ return viewReadyDeferred.await()
102
+ }
103
+
104
+ fun configure(config: ViewConfiguration, dataBindingChanged: Boolean, reload: Boolean = false, initialUpdate: Boolean = false) {
105
+ if (reload) {
106
+ riveAnimationView?.setRiveFile(
107
+ config.riveFile,
108
+ artboardName = config.artboardName,
109
+ stateMachineName = config.stateMachineName,
110
+ autoplay = config.autoPlay,
111
+ alignment = config.alignment,
112
+ fit = config.fit
113
+ )
114
+ _activeStateMachineName = getSafeStateMachineName()
115
+ } else {
116
+ riveAnimationView?.alignment = config.alignment
117
+ riveAnimationView?.fit = config.fit
118
+ // TODO: this seems to require a reload for the view to take the new value (bug on Android)
119
+ riveAnimationView?.layoutScaleFactor = config.layoutScaleFactor
120
+ }
121
+
122
+ if (dataBindingChanged || initialUpdate) {
123
+ applyDataBinding(config.bindData)
124
+ }
125
+
126
+ viewReadyDeferred.complete(true)
127
+ }
128
+
129
+ fun bindViewModelInstance(vmi: ViewModelInstance) {
130
+ val stateMachines = riveAnimationView?.controller?.stateMachines
131
+ if (!stateMachines.isNullOrEmpty()) {
132
+ stateMachines.first().viewModelInstance = vmi
133
+ }
134
+ }
135
+
136
+ fun getViewModelInstance(): ViewModelInstance? {
137
+ val stateMachines = riveAnimationView?.controller?.stateMachines
138
+ return if (!stateMachines.isNullOrEmpty()) {
139
+ stateMachines.first().viewModelInstance
140
+ } else {
141
+ null
142
+ }
143
+ }
144
+
145
+ fun applyDataBinding(bindData: BindData) {
146
+ val stateMachines = riveAnimationView?.controller?.stateMachines
147
+ if (stateMachines.isNullOrEmpty()) return
148
+
149
+ val stateMachine = stateMachines.first()
150
+
151
+ when (bindData) {
152
+ is BindData.None -> {
153
+ stateMachine.viewModelInstance = null
154
+ }
155
+ is BindData.Auto -> {
156
+ val artboard = riveAnimationView?.controller?.activeArtboard
157
+ val file = riveAnimationView?.controller?.file
158
+ if (artboard != null && file != null) {
159
+ try {
160
+ file.defaultViewModelForArtboard(artboard)
161
+ } catch (e: ViewModelException) {
162
+ null
163
+ }?.let {
164
+ val instance = it.createDefaultInstance()
165
+ stateMachine.viewModelInstance = instance
166
+ }
167
+ }
168
+ }
169
+ is BindData.Instance -> {
170
+ stateMachine.viewModelInstance = bindData.instance
171
+ }
172
+ is BindData.ByName -> {
173
+ val artboard = riveAnimationView?.controller?.activeArtboard
174
+ val file = riveAnimationView?.controller?.file
175
+ if (artboard != null && file != null) {
176
+ val viewModel = file.defaultViewModelForArtboard(artboard)
177
+ val instance = viewModel.createInstanceFromName(bindData.name)
178
+ stateMachine.viewModelInstance = instance
179
+ }
180
+ }
181
+ }
182
+
183
+ stateMachine.name.let { smName ->
184
+ riveAnimationView?.play(smName, isStateMachine = true)
185
+ }
186
+ }
187
+
188
+ fun play() = riveAnimationView?.play()
189
+
190
+ fun pause() = riveAnimationView?.pause()
191
+
192
+ fun reset() = riveAnimationView?.reset()
193
+
194
+ fun playIfNeeded() {
195
+ if (riveAnimationView?.isPlaying == false) {
196
+ riveAnimationView?.post {
197
+ riveAnimationView?.play()
198
+ }
199
+ }
200
+ }
201
+
202
+ fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
203
+ val eventListener = object : RiveFileController.RiveEventListener {
204
+ override fun notifyEvent(event: RiveEvent) {
205
+ // TODO: Handle general events better (in case of audio events)
206
+ val rnEvent = RNEvent(
207
+ name = event.name,
208
+ type = if (event is RiveOpenURLEvent) RiveEventType.OPENURL else RiveEventType.GENERAL,
209
+ delay = event.delay.toDouble(),
210
+ properties = convertEventProperties(event.properties),
211
+ url = (event as? RiveOpenURLEvent)?.url,
212
+ target = (event as? RiveOpenURLEvent)?.target
213
+ )
214
+
215
+ onEvent(rnEvent)
216
+ }
217
+ }
218
+ riveAnimationView?.addEventListener(eventListener)
219
+ eventListeners.add(eventListener)
220
+ }
221
+
222
+ fun removeEventListeners() {
223
+ for (eventListener in eventListeners) {
224
+ riveAnimationView?.removeEventListener(eventListener)
225
+ }
226
+ eventListeners.clear()
227
+ }
228
+
229
+ fun setNumberInputValue(name: String, value: Double, path: String?) {
230
+ handleInput(
231
+ name = name,
232
+ path = path,
233
+ type = InputType.Number,
234
+ onSuccess = { _ ->
235
+ // Use Rive Android's queue system to actually set the input
236
+ riveAnimationView?.controller?.setNumberState(
237
+ stateMachineName = activeStateMachineName,
238
+ inputName = name,
239
+ value = value.toFloat(),
240
+ path = path
241
+ )
242
+ value
243
+ }
244
+ )
245
+ }
246
+
247
+ fun getNumberInputValue(name: String, path: String?): Double {
248
+ return handleInput(
249
+ name = name,
250
+ path = path,
251
+ type = InputType.Number,
252
+ onSuccess = { smi -> (smi as SMINumber).value.toDouble() }
253
+ )
254
+ }
255
+
256
+ fun setBooleanInputValue(name: String, value: Boolean, path: String?) {
257
+ handleInput(
258
+ name = name,
259
+ path = path,
260
+ type = InputType.BooleanInput,
261
+ onSuccess = { _ ->
262
+ // Use Rive Android's queue system to actually set the input
263
+ riveAnimationView?.controller?.setBooleanState(
264
+ stateMachineName = activeStateMachineName,
265
+ inputName = name,
266
+ value = value,
267
+ path = path
268
+ )
269
+ value
270
+ }
271
+ )
272
+ }
273
+
274
+ fun getBooleanInputValue(name: String, path: String?): Boolean {
275
+ return handleInput(
276
+ name = name,
277
+ path = path,
278
+ type = InputType.BooleanInput,
279
+ onSuccess = { smi -> (smi as SMIBoolean).value }
280
+ )
281
+ }
282
+
283
+ fun triggerInput(name: String, path: String?) {
284
+ handleInput(
285
+ name = name,
286
+ path = path,
287
+ type = InputType.Trigger,
288
+ onSuccess = {
289
+ riveAnimationView?.controller?.fireState(
290
+ stateMachineName = activeStateMachineName,
291
+ inputName = name,
292
+ path = path
293
+ )
294
+ }
295
+ )
296
+ }
297
+
298
+ fun setTextRunValue(name: String, value: String, path: String?) {
299
+ try {
300
+ if (path == null) {
301
+ riveAnimationView?.setTextRunValue(name, value)
302
+ } else {
303
+ riveAnimationView?.setTextRunValue(name, value, path)
304
+ }
305
+ } catch (e: Exception) {
306
+ throw Error(e.message)
307
+ }
308
+ }
309
+
310
+ fun getTextRunValue(name: String, path: String?): String {
311
+ val value = if (path == null) {
312
+ riveAnimationView?.getTextRunValue(name)
313
+ } else {
314
+ riveAnimationView?.getTextRunValue(name, path)
315
+ }
316
+
317
+ if (value == null) {
318
+ throw Error("Could not find text run value (name: $name, path: $path)")
319
+ }
320
+
321
+ return value
322
+ }
323
+ //endregion
324
+
325
+ //region Internal
326
+
327
+ private fun convertEventProperties(properties: Map<String, Any>?): Map<String, EventPropertiesOutput>? {
328
+ if (properties == null) return null
329
+
330
+ val newMap = HashMap<String, EventPropertiesOutput>()
331
+
332
+ properties.forEach { (key, value) ->
333
+ when (value) {
334
+ is String -> newMap.set(key, EPO.string(value))
335
+ is Number -> newMap.set(key, EPO.number(value.toDouble()))
336
+ is Boolean -> newMap.set(key, EPO.boolean(value))
337
+ }
338
+ }
339
+
340
+ return newMap
341
+ }
342
+
343
+ /**
344
+ * Gets the SMI input from the Rive file.
345
+ * @param name The name of the input.
346
+ * @param path The path of the input.
347
+ * @return The SMI input.
348
+ * @throws Error if the input is not found.
349
+ */
350
+ private fun getSMIInput(name: String, path: String?): SMIInput {
351
+ try {
352
+ val smi = if (path == null) {
353
+ val stateMachine = riveAnimationView?.controller?.stateMachines?.get(0)
354
+ stateMachine?.input(name)
355
+ } else {
356
+ val artboard = riveAnimationView?.controller?.activeArtboard
357
+ artboard?.input(name, path)
358
+ }
359
+ if (smi == null) throw Exception("Could not find input (name: $name, path: $path)")
360
+ return smi
361
+ } catch (e: Exception) {
362
+ throw Error(e.message)
363
+ }
364
+ }
365
+
366
+ // TODO: this is throwing when autoplay is false
367
+ // TODO: This is a temporary solution to get the state machine name as Android supports
368
+ // playing multiple state machines, but in React Native we only allow playing one.
369
+ /**
370
+ * Gets the name of the active state machine.
371
+ * @throws Error if the state machine name could not be found
372
+ * @return The name of the state machine that "is playing" / "will be played"
373
+ */
374
+ private fun getSafeStateMachineName(): String {
375
+ try {
376
+ val stateMachines = riveAnimationView?.controller?.stateMachines
377
+ if (stateMachines.isNullOrEmpty()) {
378
+ throw Exception("No state machines found in the Rive file")
379
+ }
380
+ return stateMachines.first().name
381
+ } catch (e: Exception) {
382
+ throw Error(e.message)
383
+ }
384
+ }
385
+
386
+ /**
387
+ * The name of the active state machine.
388
+ * @throws Error if the state machine name could not be found
389
+ * @return The name of the state machine that "is playing" / "will be played"
390
+ */
391
+ private val activeStateMachineName: String
392
+ get() = _activeStateMachineName
393
+ ?: throw Error("View not configured. Could not find active state machine name")
394
+
395
+ /**
396
+ * The type of the state machine input.
397
+ * @param T The type of the state machine input.
398
+ */
399
+ private sealed class InputType<T> {
400
+ data object Number : InputType<Double>()
401
+ data object BooleanInput : InputType<Boolean>()
402
+ data object Trigger : InputType<Unit>()
403
+ }
404
+
405
+ /**
406
+ * Handles the state machine input.
407
+ * @param name The name of the input.
408
+ * @param path The path of the input.
409
+ * @param type The type of the input.
410
+ * @param onSuccess The function to call when the input is successfully handled.
411
+ * @return The value of the input.
412
+ */
413
+ private inline fun <T> handleInput(
414
+ name: String,
415
+ path: String?,
416
+ type: InputType<T>,
417
+ onSuccess: (SMIInput) -> T
418
+ ): T {
419
+ val smi = getSMIInput(name, path)
420
+ when (type) {
421
+ is InputType.Number -> if (smi !is SMINumber) throw Error("State machine input is not a number")
422
+ is InputType.BooleanInput -> if (smi !is SMIBoolean) throw Error("State machine input is not a boolean")
423
+ is InputType.Trigger -> if (smi !is SMITrigger) throw Error("State machine input is not a trigger")
424
+ }
425
+
426
+ try {
427
+ return onSuccess(smi)
428
+ } catch (e: Exception) {
429
+ throw Error("Could not handle ${type::class.simpleName?.lowercase()} state machine input")
430
+ }
431
+ }
432
+ //endregion
433
+ }
@@ -0,0 +1,11 @@
1
+ package com.rive
2
+
3
+ import android.view.View
4
+ import com.margelo.nitro.rive.views.HybridRiveViewManager
5
+
6
+ class RiveViewManager : HybridRiveViewManager() {
7
+ override fun onDropViewInstance(view: View) {
8
+ (view as? RiveReactNativeView)?.dispose()
9
+ super.onDropViewInstance(view)
10
+ }
11
+ }
@@ -0,0 +1,118 @@
1
+ import Foundation
2
+ import RiveRuntime
3
+
4
+ /// Protocol for Rive property types that support listener management
5
+ protocol RivePropertyWithListeners: AnyObject {
6
+ associatedtype ListenerValueType
7
+ typealias ListenerType = (ListenerValueType) -> Void
8
+
9
+ func addListener(_ callback: @escaping ListenerType) -> UUID
10
+ func removeListener(_ id: UUID)
11
+ }
12
+
13
+ /// Protocol for Rive property types with void listeners (Trigger, Image)
14
+ protocol RivePropertyWithVoidListeners: AnyObject {
15
+ func addListener(_ callback: @escaping () -> Void) -> UUID
16
+ func removeListener(_ id: UUID)
17
+ }
18
+
19
+ typealias BooleanPropertyType = RiveDataBindingViewModel.Instance.BooleanProperty
20
+ typealias NumberPropertyType = RiveDataBindingViewModel.Instance.NumberProperty
21
+ typealias StringPropertyType = RiveDataBindingViewModel.Instance.StringProperty
22
+ typealias EnumPropertyType = RiveDataBindingViewModel.Instance.EnumProperty
23
+ typealias ColorPropertyType = RiveDataBindingViewModel.Instance.ColorProperty
24
+ typealias TriggerPropertyType = RiveDataBindingViewModel.Instance.TriggerProperty
25
+ typealias ImagePropertyType = RiveDataBindingViewModel.Instance.ImageProperty
26
+
27
+ // Make all Rive property types conform to the protocol
28
+ extension BooleanPropertyType: RivePropertyWithListeners {
29
+ typealias ListenerValueType = Bool // Native: Bool → Bool (no conversion)
30
+ }
31
+ extension NumberPropertyType: RivePropertyWithListeners {
32
+ typealias ListenerValueType = Float // Native: Float → Double (needs conversion)
33
+ }
34
+ extension StringPropertyType: RivePropertyWithListeners {
35
+ typealias ListenerValueType = String // Native: String → String (no conversion)
36
+ }
37
+ extension EnumPropertyType: RivePropertyWithListeners {
38
+ typealias ListenerValueType = String // Native: String → String (no conversion)
39
+ }
40
+ extension ColorPropertyType: RivePropertyWithListeners {
41
+ typealias ListenerValueType = UIColor // Native: UIColor → Double (needs conversion)
42
+ }
43
+ extension TriggerPropertyType: RivePropertyWithListeners {
44
+ func addListener(_ callback: @escaping ListenerType) -> UUID {
45
+ addListener { callback(()) }
46
+ }
47
+
48
+ typealias ListenerValueType = Void
49
+ }
50
+
51
+ extension ImagePropertyType: RivePropertyWithListeners {
52
+ typealias ListenerValueType = Void
53
+
54
+ func addListener(_ callback: @escaping ListenerType) -> UUID {
55
+ addListener { callback(()) }
56
+ }
57
+ }
58
+
59
+ /// Helper class for managing ViewModel property listeners
60
+ class PropertyListenerHelper<PropertyType: RivePropertyWithListeners> {
61
+ private var listenerIds: [UUID] = []
62
+ weak var property: PropertyType?
63
+
64
+ init(property: PropertyType) {
65
+ self.property = property
66
+ }
67
+
68
+ /// Adds a listener to the property and automatically tracks its ID for cleanup
69
+ func addListener(_ callback: @escaping (PropertyType.ListenerValueType) -> Void) {
70
+ guard let property = property else { return }
71
+ let id = property.addListener(callback)
72
+ listenerIds.append(id)
73
+ }
74
+
75
+ func removeListeners() throws {
76
+ guard let property = property else { return }
77
+ for id in listenerIds {
78
+ property.removeListener(id)
79
+ }
80
+ listenerIds.removeAll()
81
+ }
82
+
83
+ func dispose() throws {
84
+ try? removeListeners()
85
+ }
86
+ }
87
+
88
+ /// Protocol for properties that have typed values (Bool, String, Double, etc.)
89
+ /// Provides a default addListener implementation
90
+ protocol ValuedPropertyProtocol<ValueType> {
91
+ associatedtype PropertyType: RivePropertyWithListeners
92
+ associatedtype ValueType
93
+
94
+ var property: PropertyType! { get }
95
+ var helper: PropertyListenerHelper<PropertyType> { get }
96
+
97
+ func addListener(onChanged: @escaping (ValueType) -> Void) throws
98
+ func removeListeners() throws
99
+ func dispose() throws
100
+ }
101
+
102
+ /// Default implementations for lifecycle methods (always available)
103
+ extension ValuedPropertyProtocol {
104
+ func removeListeners() throws {
105
+ try helper.removeListeners()
106
+ }
107
+
108
+ func dispose() throws {
109
+ try helper.dispose()
110
+ }
111
+ }
112
+
113
+ /// Automatic addListener() ONLY when ListenerValueType == ValueType (no conversion needed)
114
+ extension ValuedPropertyProtocol where PropertyType.ListenerValueType == ValueType {
115
+ func addListener(onChanged: @escaping (ValueType) -> Void) throws {
116
+ helper.addListener(onChanged) // Types match, just forward directly!
117
+ }
118
+ }
@@ -0,0 +1,25 @@
1
+ import Foundation
2
+
3
+ final class BundleDataLoader: DataLoader {
4
+ func load(from source: DataSource) async throws -> Data {
5
+ guard case .bundle(let resource, let ext) = source else {
6
+ throw DataLoaderError.invalidSource
7
+ }
8
+ return try loadData(resource: resource, extension: ext)
9
+ }
10
+
11
+ func loadData(resource: String, extension ext: String?) throws -> Data {
12
+ guard let url = Bundle.main.url(forResource: resource, withExtension: ext) else {
13
+ let fullName = ext != nil ? "\(resource).\(ext!)" : resource
14
+ throw DataLoaderError.resourceNotFound(resource: fullName)
15
+ }
16
+ return try Data(contentsOf: url)
17
+ }
18
+
19
+ func loadData(fileName: String) throws -> Data {
20
+ let name = (fileName as NSString).deletingPathExtension
21
+ let ext = (fileName as NSString).pathExtension
22
+ let fileExtension = ext.isEmpty ? nil : ext
23
+ return try loadData(resource: name, extension: fileExtension)
24
+ }
25
+ }
@@ -0,0 +1,10 @@
1
+ import Foundation
2
+
3
+ final class BytesDataLoader: DataLoader {
4
+ func load(from source: DataSource) async throws -> Data {
5
+ guard case .bytes(let data) = source else {
6
+ throw DataLoaderError.invalidSource
7
+ }
8
+ return data
9
+ }
10
+ }
@@ -0,0 +1,28 @@
1
+ import Foundation
2
+
3
+ enum DataLoaderError: Error, LocalizedError {
4
+ case invalidSource
5
+ case invalidURL(String)
6
+ case httpError(statusCode: Int, url: URL)
7
+ case resourceNotFound(resource: String)
8
+ case fileNotFound(path: String)
9
+
10
+ var errorDescription: String? {
11
+ switch self {
12
+ case .invalidSource:
13
+ return "Invalid data source type for this loader"
14
+ case .invalidURL(let url):
15
+ return "Invalid URL: \(url)"
16
+ case .httpError(let code, let url):
17
+ return "HTTP error \(code) for \(url)"
18
+ case .resourceNotFound(let resource):
19
+ return "Resource not found: \(resource)"
20
+ case .fileNotFound(let path):
21
+ return "File not found: \(path)"
22
+ }
23
+ }
24
+ }
25
+
26
+ protocol DataLoader {
27
+ func load(from source: DataSource) async throws -> Data
28
+ }
@@ -0,0 +1,43 @@
1
+ import Foundation
2
+ import NitroModules
3
+
4
+ enum DataSource {
5
+ case http(url: URL)
6
+ case file(url: URL)
7
+ case bundle(resource: String, extension: String?)
8
+ case bytes(data: Data)
9
+
10
+ static func fromURL(_ url: URL) -> DataSource {
11
+ return url.isFileURL ? .file(url: url) : .http(url: url)
12
+ }
13
+
14
+ static func fromURL(string: String) throws -> DataSource {
15
+ guard let url = URL(string: string) else {
16
+ throw DataLoaderError.invalidURL(string)
17
+ }
18
+ return fromURL(url)
19
+ }
20
+
21
+ static func bundle(nameWithExtension: String) -> DataSource {
22
+ let name = (nameWithExtension as NSString).deletingPathExtension
23
+ let ext = (nameWithExtension as NSString).pathExtension
24
+ return .bundle(resource: name, extension: ext.isEmpty ? nil : ext)
25
+ }
26
+
27
+ static func bytes(from buffer: ArrayBufferHolder) -> DataSource {
28
+ return .bytes(data: buffer.toData(copyIfNeeded: false))
29
+ }
30
+
31
+ func createLoader() -> DataLoader {
32
+ switch self {
33
+ case .http:
34
+ return HTTPDataLoader.shared
35
+ case .file:
36
+ return FileDataLoader()
37
+ case .bundle:
38
+ return BundleDataLoader()
39
+ case .bytes:
40
+ return BytesDataLoader()
41
+ }
42
+ }
43
+ }