@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,36 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import android.net.Uri
4
+ import java.net.URI
5
+
6
+ object DataSourceResolver {
7
+ fun resolve(asset: ResolvedReferencedAsset): DataSource? {
8
+ asset.sourceUrl?.let { return resolveFromUrl(it) }
9
+ asset.sourceAssetId?.let { return resolveFromAssetId(it) }
10
+ asset.sourceAsset?.let { return DataSource.resource(it) }
11
+ return null
12
+ }
13
+
14
+ private fun resolveFromUrl(urlString: String): DataSource {
15
+ val uri = runCatching { URI(urlString) }.getOrElse {
16
+ throw DataLoaderException.InvalidURL(urlString)
17
+ }
18
+
19
+ return when (uri.scheme) {
20
+ "file" -> uri.path?.let { DataSource.File(it) }
21
+ ?: throw DataLoaderException.InvalidURL(urlString)
22
+ "http", "https" -> DataSource.Http(urlString)
23
+ else -> throw DataLoaderException.InvalidURL(urlString)
24
+ }
25
+ }
26
+
27
+ private fun resolveFromAssetId(assetId: String): DataSource {
28
+ val scheme = runCatching { Uri.parse(assetId).scheme }.getOrNull()
29
+
30
+ if (scheme != null) {
31
+ return resolveFromUrl(assetId)
32
+ }
33
+
34
+ return DataSource.Resource(assetId)
35
+ }
36
+ }
@@ -0,0 +1,12 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ object EventPropertiesOutputExtensions {
4
+ fun boolean(value: Boolean): EventPropertiesOutput =
5
+ EventPropertiesOutput.First(value)
6
+
7
+ fun string(value: String): EventPropertiesOutput =
8
+ EventPropertiesOutput.Second(value)
9
+
10
+ fun number(value: Double): EventPropertiesOutput =
11
+ EventPropertiesOutput.Third(value)
12
+ }
@@ -0,0 +1,21 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import kotlinx.coroutines.Dispatchers
4
+ import kotlinx.coroutines.withContext
5
+ import java.io.File
6
+
7
+ object FileDataLoader : DataLoader {
8
+ override suspend fun load(source: DataSource): ByteArray {
9
+ val fileSource = source as? DataSource.File
10
+ ?: throw DataLoaderException.InvalidSource
11
+ return loadBytes(fileSource.path)
12
+ }
13
+
14
+ suspend fun loadBytes(path: String): ByteArray = withContext(Dispatchers.IO) {
15
+ val file = File(path)
16
+ if (!file.exists()) {
17
+ throw DataLoaderException.FileNotFound(path)
18
+ }
19
+ file.readBytes()
20
+ }
21
+ }
@@ -0,0 +1,37 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import kotlinx.coroutines.Dispatchers
4
+ import kotlinx.coroutines.withContext
5
+ import java.net.HttpURLConnection
6
+ import java.net.MalformedURLException
7
+ import java.net.URL
8
+
9
+ object HTTPDataLoader : DataLoader {
10
+ override suspend fun load(source: DataSource): ByteArray {
11
+ val httpSource = source as? DataSource.Http
12
+ ?: throw DataLoaderException.InvalidSource
13
+ return downloadBytes(httpSource.url)
14
+ }
15
+
16
+ suspend fun downloadBytes(url: String): ByteArray = withContext(Dispatchers.IO) {
17
+ val urlObj = try {
18
+ URL(url)
19
+ } catch (e: MalformedURLException) {
20
+ throw DataLoaderException.InvalidURL(url)
21
+ }
22
+ val connection = urlObj.openConnection() as HttpURLConnection
23
+
24
+ try {
25
+ connection.requestMethod = "GET"
26
+ val statusCode = connection.responseCode
27
+
28
+ if (statusCode !in 200..299) {
29
+ throw DataLoaderException.HttpError(statusCode, url)
30
+ }
31
+
32
+ connection.inputStream.use { it.readBytes() }
33
+ } finally {
34
+ connection.disconnect()
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,98 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import androidx.annotation.Keep
4
+ import app.rive.runtime.kotlin.core.File
5
+ import com.facebook.proguard.annotations.DoNotStrip
6
+ import com.margelo.nitro.NitroModules
7
+ import java.lang.ref.WeakReference
8
+ import kotlinx.coroutines.CoroutineScope
9
+ import kotlinx.coroutines.Dispatchers
10
+ import kotlinx.coroutines.SupervisorJob
11
+ import kotlinx.coroutines.awaitAll
12
+ import kotlinx.coroutines.cancel
13
+ import kotlinx.coroutines.launch
14
+
15
+ @Keep
16
+ @DoNotStrip
17
+ class HybridRiveFile : HybridRiveFileSpec() {
18
+ var riveFile: File? = null
19
+ var referencedAssetCache: ReferencedAssetCache? = null
20
+ var assetLoader: ReferencedAssetLoader? = null
21
+ private val weakViews = mutableListOf<WeakReference<HybridRiveView>>()
22
+ private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
23
+
24
+ override val viewModelCount: Double?
25
+ get() = riveFile?.viewModelCount?.toDouble()
26
+
27
+ override fun viewModelByIndex(index: Double): HybridViewModelSpec? {
28
+ val vm = riveFile?.getViewModelByIndex(index.toInt()) ?: return null
29
+ return HybridViewModel(vm)
30
+ }
31
+
32
+ override fun viewModelByName(name: String): HybridViewModelSpec? {
33
+ val vm = riveFile?.getViewModelByName(name) ?: return null
34
+ return HybridViewModel(vm)
35
+ }
36
+
37
+ override fun defaultArtboardViewModel(artboardBy: ArtboardBy?): HybridViewModelSpec? {
38
+ try {
39
+ val artboard = when (artboardBy?.type) {
40
+ ArtboardByTypes.INDEX -> riveFile?.artboard(artboardBy.index!!.toInt())
41
+ ArtboardByTypes.NAME -> riveFile?.artboard(artboardBy.name!!)
42
+ null -> riveFile?.firstArtboard
43
+ } ?: return null
44
+
45
+ val vm = riveFile?.defaultViewModelForArtboard(artboard) ?: return null
46
+ return HybridViewModel(vm)
47
+ } catch (e: Exception) {
48
+ return null
49
+ }
50
+ }
51
+
52
+ fun registerView(view: HybridRiveView) {
53
+ weakViews.add(WeakReference(view))
54
+ }
55
+
56
+ fun unregisterView(view: HybridRiveView) {
57
+ weakViews.removeAll { it.get() == view }
58
+ }
59
+
60
+ private fun refreshAfterAssetChange() {
61
+ weakViews.removeAll { it.get() == null }
62
+
63
+ for (weakView in weakViews) {
64
+ weakView.get()?.refreshAfterAssetChange()
65
+ }
66
+ }
67
+
68
+ override fun updateReferencedAssets(referencedAssets: ReferencedAssetsType) {
69
+ val assetsData = referencedAssets.data ?: return
70
+ val cache = referencedAssetCache ?: return
71
+ val loader = assetLoader ?: return
72
+
73
+ val loadJobs = mutableListOf<kotlinx.coroutines.Deferred<Unit>>()
74
+
75
+ for ((key, assetData) in assetsData) {
76
+ val asset = cache[key] ?: continue
77
+ loadJobs.add(loader.updateAsset(assetData, asset))
78
+ }
79
+
80
+ if (loadJobs.isNotEmpty()) {
81
+ scope.launch {
82
+ loadJobs.awaitAll()
83
+ refreshAfterAssetChange()
84
+ }
85
+ }
86
+ }
87
+
88
+ override fun dispose() {
89
+ scope.cancel()
90
+ weakViews.clear()
91
+ assetLoader?.dispose()
92
+ assetLoader = null
93
+ riveFile?.release()
94
+ riveFile = null
95
+ referencedAssetCache?.clear()
96
+ referencedAssetCache = null
97
+ }
98
+ }
@@ -0,0 +1,123 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import android.annotation.SuppressLint
4
+ import androidx.annotation.Keep
5
+ import app.rive.runtime.kotlin.core.File
6
+ import app.rive.runtime.kotlin.core.Rive
7
+ import com.facebook.proguard.annotations.DoNotStrip
8
+ import com.margelo.nitro.core.ArrayBuffer
9
+ import com.margelo.nitro.core.Promise
10
+ import kotlinx.coroutines.Dispatchers
11
+ import kotlinx.coroutines.withContext
12
+ import java.net.URI
13
+
14
+ data class FileAndCache(
15
+ val file: File,
16
+ val cache: ReferencedAssetCache,
17
+ val loader: ReferencedAssetLoader?
18
+ )
19
+
20
+ @Keep
21
+ @DoNotStrip
22
+ class HybridRiveFileFactory : HybridRiveFileFactorySpec() {
23
+ private fun buildRiveFile(
24
+ data: ByteArray,
25
+ referencedAssets: ReferencedAssetsType?
26
+ ): FileAndCache {
27
+ val cache = mutableMapOf<String, app.rive.runtime.kotlin.core.FileAsset>()
28
+ val loader = ReferencedAssetLoader()
29
+ val customLoader = loader.createCustomLoader(referencedAssets, cache)
30
+
31
+ // TODO: The File object in Android does not have the concept of loading CDN assets
32
+ val riveFile = if (customLoader != null) {
33
+ File(data, Rive.defaultRendererType, customLoader)
34
+ } else {
35
+ File(data)
36
+ }
37
+
38
+ return FileAndCache(riveFile, cache, if (customLoader != null) loader else null)
39
+ }
40
+
41
+ override fun fromURL(url: String, loadCdn: Boolean, referencedAssets: ReferencedAssetsType?): Promise<HybridRiveFileSpec> {
42
+ return Promise.async {
43
+ try {
44
+ val fileAndCache = withContext(Dispatchers.IO) {
45
+ val riveData = HTTPDataLoader.downloadBytes(url)
46
+ buildRiveFile(riveData, referencedAssets)
47
+ }
48
+
49
+ val hybridRiveFile = HybridRiveFile()
50
+ hybridRiveFile.riveFile = fileAndCache.file
51
+ hybridRiveFile.referencedAssetCache = fileAndCache.cache
52
+ hybridRiveFile.assetLoader = fileAndCache.loader
53
+ hybridRiveFile
54
+ } catch (e: Exception) {
55
+ throw Error("Failed to download Rive file: ${e.message}", e)
56
+ }
57
+ }
58
+ }
59
+
60
+ override fun fromFileURL(fileURL: String, loadCdn: Boolean, referencedAssets: ReferencedAssetsType?): Promise<HybridRiveFileSpec> {
61
+ if (!fileURL.startsWith("file://")) {
62
+ throw Error("fromFileURL: URL must be a file URL: $fileURL")
63
+ }
64
+
65
+ return Promise.async {
66
+ try {
67
+ val uri = URI(fileURL)
68
+ val path = uri.path ?: throw Error("fromFileURL: Invalid URL: $fileURL")
69
+
70
+ val fileAndCache = withContext(Dispatchers.IO) {
71
+ val riveData = FileDataLoader.loadBytes(path)
72
+ buildRiveFile(riveData, referencedAssets)
73
+ }
74
+
75
+ val hybridRiveFile = HybridRiveFile()
76
+ hybridRiveFile.riveFile = fileAndCache.file
77
+ hybridRiveFile.referencedAssetCache = fileAndCache.cache
78
+ hybridRiveFile.assetLoader = fileAndCache.loader
79
+ hybridRiveFile
80
+ } catch (e: Exception) {
81
+ throw Error("Failed to load Rive file: ${e.message}")
82
+ }
83
+ }
84
+ }
85
+
86
+ @SuppressLint("DiscouragedApi")
87
+ override fun fromResource(resource: String, loadCdn: Boolean, referencedAssets: ReferencedAssetsType?): Promise<HybridRiveFileSpec> {
88
+ return Promise.async {
89
+ try {
90
+ val fileAndCache = withContext(Dispatchers.IO) {
91
+ val riveData = ResourceDataLoader.loadBytes(resource)
92
+ buildRiveFile(riveData, referencedAssets)
93
+ }
94
+
95
+ val hybridRiveFile = HybridRiveFile()
96
+ hybridRiveFile.riveFile = fileAndCache.file
97
+ hybridRiveFile.referencedAssetCache = fileAndCache.cache
98
+ hybridRiveFile.assetLoader = fileAndCache.loader
99
+ hybridRiveFile
100
+ } catch (e: Exception) {
101
+ throw Error("Failed to load Rive file: ${e.message}")
102
+ }
103
+ }
104
+ }
105
+
106
+ override fun fromBytes(bytes: ArrayBuffer, loadCdn: Boolean, referencedAssets: ReferencedAssetsType?): Promise<HybridRiveFileSpec> {
107
+ val buffer = bytes.getBuffer(false)
108
+ return Promise.async {
109
+ try {
110
+ val byteArray = ByteArray(buffer.remaining())
111
+ buffer.get(byteArray)
112
+ val fileAndCache = buildRiveFile(byteArray, referencedAssets)
113
+ val hybridRiveFile = HybridRiveFile()
114
+ hybridRiveFile.riveFile = fileAndCache.file
115
+ hybridRiveFile.referencedAssetCache = fileAndCache.cache
116
+ hybridRiveFile.assetLoader = fileAndCache.loader
117
+ hybridRiveFile
118
+ } catch (e: Exception) {
119
+ throw Error("Failed to load Rive file from bytes: ${e.message}")
120
+ }
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,15 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import androidx.annotation.Keep
4
+ import app.rive.runtime.kotlin.core.RiveRenderImage
5
+ import com.facebook.proguard.annotations.DoNotStrip
6
+
7
+ @Keep
8
+ @DoNotStrip
9
+ class HybridRiveImage(
10
+ val renderImage: RiveRenderImage,
11
+ private val dataSize: Int
12
+ ) : HybridRiveImageSpec() {
13
+ override val byteSize: Double
14
+ get() = dataSize.toDouble()
15
+ }
@@ -0,0 +1,23 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import androidx.annotation.Keep
4
+ import app.rive.runtime.kotlin.core.RiveRenderImage
5
+ import com.facebook.proguard.annotations.DoNotStrip
6
+ import com.margelo.nitro.core.ArrayBuffer
7
+ import com.margelo.nitro.core.Promise
8
+
9
+ @Keep
10
+ @DoNotStrip
11
+ class HybridRiveImageFactory : HybridRiveImageFactorySpec() {
12
+ private fun loadFromDataSource(source: DataSource): Promise<HybridRiveImageSpec> = Promise.async {
13
+ val imageData = source.createLoader().load(source)
14
+ val renderImage = RiveRenderImage.fromEncoded(imageData)
15
+ HybridRiveImage(renderImage, imageData.size)
16
+ }
17
+
18
+ override fun loadFromURLAsync(url: String) = loadFromDataSource(DataSource.fromURL(url))
19
+
20
+ override fun loadFromResourceAsync(resource: String) = loadFromDataSource(DataSource.resource(resource))
21
+
22
+ override fun loadFromBytesAsync(bytes: ArrayBuffer) = loadFromDataSource(DataSource.Bytes.from(bytes))
23
+ }
@@ -0,0 +1,279 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import androidx.annotation.Keep
4
+ import com.facebook.proguard.annotations.DoNotStrip
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.margelo.nitro.core.Promise
7
+ import com.rive.BindData
8
+ import com.rive.RiveReactNativeView
9
+ import com.rive.ViewConfiguration
10
+ import app.rive.runtime.kotlin.core.Fit as RiveFit
11
+ import app.rive.runtime.kotlin.core.Alignment as RiveAlignment
12
+ import app.rive.runtime.kotlin.core.errors.*
13
+ import kotlinx.coroutines.Dispatchers
14
+ import kotlinx.coroutines.withContext
15
+
16
+ fun Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName?.toBindData(): BindData {
17
+ if (this == null) return BindData.Auto
18
+
19
+ return when (this) {
20
+ is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.First -> {
21
+ val instance = (this.asFirstOrNull() as? HybridViewModelInstance)?.viewModelInstance
22
+ ?: throw Error("Invalid ViewModelInstance")
23
+ BindData.Instance(instance)
24
+ }
25
+ is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.Second -> {
26
+ when (this.asSecondOrNull()) {
27
+ DataBindMode.AUTO -> BindData.Auto
28
+ DataBindMode.NONE -> BindData.None
29
+ else -> BindData.None
30
+ }
31
+ }
32
+ is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.Third -> {
33
+ val name = this.asThirdOrNull()?.byName ?: throw Error("Missing byName value")
34
+ BindData.ByName(name)
35
+ }
36
+ }
37
+ }
38
+
39
+ object DefaultConfiguration {
40
+ const val AUTOPLAY = true
41
+ val FIT = RiveFit.CONTAIN
42
+ val ALIGNMENT = RiveAlignment.CENTER
43
+ val LAYOUTSCALEFACTOR = null
44
+ }
45
+
46
+ @Keep
47
+ @DoNotStrip
48
+ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
49
+ companion object {
50
+ private const val TAG = "HybridRiveView"
51
+ }
52
+
53
+ //region State
54
+ override val view: RiveReactNativeView = RiveReactNativeView(context)
55
+ private var needsReload = false
56
+ private var dataBindingChanged = false
57
+ private var initialUpdate = true
58
+ private var registeredFile: HybridRiveFile? = null
59
+ //endregion
60
+
61
+ //region View Props
62
+ override var artboardName: String? = null
63
+ set(value) {
64
+ changed(field, value) { field = it }
65
+ }
66
+ override var stateMachineName: String? = null
67
+ set(value) {
68
+ changed(field, value) { field = it }
69
+ }
70
+ override var autoPlay: Boolean? = null
71
+ set(value) {
72
+ changed(field, value) { field = it }
73
+ }
74
+ override var file: HybridRiveFileSpec = HybridRiveFile()
75
+ set(value) {
76
+ if (field != value) {
77
+ registeredFile?.unregisterView(this)
78
+ registeredFile = null
79
+ }
80
+ changed(field, value) { field = it }
81
+ }
82
+ override var alignment: Alignment? = null
83
+ override var fit: Fit? = null
84
+ override var layoutScaleFactor: Double? = null
85
+ override var dataBind: Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName? = null
86
+ set(value) {
87
+ if (field != value) {
88
+ field = value
89
+ dataBindingChanged = true
90
+ }
91
+ }
92
+ override var onError: (error: RiveError) -> Unit = {}
93
+ //endregion
94
+
95
+ //region View Methods
96
+ override fun awaitViewReady(): Promise<Boolean> {
97
+ return Promise.async {
98
+ withContext(Dispatchers.Main) {
99
+ view.awaitViewReady()
100
+ }
101
+ }
102
+ }
103
+
104
+ override fun bindViewModelInstance(viewModelInstance: HybridViewModelInstanceSpec) =
105
+ executeOnUiThread {
106
+ val hybridVmi = viewModelInstance as? HybridViewModelInstance ?: return@executeOnUiThread
107
+ view.bindViewModelInstance(hybridVmi.viewModelInstance)
108
+ }
109
+
110
+ override fun getViewModelInstance(): HybridViewModelInstanceSpec? {
111
+ val viewModelInstance = view.getViewModelInstance() ?: return null
112
+ return HybridViewModelInstance(viewModelInstance)
113
+ }
114
+
115
+ override fun play() = asyncExecuteOnUiThread { view.play() }
116
+
117
+ override fun pause() = asyncExecuteOnUiThread { view.pause() }
118
+
119
+ override fun reset() = asyncExecuteOnUiThread { view.reset() }
120
+
121
+ override fun playIfNeeded() = view.playIfNeeded()
122
+
123
+ override fun onEventListener(onEvent: (event: UnifiedRiveEvent) -> Unit) =
124
+ executeOnUiThread { view.addEventListener(onEvent) }
125
+
126
+ override fun removeEventListeners() = executeOnUiThread { view.removeEventListeners() }
127
+
128
+ override fun setNumberInputValue(name: String, value: Double, path: String?) =
129
+ view.setNumberInputValue(name, value, path)
130
+
131
+ override fun getNumberInputValue(name: String, path: String?): Double =
132
+ view.getNumberInputValue(name, path)
133
+
134
+ override fun setBooleanInputValue(name: String, value: Boolean, path: String?) =
135
+ view.setBooleanInputValue(name, value, path)
136
+
137
+ override fun getBooleanInputValue(name: String, path: String?): Boolean =
138
+ view.getBooleanInputValue(name, path)
139
+
140
+ override fun triggerInput(name: String, path: String?) = view.triggerInput(name, path)
141
+
142
+ override fun setTextRunValue(name: String, value: String, path: String?) =
143
+ view.setTextRunValue(name, value, path)
144
+
145
+ override fun getTextRunValue(name: String, path: String?): String =
146
+ view.getTextRunValue(name, path)
147
+ //endregion
148
+
149
+ //region Update
150
+ fun refreshAfterAssetChange() {
151
+ afterUpdate()
152
+ }
153
+
154
+ override fun afterUpdate() {
155
+ logged(TAG, "afterUpdate") {
156
+ val hybridFile = file as? HybridRiveFile
157
+ val riveFile = hybridFile?.riveFile ?: return@logged
158
+
159
+ val config = ViewConfiguration(
160
+ artboardName = artboardName,
161
+ stateMachineName = stateMachineName,
162
+ autoPlay = autoPlay ?: DefaultConfiguration.AUTOPLAY,
163
+ riveFile = riveFile,
164
+ alignment = convertAlignment(alignment) ?: DefaultConfiguration.ALIGNMENT,
165
+ fit = convertFit(fit) ?: DefaultConfiguration.FIT,
166
+ layoutScaleFactor = layoutScaleFactor?.toFloat() ?: DefaultConfiguration.LAYOUTSCALEFACTOR,
167
+ bindData = dataBind.toBindData()
168
+ )
169
+ view.configure(config, dataBindingChanged = dataBindingChanged, needsReload, initialUpdate = initialUpdate)
170
+
171
+ if (needsReload && hybridFile != null) {
172
+ hybridFile.registerView(this)
173
+ registeredFile = hybridFile
174
+ }
175
+
176
+ needsReload = false
177
+ dataBindingChanged = false
178
+ initialUpdate = false
179
+ super.afterUpdate()
180
+ }
181
+ }
182
+ //endregion
183
+
184
+ //region Helpers
185
+ private fun <T> changed(current: T, new: T, setter: (T) -> Unit) {
186
+ if (current != new) {
187
+ setter(new)
188
+ needsReload = true
189
+ }
190
+ }
191
+
192
+ private fun asyncExecuteOnUiThread(action: () -> Unit): Promise<Unit> {
193
+ return Promise.async {
194
+ context.currentActivity?.runOnUiThread {
195
+ try {
196
+ action()
197
+ } catch (e: Exception) {
198
+ throw Error(e.message) // TODO: Correctly handling errors (https://nitro.margelo.com/docs/errors)
199
+ } catch (e: Error) {
200
+ throw Error(e.message)
201
+ }
202
+ }
203
+ }
204
+ }
205
+
206
+ private fun executeOnUiThread(action: () -> Unit) {
207
+ context.currentActivity?.runOnUiThread {
208
+ try {
209
+ action()
210
+ } catch (e: Exception) {
211
+ throw Error(e.message) // TODO: Correctly handling errors (https://nitro.margelo.com/docs/errors)
212
+ } catch (e: Error) {
213
+ throw Error(e.message)
214
+ }
215
+ }
216
+ }
217
+
218
+ private fun convertAlignment(alignment: Alignment?): RiveAlignment? {
219
+ if (alignment == null) return null
220
+
221
+ return when (alignment) {
222
+ Alignment.TOPLEFT -> RiveAlignment.TOP_LEFT
223
+ Alignment.TOPCENTER -> RiveAlignment.TOP_CENTER
224
+ Alignment.TOPRIGHT -> RiveAlignment.TOP_RIGHT
225
+ Alignment.CENTERLEFT -> RiveAlignment.CENTER_LEFT
226
+ Alignment.CENTER -> RiveAlignment.CENTER
227
+ Alignment.CENTERRIGHT -> RiveAlignment.CENTER_RIGHT
228
+ Alignment.BOTTOMLEFT -> RiveAlignment.BOTTOM_LEFT
229
+ Alignment.BOTTOMCENTER -> RiveAlignment.BOTTOM_CENTER
230
+ Alignment.BOTTOMRIGHT -> RiveAlignment.BOTTOM_RIGHT
231
+ }
232
+ }
233
+
234
+ private fun convertFit(fit: Fit?): RiveFit? {
235
+ if (fit == null) return null
236
+
237
+ return when (fit) {
238
+ Fit.FILL -> RiveFit.FILL
239
+ Fit.CONTAIN -> RiveFit.CONTAIN
240
+ Fit.COVER -> RiveFit.COVER
241
+ Fit.FITWIDTH -> RiveFit.FIT_WIDTH
242
+ Fit.FITHEIGHT -> RiveFit.FIT_HEIGHT
243
+ Fit.NONE -> RiveFit.NONE
244
+ Fit.SCALEDOWN -> RiveFit.SCALE_DOWN
245
+ Fit.LAYOUT -> RiveFit.LAYOUT
246
+ }
247
+ }
248
+
249
+ private fun detectErrorType(exception: Exception): Pair<RiveErrorType, String> {
250
+ val message = exception.message ?: exception.toString()
251
+ val type = when (exception) {
252
+ is ArtboardException -> RiveErrorType.INCORRECTARTBOARDNAME
253
+ is StateMachineException -> RiveErrorType.INCORRECTSTATEMACHINENAME
254
+ is AnimationException -> RiveErrorType.UNKNOWN
255
+ is MalformedFileException -> RiveErrorType.MALFORMEDFILE
256
+ is StateMachineInputException -> RiveErrorType.INCORRECTSTATEMACHINEINPUTNAME
257
+ is TextValueRunException -> RiveErrorType.UNKNOWN
258
+ is ViewModelException -> RiveErrorType.VIEWMODELINSTANCENOTFOUND
259
+ else -> RiveErrorType.UNKNOWN
260
+ }
261
+ return Pair(type, message)
262
+ }
263
+
264
+ fun logged(tag: String, note: String? = null, fn: () -> Unit) {
265
+ try {
266
+ fn()
267
+ } catch (e: Exception) {
268
+ val (errorType, errorDescription) = detectErrorType(e)
269
+ val noteString = note?.let { " $it" } ?: ""
270
+ val errorMessage = "[RIVE] $tag$noteString $errorDescription"
271
+ val riveError = RiveError(
272
+ type = errorType,
273
+ message = errorMessage
274
+ )
275
+ onError(riveError)
276
+ }
277
+ }
278
+ //endregion
279
+ }