@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.
- package/README.md +18 -7
- package/android/src/main/java/com/margelo/nitro/rive/HybridRiveFile.kt +0 -1
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelInstance.kt +26 -47
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelListProperty.kt +64 -0
- package/ios/BaseHybridViewModelProperty.swift +9 -0
- package/ios/HybridViewModelInstance.swift +5 -0
- package/ios/HybridViewModelListProperty.swift +62 -0
- package/lib/module/hooks/useRiveColor.js +0 -1
- package/lib/module/hooks/useRiveColor.js.map +1 -1
- package/lib/module/hooks/useRiveFile.js +9 -2
- package/lib/module/hooks/useRiveFile.js.map +1 -1
- package/lib/module/hooks/useRiveList.js +71 -0
- package/lib/module/hooks/useRiveList.js.map +1 -0
- package/lib/module/hooks/useRiveProperty.js +6 -12
- package/lib/module/hooks/useRiveProperty.js.map +1 -1
- package/lib/module/hooks/useViewModelInstance.js +139 -0
- package/lib/module/hooks/useViewModelInstance.js.map +1 -0
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/hooks/useRiveColor.d.ts +6 -4
- package/lib/typescript/src/hooks/useRiveColor.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRiveFile.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRiveList.d.ts +11 -0
- package/lib/typescript/src/hooks/useRiveList.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveProperty.d.ts +6 -1
- package/lib/typescript/src/hooks/useRiveProperty.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useViewModelInstance.d.ts +86 -0
- package/lib/typescript/src/hooks/useViewModelInstance.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/ViewModel.nitro.d.ts +24 -0
- package/lib/typescript/src/specs/ViewModel.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +47 -3
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp +9 -0
- package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp +1 -0
- package/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.cpp +102 -0
- package/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp +73 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt +4 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt +92 -0
- package/nitrogen/generated/android/rive+autolinking.cmake +2 -0
- package/nitrogen/generated/android/riveOnLoad.cpp +2 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp +44 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Umbrella.hpp +5 -0
- package/nitrogen/generated/ios/c++/HybridViewModelInstanceSpecSwift.hpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelListPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelListPropertySpecSwift.hpp +134 -0
- package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec_cxx.swift +21 -0
- package/nitrogen/generated/ios/swift/HybridViewModelListPropertySpec.swift +63 -0
- package/nitrogen/generated/ios/swift/HybridViewModelListPropertySpec_cxx.swift +248 -0
- package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.hpp +4 -0
- package/nitrogen/generated/shared/c++/HybridViewModelListPropertySpec.cpp +30 -0
- package/nitrogen/generated/shared/c++/HybridViewModelListPropertySpec.hpp +76 -0
- package/package.json +7 -3
- package/src/hooks/useRiveColor.ts +7 -4
- package/src/hooks/useRiveFile.ts +14 -2
- package/src/hooks/useRiveList.ts +108 -0
- package/src/hooks/useRiveProperty.ts +19 -12
- package/src/hooks/useViewModelInstance.ts +195 -0
- package/src/index.tsx +4 -0
- package/src/specs/ViewModel.nitro.ts +28 -0
- package/src/types.tsx +58 -3
package/README.md
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
# @rive-app/react-native
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/rive-app/rive-nitro-react-native/actions)
|
|
4
|
+
[](https://www.npmjs.com/package/@rive-app/react-native)
|
|
5
|
+
[](https://www.npmjs.com/package/@rive-app/react-native)
|
|
6
|
+
[](https://reactnative.dev/)
|
|
7
|
+
[](#requirements)
|
|
8
|
+
[](#requirements)
|
|
9
|
+
[](https://github.com/rive-app/rive-ios/releases)
|
|
10
|
+
[](https://github.com/rive-app/rive-android/releases)
|
|
4
11
|
|
|
5
|
-
|
|
12
|
+
**Rive React Native 2.0**
|
|
6
13
|
|
|
7
|
-
|
|
14
|
+

|
|
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/
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
20
|
+
null
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
override fun
|
|
24
|
-
|
|
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
|
|
33
|
-
|
|
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
|
|
42
|
-
|
|
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
|
|
51
|
-
|
|
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
|
|
60
|
-
|
|
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
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
+
}
|
|
@@ -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;
|
|
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 =
|
|
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
|
-
}, [
|
|
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","
|
|
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":"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","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
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
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
|
-
|
|
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(
|
|
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","
|
|
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":[]}
|