diff --git a/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelProperty.kt b/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelProperty.kt index 1cadc666..1d8f4663 100644 --- a/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelProperty.kt @@ -9,12 +9,14 @@ import kotlinx.coroutines.flow.Flow @Keep @DoNotStrip interface BaseHybridViewModelProperty { - val scope: CoroutineScope? - val job: Job? - val listeners: MutableList<(T) -> Unit> + val scope: CoroutineScope? + val job: Job? + val listeners: MutableMap Unit> - fun ensureValueListenerJob(valueFlow: Flow, drop: Int = 0) - fun onChanged(value: T) - fun removeListeners() - fun dispose() + fun ensureValueListenerJob(valueFlow: Flow, drop: Int = 0) + fun onChanged(value: T) + fun addListenerInternal(callback: (T) -> Unit): () -> Unit + fun removeListener(id: String) + fun removeListeners() + fun dispose() } diff --git a/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelPropertyImpl.kt b/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelPropertyImpl.kt index 6ad3a968..39dbf76a 100644 --- a/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelPropertyImpl.kt +++ b/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelPropertyImpl.kt @@ -9,42 +9,61 @@ import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.drop +import java.lang.ref.WeakReference +import java.util.UUID @Keep @DoNotStrip class BaseHybridViewModelPropertyImpl : BaseHybridViewModelProperty { - override var scope: CoroutineScope? = null - override var job: Job? = null - override val listeners = mutableListOf<(T) -> Unit>() + override var scope: CoroutineScope? = null + override var job: Job? = null + override val listeners = mutableMapOf Unit>() override fun ensureValueListenerJob(valueFlow: Flow, drop: Int) { - if (scope == null) { - scope = CoroutineScope(Dispatchers.Default) - } - if (job == null) { - job = scope?.launch { - valueFlow.drop(drop).collect { value -> - onChanged(value) - } - } + if (scope == null) { + scope = CoroutineScope(Dispatchers.Default) + } + if (job == null) { + job = scope?.launch { + valueFlow.drop(drop).collect { value -> + onChanged(value) } + } } + } - override fun onChanged(value: T) { - listeners.forEach { listener -> - listener(value) - } + override fun onChanged(value: T) { + listeners.values.forEach { listener -> + listener(value) } + } - override fun removeListeners() { - listeners.clear() - job?.cancel() - scope?.cancel() - job = null - scope = null + override fun addListenerInternal(callback: (T) -> Unit): () -> Unit { + val id = UUID.randomUUID().toString() + listeners[id] = callback + val weakSelf = WeakReference(this) + return { + weakSelf.get()?.removeListener(id) } + } - override fun dispose() { - removeListeners() + override fun removeListener(id: String) { + listeners.remove(id) + if (listeners.isEmpty()) { + job?.cancel() + job = null } + } + + override fun removeListeners() { + listeners.clear() + job?.cancel() + scope?.cancel() + job = null + scope = null + } + + override fun dispose() { + removeListeners() + } } diff --git a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt index 85b43cd1..5a82de36 100644 --- a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt @@ -15,8 +15,9 @@ class HybridViewModelBooleanProperty(private val viewModelBoolean: ViewModelBool viewModelBoolean.value = value } - override fun addListener(onChanged: (value: Boolean) -> Unit) { - listeners.add(onChanged) + override fun addListener(onChanged: (value: Boolean) -> Unit): () -> Unit { + val remover = addListenerInternal(onChanged) ensureValueListenerJob(viewModelBoolean.valueFlow) + return remover } } diff --git a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt index 73e4cb94..9bd765f7 100644 --- a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt @@ -15,8 +15,9 @@ class HybridViewModelColorProperty(private val viewModelColor: ViewModelColorPro viewModelColor.value = value.toInt() } - override fun addListener(onChanged: (value: Double) -> Unit) { - listeners.add { intValue: Int -> onChanged(intValue.toDouble()) } + override fun addListener(onChanged: (value: Double) -> Unit): () -> Unit { + val remover = addListenerInternal { intValue: Int -> onChanged(intValue.toDouble()) } ensureValueListenerJob(viewModelColor.valueFlow) + return remover } } diff --git a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt index ae536e5c..ec7554bc 100644 --- a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt @@ -15,8 +15,9 @@ class HybridViewModelEnumProperty(private val viewModelEnum: ViewModelEnumProper viewModelEnum.value = value } - override fun addListener(onChanged: (value: String) -> Unit) { - listeners.add(onChanged) + override fun addListener(onChanged: (value: String) -> Unit): () -> Unit { + val remover = addListenerInternal(onChanged) ensureValueListenerJob(viewModelEnum.valueFlow) + return remover } } diff --git a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelImageProperty.kt b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelImageProperty.kt index e54f7de3..3504debb 100644 --- a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelImageProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelImageProperty.kt @@ -14,8 +14,9 @@ class HybridViewModelImageProperty(private val viewModelImage: ViewModelImagePro viewModelImage.set((image as? HybridRiveImage)?.renderImage) } - override fun addListener(onChanged: () -> Unit) { - listeners.add { _ -> onChanged() } + override fun addListener(onChanged: () -> Unit): () -> Unit { + val remover = addListenerInternal { _ -> onChanged() } ensureValueListenerJob(viewModelImage.valueFlow.map { }) + return remover } } diff --git a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt index a6753cf4..fc647ec1 100644 --- a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt @@ -16,8 +16,9 @@ class HybridViewModelNumberProperty(private val viewModelNumber: ViewModelNumber viewModelNumber.value = value.toFloat() } - override fun addListener(onChanged: (value: Double) -> Unit) { - listeners.add(onChanged) + override fun addListener(onChanged: (value: Double) -> Unit): () -> Unit { + val remover = addListenerInternal(onChanged) ensureValueListenerJob(viewModelNumber.valueFlow.map { it.toDouble() }) + return remover } } diff --git a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt index bdf783ca..02c69e8c 100644 --- a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt @@ -15,8 +15,9 @@ class HybridViewModelStringProperty(private val viewModelString: ViewModelString viewModelString.value = value } - override fun addListener(onChanged: (value: String) -> Unit) { - listeners.add(onChanged) + override fun addListener(onChanged: (value: String) -> Unit): () -> Unit { + val remover = addListenerInternal(onChanged) ensureValueListenerJob(viewModelString.valueFlow) + return remover } } diff --git a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelTriggerProperty.kt b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelTriggerProperty.kt index 9e95a652..b50dce55 100644 --- a/android/src/main/java/com/margelo/nitro/rive/HybridViewModelTriggerProperty.kt +++ b/android/src/main/java/com/margelo/nitro/rive/HybridViewModelTriggerProperty.kt @@ -13,9 +13,10 @@ class HybridViewModelTriggerProperty(private val viewModelTrigger: ViewModelTrig viewModelTrigger.trigger() } - override fun addListener(onChanged: () -> Unit) { - listeners.add { _ -> onChanged() } + override fun addListener(onChanged: () -> Unit): () -> Unit { + val remover = addListenerInternal { _ -> onChanged() } // We drop the first value as a trigger has no initial value ensureValueListenerJob(viewModelTrigger.valueFlow, 1) + return remover } } diff --git a/ios/BaseHybridViewModelProperty.swift b/ios/BaseHybridViewModelProperty.swift index 247f2b85..a37b8469 100644 --- a/ios/BaseHybridViewModelProperty.swift +++ b/ios/BaseHybridViewModelProperty.swift @@ -65,11 +65,18 @@ class PropertyListenerHelper { self.property = property } - /// Adds a listener to the property and automatically tracks its ID for cleanup - func addListener(_ callback: @escaping (PropertyType.ListenerValueType) -> Void) { - guard let property = property else { return } + /// Adds a listener to the property and returns a removal function for cleanup + func addListener(_ callback: @escaping (PropertyType.ListenerValueType) -> Void) -> () -> Void { + guard let property = property else { + return {} + } let id = property.addListener(callback) listenerIds.append(id) + return { [weak self, weak property] in + guard let property = property else { return } + property.removeListener(id) + self?.listenerIds.removeAll { $0 == id } + } } func removeListeners() throws { @@ -94,7 +101,7 @@ protocol ValuedPropertyProtocol { var property: PropertyType! { get } var helper: PropertyListenerHelper { get } - func addListener(onChanged: @escaping (ValueType) -> Void) throws + func addListener(onChanged: @escaping (ValueType) -> Void) throws -> () -> Void func removeListeners() throws func dispose() throws } @@ -112,7 +119,7 @@ extension ValuedPropertyProtocol { /// Automatic addListener() ONLY when ListenerValueType == ValueType (no conversion needed) extension ValuedPropertyProtocol where PropertyType.ListenerValueType == ValueType { - func addListener(onChanged: @escaping (ValueType) -> Void) throws { - helper.addListener(onChanged) // Types match, just forward directly! + func addListener(onChanged: @escaping (ValueType) -> Void) throws -> () -> Void { + return helper.addListener(onChanged) } } diff --git a/ios/HybridViewModelColorProperty.swift b/ios/HybridViewModelColorProperty.swift index c8bfba3b..ede2a4d0 100644 --- a/ios/HybridViewModelColorProperty.swift +++ b/ios/HybridViewModelColorProperty.swift @@ -27,9 +27,8 @@ class HybridViewModelColorProperty: HybridViewModelColorPropertySpec, ValuedProp } } - // Custom addListener because we need to convert UIColor → Double - func addListener(onChanged: @escaping (Double) -> Void) throws { - helper.addListener { (color: UIColor) in + func addListener(onChanged: @escaping (Double) -> Void) throws -> () -> Void { + return helper.addListener { (color: UIColor) in onChanged(color.toHexDouble()) } } diff --git a/ios/HybridViewModelImageProperty.swift b/ios/HybridViewModelImageProperty.swift index 22cd4e16..7140891f 100644 --- a/ios/HybridViewModelImageProperty.swift +++ b/ios/HybridViewModelImageProperty.swift @@ -1,13 +1,13 @@ import RiveRuntime class HybridViewModelImageProperty: HybridViewModelImagePropertySpec, ValuedPropertyProtocol { - func addListener(onChanged: @escaping () -> Void) throws { - try addListener(onChanged: { _ in onChanged() }) - } - var property: ImagePropertyType! lazy var helper = PropertyListenerHelper(property: property!) + func addListener(onChanged: @escaping () -> Void) throws -> () -> Void { + return helper.addListener { _ in onChanged() } + } + init(property: ImagePropertyType) { self.property = property super.init() diff --git a/ios/HybridViewModelNumberProperty.swift b/ios/HybridViewModelNumberProperty.swift index 97367801..ff0f45ff 100644 --- a/ios/HybridViewModelNumberProperty.swift +++ b/ios/HybridViewModelNumberProperty.swift @@ -26,10 +26,7 @@ class HybridViewModelNumberProperty: HybridViewModelNumberPropertySpec, ValuedPr } } - // Custom addListener needed because ListenerValueType (Float) != ValueType (Double) - func addListener(onChanged: @escaping (Double) -> Void) throws { - helper.addListener { (value: Float) in - onChanged(Double(value)) - } + func addListener(onChanged: @escaping (Double) -> Void) throws -> () -> Void { + return helper.addListener({ floatValue in onChanged(Double(floatValue)) }) } } diff --git a/ios/HybridViewModelTriggerProperty.swift b/ios/HybridViewModelTriggerProperty.swift index 92cc548c..5de89917 100644 --- a/ios/HybridViewModelTriggerProperty.swift +++ b/ios/HybridViewModelTriggerProperty.swift @@ -4,27 +4,18 @@ import RiveRuntime class HybridViewModelTriggerProperty: HybridViewModelTriggerPropertySpec, ValuedPropertyProtocol { internal var property: TriggerPropertyType! lazy var helper = PropertyListenerHelper(property: property!) - private var listenerIds: [UUID] = [] - func addListener(onChanged: @escaping () -> Void) throws { - try addListener(onChanged: { _ in onChanged() }) - } - init(property: TriggerPropertyType) { self.property = property super.init() } - - /// ⚠️ DO NOT REMOVE - /// Nitro requires a parameterless initializer for JS bridging. - /// This is invoked automatically during hybrid module construction. - /// Internally we always use `init(property:)` - override init() { - super.init() - } - + func trigger() { property.trigger() } + + func addListener(onChanged: @escaping () -> Void) throws -> () -> Void { + try addListener(onChanged: { _ in onChanged() }) + } } diff --git a/nitro.json b/nitro.json index f8630234..8e0836c1 100644 --- a/nitro.json +++ b/nitro.json @@ -49,10 +49,6 @@ "swift": "HybridViewModelEnumProperty", "kotlin": "HybridViewModelEnumProperty" }, - "ViewModelTriggerProperty": { - "swift": "HybridViewModelTriggerProperty", - "kotlin": "HybridViewModelTriggerProperty" - }, "ViewModelImageProperty": { "swift": "HybridViewModelImageProperty", "kotlin": "HybridViewModelImageProperty" diff --git a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp index 39b2935b..db27e20b 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp @@ -10,8 +10,9 @@ #include -#include "JFunc_void_bool.hpp" +#include "JFunc_void.hpp" #include +#include "JFunc_void_bool.hpp" namespace margelo::nitro::rive { @@ -53,9 +54,18 @@ namespace margelo::nitro::rive { } // Methods - void JHybridViewModelBooleanPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod /* onChanged */)>("addListener_cxx"); - method(_javaPart, JFunc_void_bool_cxx::fromCpp(onChanged)); + std::function JHybridViewModelBooleanPropertySpec::addListener(const std::function& onChanged) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(onChanged)); + return [&]() -> std::function { + if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(__result); + return downcast->cthis()->getFunction(); + } else { + auto __resultRef = jni::make_global(__result); + return JNICallable(std::move(__resultRef)); + } + }(); } void JHybridViewModelBooleanPropertySpec::removeListeners() { static const auto method = javaClassStatic()->getMethod("removeListeners"); diff --git a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp index c5b0c369..96c6af12 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp @@ -56,7 +56,7 @@ namespace margelo::nitro::rive { public: // Methods - void addListener(const std::function& onChanged) override; + std::function addListener(const std::function& onChanged) override; void removeListeners() override; private: diff --git a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp index 0ad45941..ca295824 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp @@ -10,8 +10,9 @@ #include -#include "JFunc_void_double.hpp" +#include "JFunc_void.hpp" #include +#include "JFunc_void_double.hpp" namespace margelo::nitro::rive { @@ -53,9 +54,18 @@ namespace margelo::nitro::rive { } // Methods - void JHybridViewModelColorPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod /* onChanged */)>("addListener_cxx"); - method(_javaPart, JFunc_void_double_cxx::fromCpp(onChanged)); + std::function JHybridViewModelColorPropertySpec::addListener(const std::function& onChanged) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + auto __result = method(_javaPart, JFunc_void_double_cxx::fromCpp(onChanged)); + return [&]() -> std::function { + if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(__result); + return downcast->cthis()->getFunction(); + } else { + auto __resultRef = jni::make_global(__result); + return JNICallable(std::move(__resultRef)); + } + }(); } void JHybridViewModelColorPropertySpec::removeListeners() { static const auto method = javaClassStatic()->getMethod("removeListeners"); diff --git a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp index 3d7006c5..603efff4 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp @@ -56,7 +56,7 @@ namespace margelo::nitro::rive { public: // Methods - void addListener(const std::function& onChanged) override; + std::function addListener(const std::function& onChanged) override; void removeListeners() override; private: diff --git a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp index a477ce8d..12cc91bb 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp @@ -11,8 +11,9 @@ #include #include -#include "JFunc_void_std__string.hpp" +#include "JFunc_void.hpp" #include +#include "JFunc_void_std__string.hpp" namespace margelo::nitro::rive { @@ -54,9 +55,18 @@ namespace margelo::nitro::rive { } // Methods - void JHybridViewModelEnumPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod /* onChanged */)>("addListener_cxx"); - method(_javaPart, JFunc_void_std__string_cxx::fromCpp(onChanged)); + std::function JHybridViewModelEnumPropertySpec::addListener(const std::function& onChanged) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + auto __result = method(_javaPart, JFunc_void_std__string_cxx::fromCpp(onChanged)); + return [&]() -> std::function { + if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(__result); + return downcast->cthis()->getFunction(); + } else { + auto __resultRef = jni::make_global(__result); + return JNICallable(std::move(__resultRef)); + } + }(); } void JHybridViewModelEnumPropertySpec::removeListeners() { static const auto method = javaClassStatic()->getMethod("removeListeners"); diff --git a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp index 0ded2bb0..133385bb 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp @@ -56,7 +56,7 @@ namespace margelo::nitro::rive { public: // Methods - void addListener(const std::function& onChanged) override; + std::function addListener(const std::function& onChanged) override; void removeListeners() override; private: diff --git a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp index 4cb7fcfd..7d3d08c2 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp @@ -10,13 +10,13 @@ // Forward declaration of `HybridRiveImageSpec` to properly resolve imports. namespace margelo::nitro::rive { class HybridRiveImageSpec; } +#include +#include "JFunc_void.hpp" +#include #include #include "HybridRiveImageSpec.hpp" #include #include "JHybridRiveImageSpec.hpp" -#include -#include "JFunc_void.hpp" -#include namespace margelo::nitro::rive { @@ -54,9 +54,18 @@ namespace margelo::nitro::rive { static const auto method = javaClassStatic()->getMethod /* image */)>("set"); method(_javaPart, image.has_value() ? std::dynamic_pointer_cast(image.value())->getJavaPart() : nullptr); } - void JHybridViewModelImagePropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod /* onChanged */)>("addListener_cxx"); - method(_javaPart, JFunc_void_cxx::fromCpp(onChanged)); + std::function JHybridViewModelImagePropertySpec::addListener(const std::function& onChanged) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(onChanged)); + return [&]() -> std::function { + if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(__result); + return downcast->cthis()->getFunction(); + } else { + auto __resultRef = jni::make_global(__result); + return JNICallable(std::move(__resultRef)); + } + }(); } void JHybridViewModelImagePropertySpec::removeListeners() { static const auto method = javaClassStatic()->getMethod("removeListeners"); diff --git a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp index 3a2fc9c0..8b4fc93e 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp @@ -56,7 +56,7 @@ namespace margelo::nitro::rive { public: // Methods void set(const std::optional>& image) override; - void addListener(const std::function& onChanged) override; + std::function addListener(const std::function& onChanged) override; void removeListeners() override; private: diff --git a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp index 952c90ea..33df056f 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp @@ -10,8 +10,9 @@ #include -#include "JFunc_void_double.hpp" +#include "JFunc_void.hpp" #include +#include "JFunc_void_double.hpp" namespace margelo::nitro::rive { @@ -53,9 +54,18 @@ namespace margelo::nitro::rive { } // Methods - void JHybridViewModelNumberPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod /* onChanged */)>("addListener_cxx"); - method(_javaPart, JFunc_void_double_cxx::fromCpp(onChanged)); + std::function JHybridViewModelNumberPropertySpec::addListener(const std::function& onChanged) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + auto __result = method(_javaPart, JFunc_void_double_cxx::fromCpp(onChanged)); + return [&]() -> std::function { + if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(__result); + return downcast->cthis()->getFunction(); + } else { + auto __resultRef = jni::make_global(__result); + return JNICallable(std::move(__resultRef)); + } + }(); } void JHybridViewModelNumberPropertySpec::removeListeners() { static const auto method = javaClassStatic()->getMethod("removeListeners"); diff --git a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp index 7fb6e09f..8633796e 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp @@ -56,7 +56,7 @@ namespace margelo::nitro::rive { public: // Methods - void addListener(const std::function& onChanged) override; + std::function addListener(const std::function& onChanged) override; void removeListeners() override; private: diff --git a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp index 9c1ca69c..400f1a58 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp @@ -11,8 +11,9 @@ #include #include -#include "JFunc_void_std__string.hpp" +#include "JFunc_void.hpp" #include +#include "JFunc_void_std__string.hpp" namespace margelo::nitro::rive { @@ -54,9 +55,18 @@ namespace margelo::nitro::rive { } // Methods - void JHybridViewModelStringPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod /* onChanged */)>("addListener_cxx"); - method(_javaPart, JFunc_void_std__string_cxx::fromCpp(onChanged)); + std::function JHybridViewModelStringPropertySpec::addListener(const std::function& onChanged) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + auto __result = method(_javaPart, JFunc_void_std__string_cxx::fromCpp(onChanged)); + return [&]() -> std::function { + if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(__result); + return downcast->cthis()->getFunction(); + } else { + auto __resultRef = jni::make_global(__result); + return JNICallable(std::move(__resultRef)); + } + }(); } void JHybridViewModelStringPropertySpec::removeListeners() { static const auto method = javaClassStatic()->getMethod("removeListeners"); diff --git a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp index d0b399ac..50a12127 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp @@ -56,7 +56,7 @@ namespace margelo::nitro::rive { public: // Methods - void addListener(const std::function& onChanged) override; + std::function addListener(const std::function& onChanged) override; void removeListeners() override; private: diff --git a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp index 666a2060..739481d1 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp @@ -45,9 +45,18 @@ namespace margelo::nitro::rive { // Methods - void JHybridViewModelTriggerPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod /* onChanged */)>("addListener_cxx"); - method(_javaPart, JFunc_void_cxx::fromCpp(onChanged)); + std::function JHybridViewModelTriggerPropertySpec::addListener(const std::function& onChanged) { + static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(onChanged)); + return [&]() -> std::function { + if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { + auto downcast = jni::static_ref_cast(__result); + return downcast->cthis()->getFunction(); + } else { + auto __resultRef = jni::make_global(__result); + return JNICallable(std::move(__resultRef)); + } + }(); } void JHybridViewModelTriggerPropertySpec::trigger() { static const auto method = javaClassStatic()->getMethod("trigger"); diff --git a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp index 9a399cce..386cedf6 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp @@ -55,7 +55,7 @@ namespace margelo::nitro::rive { public: // Methods - void addListener(const std::function& onChanged) override; + std::function addListener(const std::function& onChanged) override; void trigger() override; void removeListeners() override; diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt index 9f07b4d2..236e5621 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt @@ -49,13 +49,13 @@ abstract class HybridViewModelBooleanPropertySpec: HybridViewModelPropertySpec() abstract var value: Boolean // Methods - abstract fun addListener(onChanged: (value: Boolean) -> Unit): Unit + abstract fun addListener(onChanged: (value: Boolean) -> Unit): () -> Unit @DoNotStrip @Keep - private fun addListener_cxx(onChanged: Func_void_bool): Unit { + private fun addListener_cxx(onChanged: Func_void_bool): Func_void { val __result = addListener(onChanged) - return __result + return Func_void_java(__result) } @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt index 5871c463..0091fe4a 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt @@ -49,13 +49,13 @@ abstract class HybridViewModelColorPropertySpec: HybridViewModelPropertySpec() { abstract var value: Double // Methods - abstract fun addListener(onChanged: (value: Double) -> Unit): Unit + abstract fun addListener(onChanged: (value: Double) -> Unit): () -> Unit @DoNotStrip @Keep - private fun addListener_cxx(onChanged: Func_void_double): Unit { + private fun addListener_cxx(onChanged: Func_void_double): Func_void { val __result = addListener(onChanged) - return __result + return Func_void_java(__result) } @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt index 8fce8d99..cd48c70e 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt @@ -49,13 +49,13 @@ abstract class HybridViewModelEnumPropertySpec: HybridViewModelPropertySpec() { abstract var value: String // Methods - abstract fun addListener(onChanged: (value: String) -> Unit): Unit + abstract fun addListener(onChanged: (value: String) -> Unit): () -> Unit @DoNotStrip @Keep - private fun addListener_cxx(onChanged: Func_void_std__string): Unit { + private fun addListener_cxx(onChanged: Func_void_std__string): Func_void { val __result = addListener(onChanged) - return __result + return Func_void_java(__result) } @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt index f9ae3155..2516a112 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt @@ -49,13 +49,13 @@ abstract class HybridViewModelImagePropertySpec: HybridViewModelPropertySpec() { @Keep abstract fun set(image: HybridRiveImageSpec?): Unit - abstract fun addListener(onChanged: () -> Unit): Unit + abstract fun addListener(onChanged: () -> Unit): () -> Unit @DoNotStrip @Keep - private fun addListener_cxx(onChanged: Func_void): Unit { + private fun addListener_cxx(onChanged: Func_void): Func_void { val __result = addListener(onChanged) - return __result + return Func_void_java(__result) } @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt index c395b3da..ca5c8239 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt @@ -49,13 +49,13 @@ abstract class HybridViewModelNumberPropertySpec: HybridViewModelPropertySpec() abstract var value: Double // Methods - abstract fun addListener(onChanged: (value: Double) -> Unit): Unit + abstract fun addListener(onChanged: (value: Double) -> Unit): () -> Unit @DoNotStrip @Keep - private fun addListener_cxx(onChanged: Func_void_double): Unit { + private fun addListener_cxx(onChanged: Func_void_double): Func_void { val __result = addListener(onChanged) - return __result + return Func_void_java(__result) } @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt index 9687fe73..a06142c6 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt @@ -49,13 +49,13 @@ abstract class HybridViewModelStringPropertySpec: HybridViewModelPropertySpec() abstract var value: String // Methods - abstract fun addListener(onChanged: (value: String) -> Unit): Unit + abstract fun addListener(onChanged: (value: String) -> Unit): () -> Unit @DoNotStrip @Keep - private fun addListener_cxx(onChanged: Func_void_std__string): Unit { + private fun addListener_cxx(onChanged: Func_void_std__string): Func_void { val __result = addListener(onChanged) - return __result + return Func_void_java(__result) } @DoNotStrip diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt index 2aafd033..3c566042 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt @@ -45,13 +45,13 @@ abstract class HybridViewModelTriggerPropertySpec: HybridViewModelPropertySpec() // Methods - abstract fun addListener(onChanged: () -> Unit): Unit + abstract fun addListener(onChanged: () -> Unit): () -> Unit @DoNotStrip @Keep - private fun addListener_cxx(onChanged: Func_void): Unit { + private fun addListener_cxx(onChanged: Func_void): Func_void { val __result = addListener(onChanged) - return __result + return Func_void_java(__result) } @DoNotStrip diff --git a/nitrogen/generated/android/riveOnLoad.cpp b/nitrogen/generated/android/riveOnLoad.cpp index 552e4b61..36dbc3cf 100644 --- a/nitrogen/generated/android/riveOnLoad.cpp +++ b/nitrogen/generated/android/riveOnLoad.cpp @@ -28,6 +28,7 @@ #include "JHybridViewModelInstanceSpec.hpp" #include "JHybridViewModelPropertySpec.hpp" #include "JHybridViewModelNumberPropertySpec.hpp" +#include "JFunc_void.hpp" #include "JFunc_void_double.hpp" #include "JHybridViewModelStringPropertySpec.hpp" #include "JFunc_void_std__string.hpp" @@ -36,7 +37,6 @@ #include "JHybridViewModelColorPropertySpec.hpp" #include "JHybridViewModelEnumPropertySpec.hpp" #include "JHybridViewModelTriggerPropertySpec.hpp" -#include "JFunc_void.hpp" #include "JHybridViewModelImagePropertySpec.hpp" #include @@ -62,6 +62,7 @@ int initialize(JavaVM* vm) { margelo::nitro::rive::JHybridViewModelInstanceSpec::registerNatives(); margelo::nitro::rive::JHybridViewModelPropertySpec::registerNatives(); margelo::nitro::rive::JHybridViewModelNumberPropertySpec::registerNatives(); + margelo::nitro::rive::JFunc_void_cxx::registerNatives(); margelo::nitro::rive::JFunc_void_double_cxx::registerNatives(); margelo::nitro::rive::JHybridViewModelStringPropertySpec::registerNatives(); margelo::nitro::rive::JFunc_void_std__string_cxx::registerNatives(); @@ -70,7 +71,6 @@ int initialize(JavaVM* vm) { margelo::nitro::rive::JHybridViewModelColorPropertySpec::registerNatives(); margelo::nitro::rive::JHybridViewModelEnumPropertySpec::registerNatives(); margelo::nitro::rive::JHybridViewModelTriggerPropertySpec::registerNatives(); - margelo::nitro::rive::JFunc_void_cxx::registerNatives(); margelo::nitro::rive::JHybridViewModelImagePropertySpec::registerNatives(); // Register Nitro Hybrid Objects @@ -154,14 +154,6 @@ int initialize(JavaVM* vm) { return instance->cthis()->shared(); } ); - HybridObjectRegistry::registerHybridObjectConstructor( - "ViewModelTriggerProperty", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/margelo/nitro/rive/HybridViewModelTriggerProperty"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); HybridObjectRegistry::registerHybridObjectConstructor( "ViewModelImageProperty", []() -> std::shared_ptr { diff --git a/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp b/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp index 9b0a546a..edd02b50 100644 --- a/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp +++ b/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp @@ -1155,6 +1155,15 @@ namespace margelo::nitro::rive::bridge::swift { return Func_void_double_Wrapper(std::move(value)); } + // pragma MARK: Result> + using Result_std__function_void____ = Result>; + inline Result_std__function_void____ create_Result_std__function_void____(const std::function& value) noexcept { + return Result>::withValue(value); + } + inline Result_std__function_void____ create_Result_std__function_void____(const std::exception_ptr& error) noexcept { + return Result>::withError(error); + } + // pragma MARK: std::function /** * Specialized version of `std::function`. diff --git a/nitrogen/generated/ios/RNRiveAutolinking.mm b/nitrogen/generated/ios/RNRiveAutolinking.mm index 2dce855b..1e8104c0 100644 --- a/nitrogen/generated/ios/RNRiveAutolinking.mm +++ b/nitrogen/generated/ios/RNRiveAutolinking.mm @@ -20,7 +20,6 @@ #include "HybridViewModelBooleanPropertySpecSwift.hpp" #include "HybridViewModelColorPropertySpecSwift.hpp" #include "HybridViewModelEnumPropertySpecSwift.hpp" -#include "HybridViewModelTriggerPropertySpecSwift.hpp" #include "HybridViewModelImagePropertySpecSwift.hpp" #include "HybridRiveViewSpecSwift.hpp" #include "HybridRiveImageFactorySpecSwift.hpp" @@ -104,13 +103,6 @@ + (void) load { return hybridObject; } ); - HybridObjectRegistry::registerHybridObjectConstructor( - "ViewModelTriggerProperty", - []() -> std::shared_ptr { - std::shared_ptr hybridObject = RNRive::RNRiveAutolinking::createViewModelTriggerProperty(); - return hybridObject; - } - ); HybridObjectRegistry::registerHybridObjectConstructor( "ViewModelImageProperty", []() -> std::shared_ptr { diff --git a/nitrogen/generated/ios/RNRiveAutolinking.swift b/nitrogen/generated/ios/RNRiveAutolinking.swift index bc1c95d1..82aae863 100644 --- a/nitrogen/generated/ios/RNRiveAutolinking.swift +++ b/nitrogen/generated/ios/RNRiveAutolinking.swift @@ -158,21 +158,6 @@ public final class RNRiveAutolinking { }() } - /** - * Creates an instance of a Swift class that implements `HybridViewModelTriggerPropertySpec`, - * and wraps it in a Swift class that can directly interop with C++ (`HybridViewModelTriggerPropertySpec_cxx`) - * - * This is generated by Nitrogen and will initialize the class specified - * in the `"autolinking"` property of `nitro.json` (in this case, `HybridViewModelTriggerProperty`). - */ - public static func createViewModelTriggerProperty() -> bridge.std__shared_ptr_HybridViewModelTriggerPropertySpec_ { - let hybridObject = HybridViewModelTriggerProperty() - return { () -> bridge.std__shared_ptr_HybridViewModelTriggerPropertySpec_ in - let __cxxWrapped = hybridObject.getCxxWrapper() - return __cxxWrapped.getCxxPart() - }() - } - /** * Creates an instance of a Swift class that implements `HybridViewModelImagePropertySpec`, * and wraps it in a Swift class that can directly interop with C++ (`HybridViewModelImagePropertySpec_cxx`) diff --git a/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.hpp b/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.hpp index 6822f99b..fff49900 100644 --- a/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.hpp @@ -68,11 +68,13 @@ namespace margelo::nitro::rive { public: // Methods - inline void addListener(const std::function& onChanged) override { + inline std::function addListener(const std::function& onChanged) override { auto __result = _swiftPart.addListener(onChanged); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); } + auto __value = std::move(__result.value()); + return __value; } inline void removeListeners() override { auto __result = _swiftPart.removeListeners(); diff --git a/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.hpp b/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.hpp index 77328fca..94e01c25 100644 --- a/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.hpp @@ -68,11 +68,13 @@ namespace margelo::nitro::rive { public: // Methods - inline void addListener(const std::function& onChanged) override { + inline std::function addListener(const std::function& onChanged) override { auto __result = _swiftPart.addListener(onChanged); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); } + auto __value = std::move(__result.value()); + return __value; } inline void removeListeners() override { auto __result = _swiftPart.removeListeners(); diff --git a/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.hpp b/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.hpp index 21a76a9d..91fbb5b7 100644 --- a/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.hpp @@ -70,11 +70,13 @@ namespace margelo::nitro::rive { public: // Methods - inline void addListener(const std::function& onChanged) override { + inline std::function addListener(const std::function& onChanged) override { auto __result = _swiftPart.addListener(onChanged); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); } + auto __value = std::move(__result.value()); + return __value; } inline void removeListeners() override { auto __result = _swiftPart.removeListeners(); diff --git a/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.hpp b/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.hpp index 75b92d61..24c4d29b 100644 --- a/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.hpp @@ -74,11 +74,13 @@ namespace margelo::nitro::rive { std::rethrow_exception(__result.error()); } } - inline void addListener(const std::function& onChanged) override { + inline std::function addListener(const std::function& onChanged) override { auto __result = _swiftPart.addListener(onChanged); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); } + auto __value = std::move(__result.value()); + return __value; } inline void removeListeners() override { auto __result = _swiftPart.removeListeners(); diff --git a/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.hpp b/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.hpp index 1678c441..46d0ca13 100644 --- a/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.hpp @@ -68,11 +68,13 @@ namespace margelo::nitro::rive { public: // Methods - inline void addListener(const std::function& onChanged) override { + inline std::function addListener(const std::function& onChanged) override { auto __result = _swiftPart.addListener(onChanged); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); } + auto __value = std::move(__result.value()); + return __value; } inline void removeListeners() override { auto __result = _swiftPart.removeListeners(); diff --git a/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.hpp b/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.hpp index d8650d3e..470f0649 100644 --- a/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.hpp @@ -70,11 +70,13 @@ namespace margelo::nitro::rive { public: // Methods - inline void addListener(const std::function& onChanged) override { + inline std::function addListener(const std::function& onChanged) override { auto __result = _swiftPart.addListener(onChanged); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); } + auto __value = std::move(__result.value()); + return __value; } inline void removeListeners() override { auto __result = _swiftPart.removeListeners(); diff --git a/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.hpp b/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.hpp index a5fbf2fb..5977fe39 100644 --- a/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.hpp @@ -63,11 +63,13 @@ namespace margelo::nitro::rive { public: // Methods - inline void addListener(const std::function& onChanged) override { + inline std::function addListener(const std::function& onChanged) override { auto __result = _swiftPart.addListener(onChanged); if (__result.hasError()) [[unlikely]] { std::rethrow_exception(__result.error()); } + auto __value = std::move(__result.value()); + return __value; } inline void trigger() override { auto __result = _swiftPart.trigger(); diff --git a/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec.swift b/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec.swift index fcaec99d..cf2655d7 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec.swift @@ -14,7 +14,7 @@ public protocol HybridViewModelBooleanPropertySpec_protocol: HybridObject, Hybri var value: Bool { get set } // Methods - func addListener(onChanged: @escaping (_ value: Bool) -> Void) throws -> Void + func addListener(onChanged: @escaping (_ value: Bool) -> Void) throws -> () -> Void func removeListeners() throws -> Void } diff --git a/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec_cxx.swift b/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec_cxx.swift index d3a66fe3..395353d3 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec_cxx.swift @@ -130,18 +130,22 @@ open class HybridViewModelBooleanPropertySpec_cxx : HybridViewModelPropertySpec_ // Methods @inline(__always) - public final func addListener(onChanged: bridge.Func_void_bool) -> bridge.Result_void_ { + public final func addListener(onChanged: bridge.Func_void_bool) -> bridge.Result_std__function_void____ { do { - try self.__implementation.addListener(onChanged: { () -> (Bool) -> Void in + let __result = try self.__implementation.addListener(onChanged: { () -> (Bool) -> Void in let __wrappedFunction = bridge.wrap_Func_void_bool(onChanged) return { (__value: Bool) -> Void in __wrappedFunction.call(__value) } }()) - return bridge.create_Result_void_() + let __resultCpp = { () -> bridge.Func_void in + let __closureWrapper = Func_void(__result) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + return bridge.create_Result_std__function_void____(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() - return bridge.create_Result_void_(__exceptionPtr) + return bridge.create_Result_std__function_void____(__exceptionPtr) } } diff --git a/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec.swift b/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec.swift index ee44a845..2af066ff 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec.swift @@ -14,7 +14,7 @@ public protocol HybridViewModelColorPropertySpec_protocol: HybridObject, HybridV var value: Double { get set } // Methods - func addListener(onChanged: @escaping (_ value: Double) -> Void) throws -> Void + func addListener(onChanged: @escaping (_ value: Double) -> Void) throws -> () -> Void func removeListeners() throws -> Void } diff --git a/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec_cxx.swift b/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec_cxx.swift index 9c9851ca..14922446 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec_cxx.swift @@ -130,18 +130,22 @@ open class HybridViewModelColorPropertySpec_cxx : HybridViewModelPropertySpec_cx // Methods @inline(__always) - public final func addListener(onChanged: bridge.Func_void_double) -> bridge.Result_void_ { + public final func addListener(onChanged: bridge.Func_void_double) -> bridge.Result_std__function_void____ { do { - try self.__implementation.addListener(onChanged: { () -> (Double) -> Void in + let __result = try self.__implementation.addListener(onChanged: { () -> (Double) -> Void in let __wrappedFunction = bridge.wrap_Func_void_double(onChanged) return { (__value: Double) -> Void in __wrappedFunction.call(__value) } }()) - return bridge.create_Result_void_() + let __resultCpp = { () -> bridge.Func_void in + let __closureWrapper = Func_void(__result) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + return bridge.create_Result_std__function_void____(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() - return bridge.create_Result_void_(__exceptionPtr) + return bridge.create_Result_std__function_void____(__exceptionPtr) } } diff --git a/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec.swift b/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec.swift index ae134908..0a9a7009 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec.swift @@ -14,7 +14,7 @@ public protocol HybridViewModelEnumPropertySpec_protocol: HybridObject, HybridVi var value: String { get set } // Methods - func addListener(onChanged: @escaping (_ value: String) -> Void) throws -> Void + func addListener(onChanged: @escaping (_ value: String) -> Void) throws -> () -> Void func removeListeners() throws -> Void } diff --git a/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec_cxx.swift b/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec_cxx.swift index 3b394457..85db8a45 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec_cxx.swift @@ -130,18 +130,22 @@ open class HybridViewModelEnumPropertySpec_cxx : HybridViewModelPropertySpec_cxx // Methods @inline(__always) - public final func addListener(onChanged: bridge.Func_void_std__string) -> bridge.Result_void_ { + public final func addListener(onChanged: bridge.Func_void_std__string) -> bridge.Result_std__function_void____ { do { - try self.__implementation.addListener(onChanged: { () -> (String) -> Void in + let __result = try self.__implementation.addListener(onChanged: { () -> (String) -> Void in let __wrappedFunction = bridge.wrap_Func_void_std__string(onChanged) return { (__value: String) -> Void in __wrappedFunction.call(std.string(__value)) } }()) - return bridge.create_Result_void_() + let __resultCpp = { () -> bridge.Func_void in + let __closureWrapper = Func_void(__result) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + return bridge.create_Result_std__function_void____(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() - return bridge.create_Result_void_(__exceptionPtr) + return bridge.create_Result_std__function_void____(__exceptionPtr) } } diff --git a/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec.swift b/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec.swift index 0a6cd507..ea1a63be 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec.swift @@ -15,7 +15,7 @@ public protocol HybridViewModelImagePropertySpec_protocol: HybridObject, HybridV // Methods func set(image: (any HybridRiveImageSpec)?) throws -> Void - func addListener(onChanged: @escaping () -> Void) throws -> Void + func addListener(onChanged: @escaping () -> Void) throws -> () -> Void func removeListeners() throws -> Void } diff --git a/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec_cxx.swift b/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec_cxx.swift index 3f3ecb3a..82f207f1 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec_cxx.swift @@ -143,18 +143,22 @@ open class HybridViewModelImagePropertySpec_cxx : HybridViewModelPropertySpec_cx } @inline(__always) - public final func addListener(onChanged: bridge.Func_void) -> bridge.Result_void_ { + public final func addListener(onChanged: bridge.Func_void) -> bridge.Result_std__function_void____ { do { - try self.__implementation.addListener(onChanged: { () -> () -> Void in + let __result = try self.__implementation.addListener(onChanged: { () -> () -> Void in let __wrappedFunction = bridge.wrap_Func_void(onChanged) return { () -> Void in __wrappedFunction.call() } }()) - return bridge.create_Result_void_() + let __resultCpp = { () -> bridge.Func_void in + let __closureWrapper = Func_void(__result) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + return bridge.create_Result_std__function_void____(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() - return bridge.create_Result_void_(__exceptionPtr) + return bridge.create_Result_std__function_void____(__exceptionPtr) } } diff --git a/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec.swift b/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec.swift index 6c0f017a..50aee64c 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec.swift @@ -14,7 +14,7 @@ public protocol HybridViewModelNumberPropertySpec_protocol: HybridObject, Hybrid var value: Double { get set } // Methods - func addListener(onChanged: @escaping (_ value: Double) -> Void) throws -> Void + func addListener(onChanged: @escaping (_ value: Double) -> Void) throws -> () -> Void func removeListeners() throws -> Void } diff --git a/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec_cxx.swift b/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec_cxx.swift index 15a5b83b..d337fbaa 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec_cxx.swift @@ -130,18 +130,22 @@ open class HybridViewModelNumberPropertySpec_cxx : HybridViewModelPropertySpec_c // Methods @inline(__always) - public final func addListener(onChanged: bridge.Func_void_double) -> bridge.Result_void_ { + public final func addListener(onChanged: bridge.Func_void_double) -> bridge.Result_std__function_void____ { do { - try self.__implementation.addListener(onChanged: { () -> (Double) -> Void in + let __result = try self.__implementation.addListener(onChanged: { () -> (Double) -> Void in let __wrappedFunction = bridge.wrap_Func_void_double(onChanged) return { (__value: Double) -> Void in __wrappedFunction.call(__value) } }()) - return bridge.create_Result_void_() + let __resultCpp = { () -> bridge.Func_void in + let __closureWrapper = Func_void(__result) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + return bridge.create_Result_std__function_void____(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() - return bridge.create_Result_void_(__exceptionPtr) + return bridge.create_Result_std__function_void____(__exceptionPtr) } } diff --git a/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec.swift b/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec.swift index a731189c..0cbcba58 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec.swift @@ -14,7 +14,7 @@ public protocol HybridViewModelStringPropertySpec_protocol: HybridObject, Hybrid var value: String { get set } // Methods - func addListener(onChanged: @escaping (_ value: String) -> Void) throws -> Void + func addListener(onChanged: @escaping (_ value: String) -> Void) throws -> () -> Void func removeListeners() throws -> Void } diff --git a/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec_cxx.swift b/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec_cxx.swift index 140f1271..6d34397f 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec_cxx.swift @@ -130,18 +130,22 @@ open class HybridViewModelStringPropertySpec_cxx : HybridViewModelPropertySpec_c // Methods @inline(__always) - public final func addListener(onChanged: bridge.Func_void_std__string) -> bridge.Result_void_ { + public final func addListener(onChanged: bridge.Func_void_std__string) -> bridge.Result_std__function_void____ { do { - try self.__implementation.addListener(onChanged: { () -> (String) -> Void in + let __result = try self.__implementation.addListener(onChanged: { () -> (String) -> Void in let __wrappedFunction = bridge.wrap_Func_void_std__string(onChanged) return { (__value: String) -> Void in __wrappedFunction.call(std.string(__value)) } }()) - return bridge.create_Result_void_() + let __resultCpp = { () -> bridge.Func_void in + let __closureWrapper = Func_void(__result) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + return bridge.create_Result_std__function_void____(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() - return bridge.create_Result_void_(__exceptionPtr) + return bridge.create_Result_std__function_void____(__exceptionPtr) } } diff --git a/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec.swift b/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec.swift index e16379bb..03a743a0 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec.swift @@ -14,7 +14,7 @@ public protocol HybridViewModelTriggerPropertySpec_protocol: HybridObject, Hybri // Methods - func addListener(onChanged: @escaping () -> Void) throws -> Void + func addListener(onChanged: @escaping () -> Void) throws -> () -> Void func trigger() throws -> Void func removeListeners() throws -> Void } diff --git a/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec_cxx.swift b/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec_cxx.swift index 459f0bf7..c815ef87 100644 --- a/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec_cxx.swift @@ -121,18 +121,22 @@ open class HybridViewModelTriggerPropertySpec_cxx : HybridViewModelPropertySpec_ // Methods @inline(__always) - public final func addListener(onChanged: bridge.Func_void) -> bridge.Result_void_ { + public final func addListener(onChanged: bridge.Func_void) -> bridge.Result_std__function_void____ { do { - try self.__implementation.addListener(onChanged: { () -> () -> Void in + let __result = try self.__implementation.addListener(onChanged: { () -> () -> Void in let __wrappedFunction = bridge.wrap_Func_void(onChanged) return { () -> Void in __wrappedFunction.call() } }()) - return bridge.create_Result_void_() + let __resultCpp = { () -> bridge.Func_void in + let __closureWrapper = Func_void(__result) + return bridge.create_Func_void(__closureWrapper.toUnsafe()) + }() + return bridge.create_Result_std__function_void____(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() - return bridge.create_Result_void_(__exceptionPtr) + return bridge.create_Result_std__function_void____(__exceptionPtr) } } diff --git a/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.hpp b/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.hpp index c0b09ffd..3576952e 100644 --- a/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.hpp +++ b/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.hpp @@ -52,7 +52,7 @@ namespace margelo::nitro::rive { public: // Methods - virtual void addListener(const std::function& onChanged) = 0; + virtual std::function addListener(const std::function& onChanged) = 0; virtual void removeListeners() = 0; protected: diff --git a/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.hpp b/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.hpp index 516ee2b0..840916c0 100644 --- a/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.hpp +++ b/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.hpp @@ -52,7 +52,7 @@ namespace margelo::nitro::rive { public: // Methods - virtual void addListener(const std::function& onChanged) = 0; + virtual std::function addListener(const std::function& onChanged) = 0; virtual void removeListeners() = 0; protected: diff --git a/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.hpp b/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.hpp index 10862db6..99d34cae 100644 --- a/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.hpp +++ b/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.hpp @@ -53,7 +53,7 @@ namespace margelo::nitro::rive { public: // Methods - virtual void addListener(const std::function& onChanged) = 0; + virtual std::function addListener(const std::function& onChanged) = 0; virtual void removeListeners() = 0; protected: diff --git a/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.hpp b/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.hpp index cdcd63c3..cb4608b9 100644 --- a/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.hpp +++ b/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.hpp @@ -56,7 +56,7 @@ namespace margelo::nitro::rive { public: // Methods virtual void set(const std::optional>& image) = 0; - virtual void addListener(const std::function& onChanged) = 0; + virtual std::function addListener(const std::function& onChanged) = 0; virtual void removeListeners() = 0; protected: diff --git a/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.hpp b/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.hpp index 3223699f..1a21df01 100644 --- a/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.hpp +++ b/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.hpp @@ -52,7 +52,7 @@ namespace margelo::nitro::rive { public: // Methods - virtual void addListener(const std::function& onChanged) = 0; + virtual std::function addListener(const std::function& onChanged) = 0; virtual void removeListeners() = 0; protected: diff --git a/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.hpp b/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.hpp index 1641d691..c363a793 100644 --- a/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.hpp +++ b/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.hpp @@ -53,7 +53,7 @@ namespace margelo::nitro::rive { public: // Methods - virtual void addListener(const std::function& onChanged) = 0; + virtual std::function addListener(const std::function& onChanged) = 0; virtual void removeListeners() = 0; protected: diff --git a/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.hpp b/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.hpp index 00773f29..228af7d2 100644 --- a/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.hpp +++ b/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.hpp @@ -51,7 +51,7 @@ namespace margelo::nitro::rive { public: // Methods - virtual void addListener(const std::function& onChanged) = 0; + virtual std::function addListener(const std::function& onChanged) = 0; virtual void trigger() = 0; virtual void removeListeners() = 0; diff --git a/src/hooks/useRiveProperty.ts b/src/hooks/useRiveProperty.ts index b3207495..fed29ab8 100644 --- a/src/hooks/useRiveProperty.ts +++ b/src/hooks/useRiveProperty.ts @@ -105,6 +105,6 @@ export function useRiveProperty

( interface ObservableViewModelProperty extends ViewModelProperty, ObservableProperty { - addListener: (onChanged: (value: T) => void) => void; + addListener: (onChanged: (value: T) => void) => () => void; value: T; } diff --git a/src/specs/ViewModel.nitro.ts b/src/specs/ViewModel.nitro.ts index 481f4762..59a09c1b 100644 --- a/src/specs/ViewModel.nitro.ts +++ b/src/specs/ViewModel.nitro.ts @@ -58,7 +58,7 @@ export interface ViewModelProperty extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {} export interface ObservableProperty { - /** Remove all listeners from the view model number property */ + /** Remove all listeners from the property */ removeListeners(): void; } @@ -67,8 +67,8 @@ export interface ViewModelNumberProperty ObservableProperty { /** The value of the view model number property */ value: number; - /** Add a listener to the view model number property */ - addListener(onChanged: (value: number) => void): void; + /** Add a listener to the view model number property. Returns a function to remove the listener. */ + addListener(onChanged: (value: number) => void): () => void; } export interface ViewModelStringProperty @@ -76,8 +76,8 @@ export interface ViewModelStringProperty ObservableProperty { /** The value of the view model string property */ value: string; - /** Add a listener to the view model string property */ - addListener(onChanged: (value: string) => void): void; + /** Add a listener to the view model string property. Returns a function to remove the listener. */ + addListener(onChanged: (value: string) => void): () => void; } export interface ViewModelBooleanProperty @@ -85,8 +85,8 @@ export interface ViewModelBooleanProperty ObservableProperty { /** The value of the view model boolean property */ value: boolean; - /** Add a listener to the view model boolean property */ - addListener(onChanged: (value: boolean) => void): void; + /** Add a listener to the view model boolean property. Returns a function to remove the listener. */ + addListener(onChanged: (value: boolean) => void): () => void; } export interface ViewModelColorProperty @@ -94,8 +94,8 @@ export interface ViewModelColorProperty ObservableProperty { /** The value of the view model color property */ value: number; - /** Add a listener to the view model color property */ - addListener(onChanged: (value: number) => void): void; + /** Add a listener to the view model color property. Returns a function to remove the listener. */ + addListener(onChanged: (value: number) => void): () => void; } export interface ViewModelEnumProperty @@ -103,15 +103,15 @@ export interface ViewModelEnumProperty ObservableProperty { /** The value of the view model enum property */ value: string; - /** Add a listener to the view model enum property */ - addListener(onChanged: (value: string) => void): void; + /** Add a listener to the view model enum property. Returns a function to remove the listener. */ + addListener(onChanged: (value: string) => void): () => void; } export interface ViewModelTriggerProperty extends ViewModelProperty, ObservableProperty { - /** Add a listener to the view model trigger property */ - addListener(onChanged: () => void): void; + /** Add a listener to the view model trigger property. Returns a function to remove the listener. */ + addListener(onChanged: () => void): () => void; /** Trigger the view model trigger property */ trigger(): void; } @@ -121,6 +121,6 @@ export interface ViewModelImageProperty ObservableProperty { /** Set the image property value */ set(image: RiveImage | undefined): void; - /** Add a listener to the view model image property */ - addListener(onChanged: () => void): void; + /** Add a listener to the view model image property. Returns a function to remove the listener. */ + addListener(onChanged: () => void): () => void; }