@rive-app/react-native 0.1.1-beta.1 → 0.1.2
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/BaseHybridViewModelProperty.kt +9 -7
- package/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelPropertyImpl.kt +43 -24
- package/android/src/main/java/com/margelo/nitro/rive/HybridRiveFile.kt +0 -1
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt +3 -2
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt +3 -2
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt +3 -2
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelImageProperty.kt +3 -2
- 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/android/src/main/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt +3 -2
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt +3 -2
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelTriggerProperty.kt +3 -2
- package/ios/BaseHybridViewModelProperty.swift +22 -6
- package/ios/HybridViewModel.swift +1 -6
- package/ios/HybridViewModelBooleanProperty.swift +1 -9
- package/ios/HybridViewModelColorProperty.swift +3 -12
- package/ios/HybridViewModelEnumProperty.swift +1 -9
- package/ios/HybridViewModelImageProperty.swift +4 -4
- package/ios/HybridViewModelInstance.swift +6 -6
- package/ios/HybridViewModelListProperty.swift +62 -0
- package/ios/HybridViewModelNumberProperty.swift +2 -13
- package/ios/HybridViewModelStringProperty.swift +1 -9
- package/ios/HybridViewModelTriggerProperty.swift +5 -14
- package/ios/RiveReactNativeView.swift +36 -0
- package/lib/module/hooks/useRiveColor.js +0 -1
- package/lib/module/hooks/useRiveColor.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/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 +39 -15
- 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++/JHybridViewModelBooleanPropertySpec.cpp +14 -4
- package/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp +1 -1
- package/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp +14 -4
- package/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp +1 -1
- package/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp +14 -4
- package/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp +1 -1
- package/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp +15 -6
- package/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp +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/c++/JHybridViewModelNumberPropertySpec.cpp +14 -4
- package/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp +1 -1
- package/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp +14 -4
- package/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp +1 -1
- package/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp +12 -3
- package/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt +3 -3
- 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/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt +3 -3
- package/nitrogen/generated/android/rive+autolinking.cmake +2 -0
- package/nitrogen/generated/android/riveOnLoad.cpp +4 -74
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp +53 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Umbrella.hpp +5 -0
- package/nitrogen/generated/ios/RNRiveAutolinking.mm +0 -72
- package/nitrogen/generated/ios/RNRiveAutolinking.swift +0 -135
- package/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.hpp +3 -1
- package/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.hpp +3 -1
- package/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.hpp +3 -1
- package/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.hpp +3 -1
- 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/c++/HybridViewModelNumberPropertySpecSwift.hpp +3 -1
- package/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.hpp +3 -1
- package/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.hpp +3 -1
- package/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec_cxx.swift +8 -4
- package/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec_cxx.swift +8 -4
- package/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec_cxx.swift +8 -4
- package/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec_cxx.swift +8 -4
- 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/ios/swift/HybridViewModelNumberPropertySpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec_cxx.swift +8 -4
- package/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec_cxx.swift +8 -4
- package/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec_cxx.swift +8 -4
- package/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.hpp +1 -1
- 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/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.hpp +1 -1
- package/package.json +3 -3
- package/src/hooks/useRiveColor.ts +7 -4
- package/src/hooks/useRiveList.ts +108 -0
- package/src/hooks/useRiveProperty.ts +20 -13
- package/src/hooks/useViewModelInstance.ts +195 -0
- package/src/index.tsx +4 -0
- package/src/specs/ViewModel.nitro.ts +43 -15
- package/src/types.tsx +58 -3
|
@@ -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
|
+
}
|
|
@@ -9,14 +9,6 @@ class HybridViewModelNumberProperty: HybridViewModelNumberPropertySpec, ValuedPr
|
|
|
9
9
|
super.init()
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
/// ⚠️ DO NOT REMOVE
|
|
13
|
-
/// Nitro requires a parameterless initializer for JS bridging.
|
|
14
|
-
/// This is invoked automatically during hybrid module construction.
|
|
15
|
-
/// Internally we always use `init(property:)`
|
|
16
|
-
override init() {
|
|
17
|
-
super.init()
|
|
18
|
-
}
|
|
19
|
-
|
|
20
12
|
var value: Double {
|
|
21
13
|
get {
|
|
22
14
|
return Double(property.value)
|
|
@@ -26,10 +18,7 @@ class HybridViewModelNumberProperty: HybridViewModelNumberPropertySpec, ValuedPr
|
|
|
26
18
|
}
|
|
27
19
|
}
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
helper.addListener { (value: Float) in
|
|
32
|
-
onChanged(Double(value))
|
|
33
|
-
}
|
|
21
|
+
func addListener(onChanged: @escaping (Double) -> Void) throws -> () -> Void {
|
|
22
|
+
return helper.addListener({ floatValue in onChanged(Double(floatValue)) })
|
|
34
23
|
}
|
|
35
24
|
}
|
|
@@ -9,15 +9,7 @@ class HybridViewModelStringProperty: HybridViewModelStringPropertySpec, ValuedPr
|
|
|
9
9
|
self.property = property
|
|
10
10
|
super.init()
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
/// ⚠️ DO NOT REMOVE
|
|
14
|
-
/// Nitro requires a parameterless initializer for JS bridging.
|
|
15
|
-
/// This is invoked automatically during hybrid module construction.
|
|
16
|
-
/// Internally we always use `init(property:)`
|
|
17
|
-
override init() {
|
|
18
|
-
super.init()
|
|
19
|
-
}
|
|
20
|
-
|
|
12
|
+
|
|
21
13
|
var value: String {
|
|
22
14
|
get {
|
|
23
15
|
return property.value
|
|
@@ -4,27 +4,18 @@ import RiveRuntime
|
|
|
4
4
|
class HybridViewModelTriggerProperty: HybridViewModelTriggerPropertySpec, ValuedPropertyProtocol {
|
|
5
5
|
internal var property: TriggerPropertyType!
|
|
6
6
|
lazy var helper = PropertyListenerHelper(property: property!)
|
|
7
|
-
|
|
8
7
|
private var listenerIds: [UUID] = []
|
|
9
8
|
|
|
10
|
-
func addListener(onChanged: @escaping () -> Void) throws {
|
|
11
|
-
try addListener(onChanged: { _ in onChanged() })
|
|
12
|
-
}
|
|
13
|
-
|
|
14
9
|
init(property: TriggerPropertyType) {
|
|
15
10
|
self.property = property
|
|
16
11
|
super.init()
|
|
17
12
|
}
|
|
18
|
-
|
|
19
|
-
/// ⚠️ DO NOT REMOVE
|
|
20
|
-
/// Nitro requires a parameterless initializer for JS bridging.
|
|
21
|
-
/// This is invoked automatically during hybrid module construction.
|
|
22
|
-
/// Internally we always use `init(property:)`
|
|
23
|
-
override init() {
|
|
24
|
-
super.init()
|
|
25
|
-
}
|
|
26
|
-
|
|
13
|
+
|
|
27
14
|
func trigger() {
|
|
28
15
|
property.trigger()
|
|
29
16
|
}
|
|
17
|
+
|
|
18
|
+
func addListener(onChanged: @escaping () -> Void) throws -> () -> Void {
|
|
19
|
+
try addListener(onChanged: { _ in onChanged() })
|
|
20
|
+
}
|
|
30
21
|
}
|
|
@@ -58,6 +58,8 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
|
|
|
58
58
|
func configure(_ config: ViewConfiguration, dataBindingChanged: Bool = false, reload: Bool = false, initialUpdate: Bool = false) throws {
|
|
59
59
|
if reload {
|
|
60
60
|
cleanup()
|
|
61
|
+
try validateConfiguration(config)
|
|
62
|
+
|
|
61
63
|
let model = RiveModel(riveFile: config.riveFile)
|
|
62
64
|
baseViewModel = RiveViewModel(model, stateMachineName: config.stateMachineName, autoPlay: config.autoPlay, artboardName: config.artboardName)
|
|
63
65
|
createViewFromViewModel()
|
|
@@ -322,4 +324,38 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
|
|
|
322
324
|
|
|
323
325
|
return try onSuccess(input)
|
|
324
326
|
}
|
|
327
|
+
|
|
328
|
+
private func validateConfiguration(_ config: ViewConfiguration) throws {
|
|
329
|
+
try validateArtboardName(config.artboardName, in: config.riveFile)
|
|
330
|
+
try validateStateMachineName(config.stateMachineName, artboardName: config.artboardName, in: config.riveFile)
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
private func validateArtboardName(_ artboardName: String?, in riveFile: RiveFile) throws {
|
|
334
|
+
guard let artboardName = artboardName else { return }
|
|
335
|
+
let artboardNames = riveFile.artboardNames()
|
|
336
|
+
if !artboardNames.contains(artboardName) {
|
|
337
|
+
throw NSError(
|
|
338
|
+
domain: RiveErrorDomain,
|
|
339
|
+
code: Int(RiveErrorCode.noArtboardFound.rawValue),
|
|
340
|
+
userInfo: [NSLocalizedDescriptionKey: "Artboard '\(artboardName)' not found. Available: \(artboardNames.joined(separator: ", "))"]
|
|
341
|
+
)
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
private func validateStateMachineName(_ stateMachineName: String?, artboardName: String?, in riveFile: RiveFile) throws {
|
|
346
|
+
guard let stateMachineName = stateMachineName else { return }
|
|
347
|
+
let artboard = artboardName != nil
|
|
348
|
+
? try? riveFile.artboard(fromName: artboardName!)
|
|
349
|
+
: try? riveFile.artboard()
|
|
350
|
+
|
|
351
|
+
guard let artboard = artboard else { return }
|
|
352
|
+
let stateMachineNames = artboard.stateMachineNames()
|
|
353
|
+
if !stateMachineNames.contains(stateMachineName) {
|
|
354
|
+
throw NSError(
|
|
355
|
+
domain: RiveErrorDomain,
|
|
356
|
+
code: Int(RiveErrorCode.noStateMachineFound.rawValue),
|
|
357
|
+
userInfo: [NSLocalizedDescriptionKey: "State machine '\(stateMachineName)' not found. Available: \(stateMachineNames.joined(separator: ", "))"]
|
|
358
|
+
)
|
|
359
|
+
}
|
|
360
|
+
}
|
|
325
361
|
}
|
|
@@ -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":[]}
|
|
@@ -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":[]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo, useEffect, useRef } from 'react';
|
|
4
|
+
import { callDispose } from "../core/callDispose.js";
|
|
5
|
+
function isRiveViewRef(source) {
|
|
6
|
+
return source !== null && source !== undefined && 'getViewModelInstance' in source;
|
|
7
|
+
}
|
|
8
|
+
function isRiveFile(source) {
|
|
9
|
+
return source !== null && source !== undefined && 'defaultArtboardViewModel' in source;
|
|
10
|
+
}
|
|
11
|
+
function createInstance(source, name, useNew) {
|
|
12
|
+
if (!source) {
|
|
13
|
+
return {
|
|
14
|
+
instance: null,
|
|
15
|
+
needsDispose: false
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (isRiveViewRef(source)) {
|
|
19
|
+
const vmi = source.getViewModelInstance();
|
|
20
|
+
return {
|
|
21
|
+
instance: vmi ?? null,
|
|
22
|
+
needsDispose: false
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (isRiveFile(source)) {
|
|
26
|
+
const viewModel = source.defaultArtboardViewModel();
|
|
27
|
+
const vmi = viewModel?.createDefaultInstance();
|
|
28
|
+
return {
|
|
29
|
+
instance: vmi ?? null,
|
|
30
|
+
needsDispose: true
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ViewModel source
|
|
35
|
+
let vmi;
|
|
36
|
+
if (name) {
|
|
37
|
+
vmi = source.createInstanceByName(name);
|
|
38
|
+
} else if (useNew) {
|
|
39
|
+
vmi = source.createInstance();
|
|
40
|
+
} else {
|
|
41
|
+
vmi = source.createDefaultInstance();
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
instance: vmi ?? null,
|
|
45
|
+
needsDispose: true
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Hook for getting a ViewModelInstance from a RiveFile, ViewModel, or RiveViewRef.
|
|
51
|
+
*
|
|
52
|
+
* @param source - The RiveFile, ViewModel, or RiveViewRef to get an instance from
|
|
53
|
+
* @param params - Configuration for which instance to retrieve (only used with ViewModel)
|
|
54
|
+
* @returns The ViewModelInstance or null if not found
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* // From RiveFile (get default instance)
|
|
59
|
+
* const { riveFile } = useRiveFile(require('./animation.riv'));
|
|
60
|
+
* const instance = useViewModelInstance(riveFile);
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```tsx
|
|
65
|
+
* // From RiveViewRef (get auto-bound instance)
|
|
66
|
+
* const { riveViewRef, setHybridRef } = useRive();
|
|
67
|
+
* const instance = useViewModelInstance(riveViewRef);
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* // From ViewModel
|
|
73
|
+
* const viewModel = file.viewModelByName('main');
|
|
74
|
+
* const instance = useViewModelInstance(viewModel);
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```tsx
|
|
79
|
+
* // Create a new blank instance from ViewModel
|
|
80
|
+
* const viewModel = file.viewModelByName('TodoItem');
|
|
81
|
+
* const newInstance = useViewModelInstance(viewModel, { useNew: true });
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```tsx
|
|
86
|
+
* // With required: true (throws if null, use with Error Boundary)
|
|
87
|
+
* const instance = useViewModelInstance(riveFile, { required: true });
|
|
88
|
+
* // instance is guaranteed to be non-null here
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```tsx
|
|
93
|
+
* // With onInit to set initial values synchronously
|
|
94
|
+
* const instance = useViewModelInstance(riveFile, {
|
|
95
|
+
* onInit: (vmi) => {
|
|
96
|
+
* vmi.numberProperty('count').set(initialCount);
|
|
97
|
+
* vmi.stringProperty('name').set(userName);
|
|
98
|
+
* }
|
|
99
|
+
* });
|
|
100
|
+
* // Values are already set here
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
export function useViewModelInstance(source, params) {
|
|
105
|
+
const name = params?.name;
|
|
106
|
+
const useNew = params?.useNew ?? false;
|
|
107
|
+
const required = params?.required ?? false;
|
|
108
|
+
const onInit = params?.onInit;
|
|
109
|
+
const prevInstanceRef = useRef(null);
|
|
110
|
+
const result = useMemo(() => {
|
|
111
|
+
const created = createInstance(source, name, useNew);
|
|
112
|
+
if (created.instance && onInit) {
|
|
113
|
+
onInit(created.instance);
|
|
114
|
+
}
|
|
115
|
+
return created;
|
|
116
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- onInit excluded intentionally
|
|
117
|
+
}, [source, name, useNew]);
|
|
118
|
+
|
|
119
|
+
// Dispose previous instance if it changed and needed disposal
|
|
120
|
+
if (prevInstanceRef.current && prevInstanceRef.current.instance !== result.instance && prevInstanceRef.current.needsDispose && prevInstanceRef.current.instance) {
|
|
121
|
+
callDispose(prevInstanceRef.current.instance);
|
|
122
|
+
}
|
|
123
|
+
prevInstanceRef.current = result;
|
|
124
|
+
|
|
125
|
+
// Cleanup on unmount
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
return () => {
|
|
128
|
+
if (prevInstanceRef.current?.needsDispose && prevInstanceRef.current.instance) {
|
|
129
|
+
callDispose(prevInstanceRef.current.instance);
|
|
130
|
+
prevInstanceRef.current = null;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}, []);
|
|
134
|
+
if (required && result.instance === null) {
|
|
135
|
+
throw new Error('useViewModelInstance: Failed to get ViewModelInstance. ' + 'Ensure the source has a valid ViewModel and instance available.');
|
|
136
|
+
}
|
|
137
|
+
return result.instance;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=useViewModelInstance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useEffect","useRef","callDispose","isRiveViewRef","source","undefined","isRiveFile","createInstance","name","useNew","instance","needsDispose","vmi","getViewModelInstance","viewModel","defaultArtboardViewModel","createDefaultInstance","createInstanceByName","useViewModelInstance","params","required","onInit","prevInstanceRef","result","created","current","Error"],"sourceRoot":"../../../src","sources":["hooks/useViewModelInstance.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -23,6 +23,8 @@ export { useRiveBoolean } from "./hooks/useRiveBoolean.js";
|
|
|
23
23
|
export { useRiveEnum } from "./hooks/useRiveEnum.js";
|
|
24
24
|
export { useRiveColor } from "./hooks/useRiveColor.js";
|
|
25
25
|
export { useRiveTrigger } from "./hooks/useRiveTrigger.js";
|
|
26
|
+
export { useRiveList } from "./hooks/useRiveList.js";
|
|
27
|
+
export { useViewModelInstance } from "./hooks/useViewModelInstance.js";
|
|
26
28
|
export { useRiveFile } from "./hooks/useRiveFile.js";
|
|
27
29
|
export { DataBindMode };
|
|
28
30
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DataBindMode","DataBindByName","constructor","name","byName","NitroRiveView","RiveView","Fit","Alignment","RiveFileFactory","RiveImages","RiveColor","RiveEventType","RiveErrorType","ArtboardByIndex","ArtboardByName","useRive","useRiveNumber","useRiveString","useRiveBoolean","useRiveEnum","useRiveColor","useRiveTrigger","useRiveFile"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,SAIEA,YAAY,QAEP,2BAAwB;AAE/B,OAAO,MAAMC,cAAc,CAAoC;EAE7DC,WAAWA,CAACC,IAAY,EAAE;IACxB,IAAI,CAACC,MAAM,GAAGD,IAAI;EACpB;AACF;AAEA,SAASE,aAAa,QAAQ,kCAA+B;AAE7D,SAASC,QAAQ,QAA4B,oBAAiB;
|
|
1
|
+
{"version":3,"names":["DataBindMode","DataBindByName","constructor","name","byName","NitroRiveView","RiveView","Fit","Alignment","RiveFileFactory","RiveImages","RiveColor","RiveEventType","RiveErrorType","ArtboardByIndex","ArtboardByName","useRive","useRiveNumber","useRiveString","useRiveBoolean","useRiveEnum","useRiveColor","useRiveTrigger","useRiveList","useViewModelInstance","useRiveFile"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,SAIEA,YAAY,QAEP,2BAAwB;AAE/B,OAAO,MAAMC,cAAc,CAAoC;EAE7DC,WAAWA,CAACC,IAAY,EAAE;IACxB,IAAI,CAACC,MAAM,GAAGD,IAAI;EACpB;AACF;AAEA,SAASE,aAAa,QAAQ,kCAA+B;AAE7D,SAASC,QAAQ,QAA4B,oBAAiB;AAgB9D,SAASC,GAAG,QAAQ,eAAY;AAChC,SAASC,SAAS,QAAQ,qBAAkB;AAC5C,SAASC,eAAe,QAAQ,oBAAiB;AACjD,SAASC,UAAU,QAAQ,sBAAmB;AAE9C,SAASC,SAAS,QAAQ,qBAAkB;AAC5C,SAAyBC,aAAa,QAAQ,kBAAe;AAC7D,SAAyBC,aAAa,QAAQ,kBAAe;AAC7D,SAASC,eAAe,EAAEC,cAAc,QAAQ,uBAAoB;AACpE,SAASC,OAAO,QAAQ,oBAAiB;AACzC,SAASC,aAAa,QAAQ,0BAAuB;AACrD,SAASC,aAAa,QAAQ,0BAAuB;AACrD,SAASC,cAAc,QAAQ,2BAAwB;AACvD,SAASC,WAAW,QAAQ,wBAAqB;AACjD,SAASC,YAAY,QAAQ,yBAAsB;AACnD,SAASC,cAAc,QAAQ,2BAAwB;AACvD,SAASC,WAAW,QAAQ,wBAAqB;AACjD,SAASC,oBAAoB,QAAQ,iCAA8B;AACnE,SAASC,WAAW,QAAQ,wBAAqB;AAGjD,SAASzB,YAAY","ignoreList":[]}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { ViewModelInstance } from '../specs/ViewModel.nitro';
|
|
2
|
-
import { type UseRivePropertyResult } from '../types';
|
|
3
2
|
import { RiveColor } from '../core/RiveColor';
|
|
3
|
+
export interface UseRiveColorResult {
|
|
4
|
+
value: RiveColor | undefined;
|
|
5
|
+
setValue: (value: RiveColor | string) => void;
|
|
6
|
+
error: Error | null;
|
|
7
|
+
}
|
|
4
8
|
/**
|
|
5
9
|
* Hook for interacting with color ViewModel instance properties.
|
|
6
10
|
*
|
|
@@ -8,7 +12,5 @@ import { RiveColor } from '../core/RiveColor';
|
|
|
8
12
|
* @param viewModelInstance - The ViewModelInstance containing the color property to operate on
|
|
9
13
|
* @returns An object with the color value as RGBA, a setter function that accepts either RGBA or hex string, and an error if the property is not found
|
|
10
14
|
*/
|
|
11
|
-
export declare function useRiveColor(path: string, viewModelInstance?: ViewModelInstance | null):
|
|
12
|
-
setValue: (value: RiveColor | string) => void;
|
|
13
|
-
};
|
|
15
|
+
export declare function useRiveColor(path: string, viewModelInstance?: ViewModelInstance | null): UseRiveColorResult;
|
|
14
16
|
//# sourceMappingURL=useRiveColor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRiveColor.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useRiveColor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"useRiveColor.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useRiveColor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAM9C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAC3C,kBAAkB,CAqBpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ViewModelInstance } from '../specs/ViewModel.nitro';
|
|
2
|
+
import type { UseRiveListResult } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook for interacting with list ViewModel instance properties.
|
|
5
|
+
*
|
|
6
|
+
* @param path - The path to the list property
|
|
7
|
+
* @param viewModelInstance - The ViewModelInstance containing the list property
|
|
8
|
+
* @returns An object with list length, manipulation methods, and error state
|
|
9
|
+
*/
|
|
10
|
+
export declare function useRiveList(path: string, viewModelInstance?: ViewModelInstance | null): UseRiveListResult;
|
|
11
|
+
//# sourceMappingURL=useRiveList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRiveList.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useRiveList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAC3C,iBAAiB,CA6FnB"}
|
|
@@ -18,5 +18,10 @@ export declare function useRiveProperty<P extends ViewModelProperty, T>(viewMode
|
|
|
18
18
|
getProperty: (vm: ViewModelInstance, path: string) => P | undefined;
|
|
19
19
|
/** Optional override callback for property events (mainly used by triggers) */
|
|
20
20
|
onPropertyEventOverride?: (...args: any[]) => void;
|
|
21
|
-
}): [
|
|
21
|
+
}): [
|
|
22
|
+
T | undefined,
|
|
23
|
+
(value: T | ((prevValue: T | undefined) => T)) => void,
|
|
24
|
+
Error | null,
|
|
25
|
+
P | undefined
|
|
26
|
+
];
|
|
22
27
|
//# sourceMappingURL=useRiveProperty.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRiveProperty.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useRiveProperty.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,EAC5D,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EACvD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,4DAA4D;IAC5D,WAAW,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;IACpE,+EAA+E;IAC/E,uBAAuB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACpD,GACA,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"useRiveProperty.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useRiveProperty.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,EAC5D,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EACvD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,4DAA4D;IAC5D,WAAW,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;IACpE,+EAA+E;IAC/E,uBAAuB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACpD,GACA;IACD,CAAC,GAAG,SAAS;IACb,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,KAAK,IAAI;IACtD,KAAK,GAAG,IAAI;IACZ,CAAC,GAAG,SAAS;CACd,CAoEA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { ViewModel, ViewModelInstance } from '../specs/ViewModel.nitro';
|
|
2
|
+
import type { RiveFile } from '../specs/RiveFile.nitro';
|
|
3
|
+
import type { RiveViewRef } from '../index';
|
|
4
|
+
export interface UseViewModelInstanceParams {
|
|
5
|
+
/**
|
|
6
|
+
* Get a specifically named instance from the ViewModel.
|
|
7
|
+
*/
|
|
8
|
+
name?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Create a new (blank) instance from the ViewModel.
|
|
11
|
+
*/
|
|
12
|
+
useNew?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* If true, throws an error when the instance cannot be obtained.
|
|
15
|
+
* This is useful with Error Boundaries and ensures TypeScript knows
|
|
16
|
+
* the return value is non-null.
|
|
17
|
+
*/
|
|
18
|
+
required?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Called synchronously when a new instance is created, before the hook returns.
|
|
21
|
+
* Use this to set initial values that need to be available immediately.
|
|
22
|
+
* Note: This callback is excluded from deps - changing it won't recreate the instance.
|
|
23
|
+
*/
|
|
24
|
+
onInit?: (instance: ViewModelInstance) => void;
|
|
25
|
+
}
|
|
26
|
+
type ViewModelSource = ViewModel | RiveFile | RiveViewRef;
|
|
27
|
+
/**
|
|
28
|
+
* Hook for getting a ViewModelInstance from a RiveFile, ViewModel, or RiveViewRef.
|
|
29
|
+
*
|
|
30
|
+
* @param source - The RiveFile, ViewModel, or RiveViewRef to get an instance from
|
|
31
|
+
* @param params - Configuration for which instance to retrieve (only used with ViewModel)
|
|
32
|
+
* @returns The ViewModelInstance or null if not found
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```tsx
|
|
36
|
+
* // From RiveFile (get default instance)
|
|
37
|
+
* const { riveFile } = useRiveFile(require('./animation.riv'));
|
|
38
|
+
* const instance = useViewModelInstance(riveFile);
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* // From RiveViewRef (get auto-bound instance)
|
|
44
|
+
* const { riveViewRef, setHybridRef } = useRive();
|
|
45
|
+
* const instance = useViewModelInstance(riveViewRef);
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* // From ViewModel
|
|
51
|
+
* const viewModel = file.viewModelByName('main');
|
|
52
|
+
* const instance = useViewModelInstance(viewModel);
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```tsx
|
|
57
|
+
* // Create a new blank instance from ViewModel
|
|
58
|
+
* const viewModel = file.viewModelByName('TodoItem');
|
|
59
|
+
* const newInstance = useViewModelInstance(viewModel, { useNew: true });
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* // With required: true (throws if null, use with Error Boundary)
|
|
65
|
+
* const instance = useViewModelInstance(riveFile, { required: true });
|
|
66
|
+
* // instance is guaranteed to be non-null here
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* // With onInit to set initial values synchronously
|
|
72
|
+
* const instance = useViewModelInstance(riveFile, {
|
|
73
|
+
* onInit: (vmi) => {
|
|
74
|
+
* vmi.numberProperty('count').set(initialCount);
|
|
75
|
+
* vmi.stringProperty('name').set(userName);
|
|
76
|
+
* }
|
|
77
|
+
* });
|
|
78
|
+
* // Values are already set here
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function useViewModelInstance(source: ViewModelSource, params: UseViewModelInstanceParams & {
|
|
82
|
+
required: true;
|
|
83
|
+
}): ViewModelInstance;
|
|
84
|
+
export declare function useViewModelInstance(source: ViewModelSource | null, params?: UseViewModelInstanceParams): ViewModelInstance | null;
|
|
85
|
+
export {};
|
|
86
|
+
//# sourceMappingURL=useViewModelInstance.d.ts.map
|