@rive-app/react-native 0.1.1 → 0.1.3

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 (65) hide show
  1. package/README.md +18 -7
  2. package/android/src/main/java/com/margelo/nitro/rive/HybridRiveFile.kt +0 -1
  3. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelInstance.kt +26 -47
  4. package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelListProperty.kt +64 -0
  5. package/ios/BaseHybridViewModelProperty.swift +9 -0
  6. package/ios/HybridViewModelInstance.swift +5 -0
  7. package/ios/HybridViewModelListProperty.swift +62 -0
  8. package/lib/module/hooks/useRiveColor.js +0 -1
  9. package/lib/module/hooks/useRiveColor.js.map +1 -1
  10. package/lib/module/hooks/useRiveFile.js +9 -2
  11. package/lib/module/hooks/useRiveFile.js.map +1 -1
  12. package/lib/module/hooks/useRiveList.js +71 -0
  13. package/lib/module/hooks/useRiveList.js.map +1 -0
  14. package/lib/module/hooks/useRiveProperty.js +6 -12
  15. package/lib/module/hooks/useRiveProperty.js.map +1 -1
  16. package/lib/module/hooks/useViewModelInstance.js +139 -0
  17. package/lib/module/hooks/useViewModelInstance.js.map +1 -0
  18. package/lib/module/index.js +2 -0
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/typescript/src/hooks/useRiveColor.d.ts +6 -4
  21. package/lib/typescript/src/hooks/useRiveColor.d.ts.map +1 -1
  22. package/lib/typescript/src/hooks/useRiveFile.d.ts.map +1 -1
  23. package/lib/typescript/src/hooks/useRiveList.d.ts +11 -0
  24. package/lib/typescript/src/hooks/useRiveList.d.ts.map +1 -0
  25. package/lib/typescript/src/hooks/useRiveProperty.d.ts +6 -1
  26. package/lib/typescript/src/hooks/useRiveProperty.d.ts.map +1 -1
  27. package/lib/typescript/src/hooks/useViewModelInstance.d.ts +86 -0
  28. package/lib/typescript/src/hooks/useViewModelInstance.d.ts.map +1 -0
  29. package/lib/typescript/src/index.d.ts +4 -1
  30. package/lib/typescript/src/index.d.ts.map +1 -1
  31. package/lib/typescript/src/specs/ViewModel.nitro.d.ts +24 -0
  32. package/lib/typescript/src/specs/ViewModel.nitro.d.ts.map +1 -1
  33. package/lib/typescript/src/types.d.ts +47 -3
  34. package/lib/typescript/src/types.d.ts.map +1 -1
  35. package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp +9 -0
  36. package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp +1 -0
  37. package/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.cpp +102 -0
  38. package/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp +73 -0
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt +4 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt +92 -0
  41. package/nitrogen/generated/android/rive+autolinking.cmake +2 -0
  42. package/nitrogen/generated/android/riveOnLoad.cpp +2 -0
  43. package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.cpp +17 -0
  44. package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp +44 -0
  45. package/nitrogen/generated/ios/RNRive-Swift-Cxx-Umbrella.hpp +5 -0
  46. package/nitrogen/generated/ios/c++/HybridViewModelInstanceSpecSwift.hpp +11 -0
  47. package/nitrogen/generated/ios/c++/HybridViewModelListPropertySpecSwift.cpp +11 -0
  48. package/nitrogen/generated/ios/c++/HybridViewModelListPropertySpecSwift.hpp +134 -0
  49. package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec.swift +1 -0
  50. package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec_cxx.swift +21 -0
  51. package/nitrogen/generated/ios/swift/HybridViewModelListPropertySpec.swift +63 -0
  52. package/nitrogen/generated/ios/swift/HybridViewModelListPropertySpec_cxx.swift +248 -0
  53. package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.cpp +1 -0
  54. package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.hpp +4 -0
  55. package/nitrogen/generated/shared/c++/HybridViewModelListPropertySpec.cpp +30 -0
  56. package/nitrogen/generated/shared/c++/HybridViewModelListPropertySpec.hpp +76 -0
  57. package/package.json +7 -3
  58. package/src/hooks/useRiveColor.ts +7 -4
  59. package/src/hooks/useRiveFile.ts +14 -2
  60. package/src/hooks/useRiveList.ts +108 -0
  61. package/src/hooks/useRiveProperty.ts +19 -12
  62. package/src/hooks/useViewModelInstance.ts +195 -0
  63. package/src/index.tsx +4 -0
  64. package/src/specs/ViewModel.nitro.ts +28 -0
  65. package/src/types.tsx +58 -3
package/README.md CHANGED
@@ -1,10 +1,21 @@
1
1
  # @rive-app/react-native
2
2
 
3
- Rive React Native 2.0
3
+ [![Build](https://github.com/rive-app/rive-nitro-react-native/actions/workflows/ci.yml/badge.svg)](https://github.com/rive-app/rive-nitro-react-native/actions)
4
+ [![NPM Version](https://img.shields.io/npm/v/@rive-app/react-native)](https://www.npmjs.com/package/@rive-app/react-native)
5
+ [![Downloads](https://img.shields.io/npm/dm/@rive-app/react-native)](https://www.npmjs.com/package/@rive-app/react-native)
6
+ [![React Native](https://img.shields.io/badge/React_Native-0.78+-61dafb)](https://reactnative.dev/)
7
+ [![iOS](https://img.shields.io/badge/iOS-15.1+-blue)](#requirements)
8
+ [![Android](https://img.shields.io/badge/Android-7.0+-green)](#requirements)
9
+ [![Rive iOS Runtime](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Frive-app%2Frive-nitro-react-native%2Fmain%2Fpackage.json&query=%24.runtimeVersions.ios&label=Rive%20iOS%20Runtime&color=informational)](https://github.com/rive-app/rive-ios/releases)
10
+ [![Rive Android Runtime](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Frive-app%2Frive-nitro-react-native%2Fmain%2Fpackage.json&query=%24.runtimeVersions.android&label=Rive%20Android%20Runtime&color=informational)](https://github.com/rive-app/rive-android/releases)
4
11
 
5
- ## Development Preview
12
+ **Rive React Native 2.0**
6
13
 
7
- > **⚠️ Development Preview**: This package is currently in development preview. While it's functional and actively maintained, the API may change in future releases. We recommend testing thoroughly before using in production applications. We're actively gathering feedback to improve the library. Please share your thoughts and report any issues you encounter.
14
+ ![Rive hero image](https://cdn.rive.app/rive_logo_dark_bg.png)
15
+
16
+ ## Early Release
17
+
18
+ > **⚠️ Early Release**: This package is in active development. We recommend testing thoroughly before using in production applications. We're actively gathering feedback to improve the library. Please share your thoughts and report any issues you encounter.
8
19
 
9
20
  ## Requirements
10
21
 
@@ -23,7 +34,7 @@ Rive React Native 2.0
23
34
  ## Installation
24
35
 
25
36
  ```sh
26
- npm install rive-app/rive-nitro-react-native react-native-nitro-modules
37
+ npm install @rive-app/react-native react-native-nitro-modules
27
38
  ```
28
39
 
29
40
  > `react-native-nitro-modules` is required as this library relies on [Nitro Modules](https://nitro.margelo.com/).
@@ -117,6 +128,7 @@ export default {
117
128
  },
118
129
  };
119
130
  ```
131
+
120
132
  </details>
121
133
 
122
134
  ## Error Handling
@@ -237,9 +249,9 @@ This section tracks new features and improvements planned for this runtime that
237
249
  | Feature | Status |
238
250
  | ----------------------------------------------------------------------------------------------------- | ------ |
239
251
  | [Reusable .riv File resources (preloading)](https://github.com/rive-app/rive-react-native/issues/260) | ✅ |
240
- | [Data Binding - Images](https://github.com/rive-app/rive-nitro-react-native/issues/9) | 🚧 |
252
+ | [Data Binding - Images](https://github.com/rive-app/rive-nitro-react-native/issues/9) | |
241
253
  | [Data Binding - Artboards](https://github.com/rive-app/rive-nitro-react-native/issues/10) | 🚧 |
242
- | [Data Binding - Lists](https://github.com/rive-app/rive-nitro-react-native/issues/11) | 🚧 |
254
+ | [Data Binding - Lists](https://github.com/rive-app/rive-nitro-react-native/issues/11) | |
243
255
  | [Data Binding - Value props](https://github.com/rive-app/rive-nitro-react-native/pull/24) | 🚧 |
244
256
  | [Suspense](https://github.com/rive-app/rive-nitro-react-native/pull/19) | 🚧 |
245
257
 
@@ -254,4 +266,3 @@ MIT
254
266
  ---
255
267
 
256
268
  Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
257
-
@@ -3,7 +3,6 @@ package com.margelo.nitro.rive
3
3
  import androidx.annotation.Keep
4
4
  import app.rive.runtime.kotlin.core.File
5
5
  import com.facebook.proguard.annotations.DoNotStrip
6
- import com.margelo.nitro.NitroModules
7
6
  import java.lang.ref.WeakReference
8
7
  import kotlinx.coroutines.CoroutineScope
9
8
  import kotlinx.coroutines.Dispatchers
@@ -11,66 +11,45 @@ class HybridViewModelInstance(val viewModelInstance: ViewModelInstance) : Hybrid
11
11
  override val instanceName: String
12
12
  get() = viewModelInstance.name
13
13
 
14
- override fun numberProperty(path: String): HybridViewModelNumberPropertySpec? {
15
- try {
16
- val numberProper = viewModelInstance.getNumberProperty(path)
17
- return HybridViewModelNumberProperty(numberProper)
14
+ // Returns null if ViewModelException is thrown for iOS parity
15
+ // (iOS SDK returns nil when property not found, Android SDK throws)
16
+ private inline fun <T> getPropertyOrNull(block: () -> T): T? {
17
+ return try {
18
+ block()
18
19
  } catch (e: ViewModelException) {
19
- return null
20
+ null
20
21
  }
21
22
  }
22
23
 
23
- override fun stringProperty(path: String): HybridViewModelStringPropertySpec? {
24
- try {
25
- val stringProperty = viewModelInstance.getStringProperty(path)
26
- return HybridViewModelStringProperty(stringProperty)
27
- } catch (e: ViewModelException) {
28
- return null
29
- }
24
+ override fun numberProperty(path: String) = getPropertyOrNull {
25
+ HybridViewModelNumberProperty(viewModelInstance.getNumberProperty(path))
30
26
  }
31
27
 
32
- override fun booleanProperty(path: String): HybridViewModelBooleanPropertySpec? {
33
- try {
34
- val booleanProperty = viewModelInstance.getBooleanProperty(path)
35
- return HybridViewModelBooleanProperty(booleanProperty)
36
- } catch (e: ViewModelException) {
37
- return null
38
- }
28
+ override fun stringProperty(path: String) = getPropertyOrNull {
29
+ HybridViewModelStringProperty(viewModelInstance.getStringProperty(path))
39
30
  }
40
31
 
41
- override fun colorProperty(path: String): HybridViewModelColorPropertySpec? {
42
- try {
43
- val colorProperty = viewModelInstance.getColorProperty(path)
44
- return HybridViewModelColorProperty(colorProperty)
45
- } catch (e: ViewModelException) {
46
- return null
47
- }
32
+ override fun booleanProperty(path: String) = getPropertyOrNull {
33
+ HybridViewModelBooleanProperty(viewModelInstance.getBooleanProperty(path))
48
34
  }
49
35
 
50
- override fun enumProperty(path: String): HybridViewModelEnumPropertySpec? {
51
- try {
52
- val enumProperty = viewModelInstance.getEnumProperty(path)
53
- return HybridViewModelEnumProperty(enumProperty)
54
- } catch (e: ViewModelException) {
55
- return null
56
- }
36
+ override fun colorProperty(path: String) = getPropertyOrNull {
37
+ HybridViewModelColorProperty(viewModelInstance.getColorProperty(path))
57
38
  }
58
39
 
59
- override fun triggerProperty(path: String): HybridViewModelTriggerPropertySpec? {
60
- try {
61
- val triggerProperty = viewModelInstance.getTriggerProperty(path)
62
- return HybridViewModelTriggerProperty(triggerProperty)
63
- } catch (e: ViewModelException) {
64
- return null
65
- }
40
+ override fun enumProperty(path: String) = getPropertyOrNull {
41
+ HybridViewModelEnumProperty(viewModelInstance.getEnumProperty(path))
66
42
  }
67
43
 
68
- override fun imageProperty(path: String): HybridViewModelImagePropertySpec? {
69
- try {
70
- val imageProperty = viewModelInstance.getImageProperty(path)
71
- return HybridViewModelImageProperty(imageProperty)
72
- } catch (e: ViewModelException) {
73
- return null
74
- }
44
+ override fun triggerProperty(path: String) = getPropertyOrNull {
45
+ HybridViewModelTriggerProperty(viewModelInstance.getTriggerProperty(path))
46
+ }
47
+
48
+ override fun imageProperty(path: String) = getPropertyOrNull {
49
+ HybridViewModelImageProperty(viewModelInstance.getImageProperty(path))
50
+ }
51
+
52
+ override fun listProperty(path: String) = getPropertyOrNull {
53
+ HybridViewModelListProperty(viewModelInstance.getListProperty(path))
75
54
  }
76
55
  }
@@ -0,0 +1,64 @@
1
+ package com.margelo.nitro.rive
2
+
3
+ import androidx.annotation.Keep
4
+ import app.rive.runtime.kotlin.core.ViewModelListProperty
5
+ import com.facebook.proguard.annotations.DoNotStrip
6
+ import kotlinx.coroutines.flow.map
7
+
8
+ @Keep
9
+ @DoNotStrip
10
+ class HybridViewModelListProperty(private val listProperty: ViewModelListProperty) :
11
+ HybridViewModelListPropertySpec(),
12
+ BaseHybridViewModelProperty<Unit> by BaseHybridViewModelPropertyImpl() {
13
+ override val length: Double
14
+ get() = listProperty.size.toDouble()
15
+
16
+ private fun requireHybridInstance(instance: HybridViewModelInstanceSpec): HybridViewModelInstance {
17
+ return instance as? HybridViewModelInstance
18
+ ?: throw IllegalArgumentException("Expected HybridViewModelInstance but got ${instance::class.simpleName}")
19
+ }
20
+
21
+ override fun getInstanceAt(index: Double): HybridViewModelInstanceSpec? {
22
+ val idx = index.toInt()
23
+ if (idx < 0 || idx >= listProperty.size) return null
24
+ return HybridViewModelInstance(listProperty.elementAt(idx))
25
+ }
26
+
27
+ override fun addInstance(instance: HybridViewModelInstanceSpec) {
28
+ val hybridInstance = requireHybridInstance(instance)
29
+ listProperty.add(hybridInstance.viewModelInstance)
30
+ }
31
+
32
+ override fun addInstanceAt(instance: HybridViewModelInstanceSpec, index: Double): Boolean {
33
+ val hybridInstance = requireHybridInstance(instance)
34
+ val idx = index.toInt()
35
+ if (idx < 0 || idx > listProperty.size) return false
36
+ listProperty.add(idx, hybridInstance.viewModelInstance)
37
+ return true
38
+ }
39
+
40
+ override fun removeInstance(instance: HybridViewModelInstanceSpec) {
41
+ val hybridInstance = requireHybridInstance(instance)
42
+ listProperty.remove(hybridInstance.viewModelInstance)
43
+ }
44
+
45
+ override fun removeInstanceAt(index: Double) {
46
+ listProperty.removeAt(index.toInt())
47
+ }
48
+
49
+ override fun swap(index1: Double, index2: Double): Boolean {
50
+ val idx1 = index1.toInt()
51
+ val idx2 = index2.toInt()
52
+ if (idx1 < 0 || idx1 >= listProperty.size || idx2 < 0 || idx2 >= listProperty.size) {
53
+ return false
54
+ }
55
+ listProperty.swap(idx1, idx2)
56
+ return true
57
+ }
58
+
59
+ override fun addListener(onChanged: () -> Unit): () -> Unit {
60
+ val remover = addListenerInternal { _ -> onChanged() }
61
+ ensureValueListenerJob(listProperty.valueFlow.map { })
62
+ return remover
63
+ }
64
+ }
@@ -23,6 +23,7 @@ typealias EnumPropertyType = RiveDataBindingViewModel.Instance.EnumProperty
23
23
  typealias ColorPropertyType = RiveDataBindingViewModel.Instance.ColorProperty
24
24
  typealias TriggerPropertyType = RiveDataBindingViewModel.Instance.TriggerProperty
25
25
  typealias ImagePropertyType = RiveDataBindingViewModel.Instance.ImageProperty
26
+ typealias ListPropertyType = RiveDataBindingViewModel.Instance.ListProperty
26
27
 
27
28
  // Make all Rive property types conform to the protocol
28
29
  extension BooleanPropertyType: RivePropertyWithListeners {
@@ -56,6 +57,14 @@ extension ImagePropertyType: RivePropertyWithListeners {
56
57
  }
57
58
  }
58
59
 
60
+ extension ListPropertyType: RivePropertyWithListeners {
61
+ typealias ListenerValueType = Void
62
+
63
+ func addListener(_ callback: @escaping ListenerType) -> UUID {
64
+ addListener { callback(()) }
65
+ }
66
+ }
67
+
59
68
  /// Helper class for managing ViewModel property listeners
60
69
  class PropertyListenerHelper<PropertyType: RivePropertyWithListeners> {
61
70
  private var listenerIds: [UUID] = []
@@ -43,4 +43,9 @@ class HybridViewModelInstance: HybridViewModelInstanceSpec {
43
43
  guard let property = viewModelInstance?.imageProperty(fromPath: path) else { return nil }
44
44
  return HybridViewModelImageProperty(property: property)
45
45
  }
46
+
47
+ func listProperty(path: String) throws -> (any HybridViewModelListPropertySpec)? {
48
+ guard let property = viewModelInstance?.listProperty(fromPath: path) else { return nil }
49
+ return HybridViewModelListProperty(property: property)
50
+ }
46
51
  }
@@ -0,0 +1,62 @@
1
+ import RiveRuntime
2
+
3
+ class HybridViewModelListProperty: HybridViewModelListPropertySpec, ValuedPropertyProtocol {
4
+ var property: ListPropertyType!
5
+ lazy var helper = PropertyListenerHelper(property: property!)
6
+
7
+ init(property: ListPropertyType) {
8
+ self.property = property
9
+ super.init()
10
+ }
11
+
12
+ var length: Double {
13
+ Double(property.count)
14
+ }
15
+
16
+ func getInstanceAt(index: Double) throws -> (any HybridViewModelInstanceSpec)? {
17
+ guard let instance = property.instance(at: Int32(index)) else { return nil }
18
+ return HybridViewModelInstance(viewModelInstance: instance)
19
+ }
20
+
21
+ private func requireViewModelInstance(_ instance: any HybridViewModelInstanceSpec) throws -> RiveDataBindingViewModel.Instance {
22
+ guard let hybridInstance = instance as? HybridViewModelInstance,
23
+ let viewModelInstance = hybridInstance.viewModelInstance else {
24
+ throw NSError(domain: "HybridViewModelListProperty", code: 1,
25
+ userInfo: [NSLocalizedDescriptionKey: "Expected HybridViewModelInstance with valid viewModelInstance"])
26
+ }
27
+ return viewModelInstance
28
+ }
29
+
30
+ func addInstance(instance: any HybridViewModelInstanceSpec) throws {
31
+ let viewModelInstance = try requireViewModelInstance(instance)
32
+ property.append(viewModelInstance)
33
+ }
34
+
35
+ func addInstanceAt(instance: any HybridViewModelInstanceSpec, index: Double) throws -> Bool {
36
+ let viewModelInstance = try requireViewModelInstance(instance)
37
+ return property.insert(viewModelInstance, at: Int32(index))
38
+ }
39
+
40
+ func removeInstance(instance: any HybridViewModelInstanceSpec) throws {
41
+ let viewModelInstance = try requireViewModelInstance(instance)
42
+ property.remove(viewModelInstance)
43
+ }
44
+
45
+ func removeInstanceAt(index: Double) throws {
46
+ property.remove(at: Int32(index))
47
+ }
48
+
49
+ func swap(index1: Double, index2: Double) throws -> Bool {
50
+ let idx1 = UInt32(index1)
51
+ let idx2 = UInt32(index2)
52
+ guard idx1 < property.count && idx2 < property.count else {
53
+ return false
54
+ }
55
+ property.swap(at: idx1, with: idx2)
56
+ return true
57
+ }
58
+
59
+ func addListener(onChanged: @escaping () -> Void) throws -> () -> Void {
60
+ helper.addListener({ _ in onChanged() })
61
+ }
62
+ }
@@ -6,7 +6,6 @@ import { RiveColor } from "../core/RiveColor.js";
6
6
  const COLOR_PROPERTY_OPTIONS = {
7
7
  getProperty: (vmi, p) => vmi.colorProperty(p)
8
8
  };
9
-
10
9
  /**
11
10
  * Hook for interacting with color ViewModel instance properties.
12
11
  *
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useRiveProperty","RiveColor","COLOR_PROPERTY_OPTIONS","getProperty","vmi","p","colorProperty","useRiveColor","path","viewModelInstance","rawValue","setRawValue","error","value","undefined","fromInt","setValue","newValue","color","fromHexString","toInt"],"sourceRoot":"../../../src","sources":["hooks/useRiveColor.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AAMnC,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,SAAS,QAAQ,sBAAmB;AAE7C,MAAMC,sBAAsB,GAAG;EAC7BC,WAAW,EAAEA,CAACC,GAAsB,EAAEC,CAAS,KAAKD,GAAG,CAACE,aAAa,CAACD,CAAC;AACzE,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,YAAYA,CAC1BC,IAAY,EACZC,iBAA4C,EAG5C;EACA,MAAM,CAACC,QAAQ,EAAEC,WAAW,EAAEC,KAAK,CAAC,GAAGZ,eAAe,CAGpDS,iBAAiB,EAAED,IAAI,EAAEN,sBAAsB,CAAC;EAElD,MAAMW,KAAK,GACTH,QAAQ,KAAKI,SAAS,GAAGb,SAAS,CAACc,OAAO,CAACL,QAAQ,CAAC,GAAGI,SAAS;EAElE,MAAME,QAAQ,GAAGjB,WAAW,CACzBkB,QAA4B,IAAK;IAChC,MAAMC,KAAK,GACT,OAAOD,QAAQ,KAAK,QAAQ,GACxBhB,SAAS,CAACkB,aAAa,CAACF,QAAQ,CAAC,GACjCA,QAAQ;IACdN,WAAW,CAACO,KAAK,CAACE,KAAK,CAAC,CAAC,CAAC;EAC5B,CAAC,EACD,CAACT,WAAW,CACd,CAAC;EAED,OAAO;IAAEE,KAAK;IAAEG,QAAQ;IAAEJ;EAAM,CAAC;AACnC","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useRiveProperty","RiveColor","COLOR_PROPERTY_OPTIONS","getProperty","vmi","p","colorProperty","useRiveColor","path","viewModelInstance","rawValue","setRawValue","error","value","undefined","fromInt","setValue","newValue","color","fromHexString","toInt"],"sourceRoot":"../../../src","sources":["hooks/useRiveColor.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AAKnC,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,SAAS,QAAQ,sBAAmB;AAE7C,MAAMC,sBAAsB,GAAG;EAC7BC,WAAW,EAAEA,CAACC,GAAsB,EAAEC,CAAS,KAAKD,GAAG,CAACE,aAAa,CAACD,CAAC;AACzE,CAAC;AAQD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,YAAYA,CAC1BC,IAAY,EACZC,iBAA4C,EACxB;EACpB,MAAM,CAACC,QAAQ,EAAEC,WAAW,EAAEC,KAAK,CAAC,GAAGZ,eAAe,CAGpDS,iBAAiB,EAAED,IAAI,EAAEN,sBAAsB,CAAC;EAElD,MAAMW,KAAK,GACTH,QAAQ,KAAKI,SAAS,GAAGb,SAAS,CAACc,OAAO,CAACL,QAAQ,CAAC,GAAGI,SAAS;EAElE,MAAME,QAAQ,GAAGjB,WAAW,CACzBkB,QAA4B,IAAK;IAChC,MAAMC,KAAK,GACT,OAAOD,QAAQ,KAAK,QAAQ,GACxBhB,SAAS,CAACkB,aAAa,CAACF,QAAQ,CAAC,GACjCA,QAAQ;IACdN,WAAW,CAACO,KAAK,CAACE,KAAK,CAAC,CAAC,CAAC;EAC5B,CAAC,EACD,CAACT,WAAW,CACd,CAAC;EAED,OAAO;IAAEE,KAAK;IAAEG,QAAQ;IAAEJ;EAAM,CAAC;AACnC","ignoreList":[]}
@@ -4,6 +4,9 @@ import { useState, useEffect, useMemo, useRef } from 'react';
4
4
  import { Image } from 'react-native';
5
5
  import { RiveFileFactory } from "../core/RiveFile.js";
6
6
  import { callDispose } from "../core/callDispose.js";
7
+ function isUriInput(input) {
8
+ return input != null && typeof input === 'object' && 'uri' in input;
9
+ }
7
10
  function isRiveImage(value) {
8
11
  return value !== null && typeof value === 'object' && '__type' in value && value.__type === 'HybridObject<RiveImage>';
9
12
  }
@@ -61,11 +64,15 @@ export function useRiveFile(input, options = {}) {
61
64
  });
62
65
  const referencedAssets = useMemo(() => transformFilesHandledMapping(options.referencedAssets), [options.referencedAssets]);
63
66
  const initialReferencedAssets = useRef(referencedAssets);
67
+ const inputKind = isUriInput(input) ? 'uri' : 'primitive';
68
+ const inputValue = isUriInput(input) ? input.uri : input;
64
69
  useEffect(() => {
65
70
  let currentFile = null;
66
71
  const loadRiveFile = async () => {
67
72
  try {
68
- const currentInput = input;
73
+ const currentInput = inputKind === 'uri' ? {
74
+ uri: inputValue
75
+ } : inputValue;
69
76
  if (currentInput == null) {
70
77
  setResult({
71
78
  riveFile: null,
@@ -105,7 +112,7 @@ export function useRiveFile(input, options = {}) {
105
112
  callDispose(currentFile);
106
113
  }
107
114
  };
108
- }, [input]);
115
+ }, [inputKind, inputValue]);
109
116
  const {
110
117
  riveFile
111
118
  } = result;
@@ -1 +1 @@
1
- {"version":3,"names":["useState","useEffect","useMemo","useRef","Image","RiveFileFactory","callDispose","isRiveImage","value","__type","parsePossibleSources","asset","image","source","resolvedAsset","resolveAssetSource","uri","sourceAssetId","Error","sourceUrl","fileName","path","result","sourceAsset","transformFilesHandledMapping","mapping","transformedMapping","undefined","Object","entries","forEach","key","useRiveFile","input","options","setResult","riveFile","isLoading","error","referencedAssets","initialReferencedAssets","currentFile","loadRiveFile","currentInput","startsWith","fromURL","current","fromResource","fromSource","ArrayBuffer","fromBytes","err","console","message","updateReferencedAssets","data"],"sourceRoot":"../../../src","sources":["hooks/useRiveFile.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useState","useEffect","useMemo","useRef","Image","RiveFileFactory","callDispose","isUriInput","input","isRiveImage","value","__type","parsePossibleSources","asset","image","source","resolvedAsset","resolveAssetSource","uri","sourceAssetId","Error","sourceUrl","fileName","path","result","sourceAsset","transformFilesHandledMapping","mapping","transformedMapping","undefined","Object","entries","forEach","key","useRiveFile","options","setResult","riveFile","isLoading","error","referencedAssets","initialReferencedAssets","inputKind","inputValue","currentFile","loadRiveFile","currentInput","startsWith","fromURL","current","fromResource","fromSource","ArrayBuffer","fromBytes","err","console","message","updateReferencedAssets","data"],"sourceRoot":"../../../src","sources":["hooks/useRiveFile.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useEffect, useState, useMemo } from 'react';
4
+ /**
5
+ * Hook for interacting with list ViewModel instance properties.
6
+ *
7
+ * @param path - The path to the list property
8
+ * @param viewModelInstance - The ViewModelInstance containing the list property
9
+ * @returns An object with list length, manipulation methods, and error state
10
+ */
11
+ export function useRiveList(path, viewModelInstance) {
12
+ const [error, setError] = useState(null);
13
+ const [revision, setRevision] = useState(0);
14
+ useEffect(() => {
15
+ setError(null);
16
+ }, [path, viewModelInstance]);
17
+ const property = useMemo(() => {
18
+ if (!viewModelInstance) return undefined;
19
+ return viewModelInstance.listProperty(path);
20
+ }, [viewModelInstance, path]);
21
+ useEffect(() => {
22
+ if (viewModelInstance && !property) {
23
+ setError(new Error(`List property "${path}" not found in the ViewModel instance`));
24
+ }
25
+ }, [viewModelInstance, property, path]);
26
+ useEffect(() => {
27
+ if (!property) return;
28
+ const removeListener = property.addListener(() => {
29
+ setRevision(r => r + 1);
30
+ });
31
+ return () => {
32
+ removeListener();
33
+ property.removeListeners();
34
+ property.dispose();
35
+ };
36
+ }, [property]);
37
+ const length = useMemo(() => {
38
+ // revision is used to trigger re-computation when list changes
39
+ revision;
40
+ return property?.length ?? 0;
41
+ }, [property, revision]);
42
+ const getInstanceAt = useCallback(index => {
43
+ return property?.getInstanceAt(index);
44
+ }, [property]);
45
+ const addInstance = useCallback(instance => {
46
+ property?.addInstance(instance);
47
+ }, [property]);
48
+ const addInstanceAt = useCallback((instance, index) => {
49
+ return property?.addInstanceAt(instance, index) ?? false;
50
+ }, [property]);
51
+ const removeInstance = useCallback(instance => {
52
+ property?.removeInstance(instance);
53
+ }, [property]);
54
+ const removeInstanceAt = useCallback(index => {
55
+ property?.removeInstanceAt(index);
56
+ }, [property]);
57
+ const swap = useCallback((index1, index2) => {
58
+ return property?.swap(index1, index2) ?? false;
59
+ }, [property]);
60
+ return {
61
+ length,
62
+ getInstanceAt,
63
+ addInstance,
64
+ addInstanceAt,
65
+ removeInstance,
66
+ removeInstanceAt,
67
+ swap,
68
+ error
69
+ };
70
+ }
71
+ //# sourceMappingURL=useRiveList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useState","useMemo","useRiveList","path","viewModelInstance","error","setError","revision","setRevision","property","undefined","listProperty","Error","removeListener","addListener","r","removeListeners","dispose","length","getInstanceAt","index","addInstance","instance","addInstanceAt","removeInstance","removeInstanceAt","swap","index1","index2"],"sourceRoot":"../../../src","sources":["hooks/useRiveList.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,OAAO,QAAQ,OAAO;AAIjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CACzBC,IAAY,EACZC,iBAA4C,EACzB;EACnB,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGN,QAAQ,CAAe,IAAI,CAAC;EACtD,MAAM,CAACO,QAAQ,EAAEC,WAAW,CAAC,GAAGR,QAAQ,CAAC,CAAC,CAAC;EAE3CD,SAAS,CAAC,MAAM;IACdO,QAAQ,CAAC,IAAI,CAAC;EAChB,CAAC,EAAE,CAACH,IAAI,EAAEC,iBAAiB,CAAC,CAAC;EAE7B,MAAMK,QAAQ,GAAGR,OAAO,CAAC,MAAM;IAC7B,IAAI,CAACG,iBAAiB,EAAE,OAAOM,SAAS;IACxC,OAAON,iBAAiB,CAACO,YAAY,CAACR,IAAI,CAAC;EAC7C,CAAC,EAAE,CAACC,iBAAiB,EAAED,IAAI,CAAC,CAAC;EAE7BJ,SAAS,CAAC,MAAM;IACd,IAAIK,iBAAiB,IAAI,CAACK,QAAQ,EAAE;MAClCH,QAAQ,CACN,IAAIM,KAAK,CAAC,kBAAkBT,IAAI,uCAAuC,CACzE,CAAC;IACH;EACF,CAAC,EAAE,CAACC,iBAAiB,EAAEK,QAAQ,EAAEN,IAAI,CAAC,CAAC;EAEvCJ,SAAS,CAAC,MAAM;IACd,IAAI,CAACU,QAAQ,EAAE;IAEf,MAAMI,cAAc,GAAGJ,QAAQ,CAACK,WAAW,CAAC,MAAM;MAChDN,WAAW,CAAEO,CAAC,IAAKA,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO,MAAM;MACXF,cAAc,CAAC,CAAC;MAChBJ,QAAQ,CAACO,eAAe,CAAC,CAAC;MAC1BP,QAAQ,CAACQ,OAAO,CAAC,CAAC;IACpB,CAAC;EACH,CAAC,EAAE,CAACR,QAAQ,CAAC,CAAC;EAEd,MAAMS,MAAM,GAAGjB,OAAO,CAAC,MAAM;IAC3B;IACAM,QAAQ;IACR,OAAOE,QAAQ,EAAES,MAAM,IAAI,CAAC;EAC9B,CAAC,EAAE,CAACT,QAAQ,EAAEF,QAAQ,CAAC,CAAC;EAExB,MAAMY,aAAa,GAAGrB,WAAW,CAC9BsB,KAAa,IAAK;IACjB,OAAOX,QAAQ,EAAEU,aAAa,CAACC,KAAK,CAAC;EACvC,CAAC,EACD,CAACX,QAAQ,CACX,CAAC;EAED,MAAMY,WAAW,GAAGvB,WAAW,CAC5BwB,QAA2B,IAAK;IAC/Bb,QAAQ,EAAEY,WAAW,CAACC,QAAQ,CAAC;EACjC,CAAC,EACD,CAACb,QAAQ,CACX,CAAC;EAED,MAAMc,aAAa,GAAGzB,WAAW,CAC/B,CAACwB,QAA2B,EAAEF,KAAa,KAAK;IAC9C,OAAOX,QAAQ,EAAEc,aAAa,CAACD,QAAQ,EAAEF,KAAK,CAAC,IAAI,KAAK;EAC1D,CAAC,EACD,CAACX,QAAQ,CACX,CAAC;EAED,MAAMe,cAAc,GAAG1B,WAAW,CAC/BwB,QAA2B,IAAK;IAC/Bb,QAAQ,EAAEe,cAAc,CAACF,QAAQ,CAAC;EACpC,CAAC,EACD,CAACb,QAAQ,CACX,CAAC;EAED,MAAMgB,gBAAgB,GAAG3B,WAAW,CACjCsB,KAAa,IAAK;IACjBX,QAAQ,EAAEgB,gBAAgB,CAACL,KAAK,CAAC;EACnC,CAAC,EACD,CAACX,QAAQ,CACX,CAAC;EAED,MAAMiB,IAAI,GAAG5B,WAAW,CACtB,CAAC6B,MAAc,EAAEC,MAAc,KAAK;IAClC,OAAOnB,QAAQ,EAAEiB,IAAI,CAACC,MAAM,EAAEC,MAAM,CAAC,IAAI,KAAK;EAChD,CAAC,EACD,CAACnB,QAAQ,CACX,CAAC;EAED,OAAO;IACLS,MAAM;IACNC,aAAa;IACbE,WAAW;IACXE,aAAa;IACbC,cAAc;IACdC,gBAAgB;IAChBC,IAAI;IACJrB;EACF,CAAC;AACH","ignoreList":[]}
@@ -43,27 +43,21 @@ export function useRiveProperty(viewModelInstance, path, options) {
43
43
 
44
44
  // If an override callback is provided, use it.
45
45
  // Otherwise, use the default callback.
46
- if (options.onPropertyEventOverride) {
47
- property.addListener(options.onPropertyEventOverride);
48
- } else {
49
- property.addListener(newValue => {
50
- setValue(newValue);
51
- });
52
- }
53
-
54
- // Cleanup: Remove listeners and dispose of the property
55
- // This ensures proper cleanup of event listeners and resources
46
+ const removeListener = options.onPropertyEventOverride ? property.addListener(options.onPropertyEventOverride) : property.addListener(newValue => {
47
+ setValue(newValue);
48
+ });
56
49
  return () => {
57
- property.removeListeners();
50
+ removeListener();
58
51
  property.dispose();
59
52
  };
60
53
  }, [options, property]);
61
54
 
62
55
  // Set the value of the property
63
- const setPropertyValue = useCallback(newValue => {
56
+ const setPropertyValue = useCallback(valueOrUpdater => {
64
57
  if (!property) {
65
58
  setError(new Error(`Cannot set value for property "${path}" because it was not found. Your view model instance may be undefined, or the path may be incorrect.`));
66
59
  } else {
60
+ const newValue = typeof valueOrUpdater === 'function' ? valueOrUpdater(property.value) : valueOrUpdater;
67
61
  property.value = newValue;
68
62
  }
69
63
  }, [property, path]);
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useState","useMemo","useRiveProperty","viewModelInstance","path","options","value","setValue","undefined","error","setError","property","getProperty","Error","onPropertyEventOverride","addListener","newValue","removeListeners","dispose","setPropertyValue"],"sourceRoot":"../../../src","sources":["hooks/useRiveProperty.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,OAAO,QAAQ,OAAO;AAOjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,iBAAuD,EACvDC,IAAY,EACZC,OAKC,EACiE;EAClE,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGP,QAAQ,CAAgBQ,SAAS,CAAC;EAC5D,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGV,QAAQ,CAAe,IAAI,CAAC;;EAEtD;EACAD,SAAS,CAAC,MAAM;IACdW,QAAQ,CAAC,IAAI,CAAC;EAChB,CAAC,EAAE,CAACN,IAAI,EAAED,iBAAiB,CAAC,CAAC;;EAE7B;EACA,MAAMQ,QAAQ,GAAGV,OAAO,CAAC,MAAM;IAC7B,IAAI,CAACE,iBAAiB,EAAE;IACxB,OAAOE,OAAO,CAACO,WAAW,CACxBT,iBAAiB,EACjBC,IACF,CAAC;EACH,CAAC,EAAE,CAACC,OAAO,EAAEF,iBAAiB,EAAEC,IAAI,CAAC,CAAC;;EAEtC;EACAL,SAAS,CAAC,MAAM;IACd,IAAII,iBAAiB,IAAI,CAACQ,QAAQ,EAAE;MAClCD,QAAQ,CACN,IAAIG,KAAK,CAAC,aAAaT,IAAI,uCAAuC,CACpE,CAAC;IACH;EACF,CAAC,EAAE,CAACD,iBAAiB,EAAEQ,QAAQ,EAAEP,IAAI,CAAC,CAAC;;EAEvC;EACAL,SAAS,CAAC,MAAM;IACd,IAAI,CAACY,QAAQ,EAAE;;IAEf;IACA;IACA,IAAIN,OAAO,CAACS,uBAAuB,EAAE;MACnCH,QAAQ,CAACI,WAAW,CAACV,OAAO,CAACS,uBAAuB,CAAC;IACvD,CAAC,MAAM;MACLH,QAAQ,CAACI,WAAW,CAAEC,QAAQ,IAAK;QACjCT,QAAQ,CAACS,QAAQ,CAAC;MACpB,CAAC,CAAC;IACJ;;IAEA;IACA;IACA,OAAO,MAAM;MACXL,QAAQ,CAACM,eAAe,CAAC,CAAC;MAC1BN,QAAQ,CAACO,OAAO,CAAC,CAAC;IACpB,CAAC;EACH,CAAC,EAAE,CAACb,OAAO,EAAEM,QAAQ,CAAC,CAAC;;EAEvB;EACA,MAAMQ,gBAAgB,GAAGrB,WAAW,CACjCkB,QAAW,IAAK;IACf,IAAI,CAACL,QAAQ,EAAE;MACbD,QAAQ,CACN,IAAIG,KAAK,CACP,kCAAkCT,IAAI,sGACxC,CACF,CAAC;IACH,CAAC,MAAM;MACLO,QAAQ,CAACL,KAAK,GAAGU,QAAQ;IAC3B;EACF,CAAC,EACD,CAACL,QAAQ,EAAEP,IAAI,CACjB,CAAC;EAED,OAAO,CAACE,KAAK,EAAEa,gBAAgB,EAAEV,KAAK,EAAEE,QAAQ,CAAiB;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useState","useMemo","useRiveProperty","viewModelInstance","path","options","value","setValue","undefined","error","setError","property","getProperty","Error","removeListener","onPropertyEventOverride","addListener","newValue","dispose","setPropertyValue","valueOrUpdater"],"sourceRoot":"../../../src","sources":["hooks/useRiveProperty.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,OAAO,QAAQ,OAAO;AAOjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,iBAAuD,EACvDC,IAAY,EACZC,OAKC,EAMD;EACA,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGP,QAAQ,CAAgBQ,SAAS,CAAC;EAC5D,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGV,QAAQ,CAAe,IAAI,CAAC;;EAEtD;EACAD,SAAS,CAAC,MAAM;IACdW,QAAQ,CAAC,IAAI,CAAC;EAChB,CAAC,EAAE,CAACN,IAAI,EAAED,iBAAiB,CAAC,CAAC;;EAE7B;EACA,MAAMQ,QAAQ,GAAGV,OAAO,CAAC,MAAM;IAC7B,IAAI,CAACE,iBAAiB,EAAE;IACxB,OAAOE,OAAO,CAACO,WAAW,CACxBT,iBAAiB,EACjBC,IACF,CAAC;EACH,CAAC,EAAE,CAACC,OAAO,EAAEF,iBAAiB,EAAEC,IAAI,CAAC,CAAC;;EAEtC;EACAL,SAAS,CAAC,MAAM;IACd,IAAII,iBAAiB,IAAI,CAACQ,QAAQ,EAAE;MAClCD,QAAQ,CACN,IAAIG,KAAK,CAAC,aAAaT,IAAI,uCAAuC,CACpE,CAAC;IACH;EACF,CAAC,EAAE,CAACD,iBAAiB,EAAEQ,QAAQ,EAAEP,IAAI,CAAC,CAAC;;EAEvC;EACAL,SAAS,CAAC,MAAM;IACd,IAAI,CAACY,QAAQ,EAAE;;IAEf;IACA;IACA,MAAMG,cAAc,GAAGT,OAAO,CAACU,uBAAuB,GAClDJ,QAAQ,CAACK,WAAW,CAACX,OAAO,CAACU,uBAAuB,CAAC,GACrDJ,QAAQ,CAACK,WAAW,CAAEC,QAAQ,IAAK;MACjCV,QAAQ,CAACU,QAAQ,CAAC;IACpB,CAAC,CAAC;IAEN,OAAO,MAAM;MACXH,cAAc,CAAC,CAAC;MAChBH,QAAQ,CAACO,OAAO,CAAC,CAAC;IACpB,CAAC;EACH,CAAC,EAAE,CAACb,OAAO,EAAEM,QAAQ,CAAC,CAAC;;EAEvB;EACA,MAAMQ,gBAAgB,GAAGrB,WAAW,CACjCsB,cAAqD,IAAK;IACzD,IAAI,CAACT,QAAQ,EAAE;MACbD,QAAQ,CACN,IAAIG,KAAK,CACP,kCAAkCT,IAAI,sGACxC,CACF,CAAC;IACH,CAAC,MAAM;MACL,MAAMa,QAAQ,GACZ,OAAOG,cAAc,KAAK,UAAU,GAC/BA,cAAc,CACbT,QAAQ,CAACL,KACX,CAAC,GACDc,cAAc;MACpBT,QAAQ,CAACL,KAAK,GAAGW,QAAQ;IAC3B;EACF,CAAC,EACD,CAACN,QAAQ,EAAEP,IAAI,CACjB,CAAC;EAED,OAAO,CAACE,KAAK,EAAEa,gBAAgB,EAAEV,KAAK,EAAEE,QAAQ,CAAiB;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}