@rive-app/react-native 0.1.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +257 -0
- package/RNRive.podspec +53 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +155 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +13 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelProperty.kt +20 -0
- package/android/src/main/java/com/margelo/nitro/rive/BaseHybridViewModelPropertyImpl.kt +50 -0
- package/android/src/main/java/com/margelo/nitro/rive/BytesDataLoader.kt +9 -0
- package/android/src/main/java/com/margelo/nitro/rive/DataLoader.kt +15 -0
- package/android/src/main/java/com/margelo/nitro/rive/DataSource.kt +38 -0
- package/android/src/main/java/com/margelo/nitro/rive/DataSourceResolver.kt +36 -0
- package/android/src/main/java/com/margelo/nitro/rive/EventPropertiesOutputExtensions.kt +12 -0
- package/android/src/main/java/com/margelo/nitro/rive/FileDataLoader.kt +21 -0
- package/android/src/main/java/com/margelo/nitro/rive/HTTPDataLoader.kt +37 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridRiveFile.kt +98 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridRiveFileFactory.kt +123 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridRiveImage.kt +15 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridRiveImageFactory.kt +23 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt +279 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModel.kt +53 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelImageProperty.kt +21 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelInstance.kt +76 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt +23 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/rive/HybridViewModelTriggerProperty.kt +21 -0
- package/android/src/main/java/com/margelo/nitro/rive/ReferencedAssetLoader.kt +108 -0
- package/android/src/main/java/com/margelo/nitro/rive/ResourceDataLoader.kt +44 -0
- package/android/src/main/java/com/margelo/nitro/rive/Rive.kt +12 -0
- package/android/src/main/java/com/rive/RivePackage.kt +29 -0
- package/android/src/main/java/com/rive/RiveReactNativeView.kt +433 -0
- package/android/src/main/java/com/rive/RiveViewManager.kt +11 -0
- package/ios/BaseHybridViewModelProperty.swift +118 -0
- package/ios/BundleDataLoader.swift +25 -0
- package/ios/BytesDataLoader.swift +10 -0
- package/ios/DataLoader.swift +28 -0
- package/ios/DataSource.swift +43 -0
- package/ios/DataSourceResolver.swift +55 -0
- package/ios/EventPropertiesOutputExtensions.swift +15 -0
- package/ios/FileDataLoader.swift +24 -0
- package/ios/HTTPDataLoader.swift +31 -0
- package/ios/HybridRiveFile.swift +113 -0
- package/ios/HybridRiveFileFactory.swift +163 -0
- package/ios/HybridRiveImage.swift +17 -0
- package/ios/HybridRiveImageFactory.swift +26 -0
- package/ios/HybridRiveView.swift +284 -0
- package/ios/HybridViewModel.swift +46 -0
- package/ios/HybridViewModelBooleanProperty.swift +29 -0
- package/ios/HybridViewModelColorProperty.swift +63 -0
- package/ios/HybridViewModelEnumProperty.swift +29 -0
- package/ios/HybridViewModelImageProperty.swift +31 -0
- package/ios/HybridViewModelInstance.swift +51 -0
- package/ios/HybridViewModelNumberProperty.swift +35 -0
- package/ios/HybridViewModelStringProperty.swift +29 -0
- package/ios/HybridViewModelTriggerProperty.swift +30 -0
- package/ios/RCTLog.swift +29 -0
- package/ios/RCTSwiftLog.h +11 -0
- package/ios/RCTSwiftLog.m +38 -0
- package/ios/ReferencedAssetLoader.swift +145 -0
- package/ios/Rive.swift +5 -0
- package/ios/RiveReactNativeView.swift +325 -0
- package/ios/Utils.swift +15 -0
- package/lib/module/core/Alignment.js +42 -0
- package/lib/module/core/Alignment.js.map +1 -0
- package/lib/module/core/Errors.js +13 -0
- package/lib/module/core/Errors.js.map +1 -0
- package/lib/module/core/Events.js +8 -0
- package/lib/module/core/Events.js.map +1 -0
- package/lib/module/core/Fit.js +51 -0
- package/lib/module/core/Fit.js.map +1 -0
- package/lib/module/core/NitroRiveViewComponent.js +6 -0
- package/lib/module/core/NitroRiveViewComponent.js.map +1 -0
- package/lib/module/core/ReferencedAssets.js +4 -0
- package/lib/module/core/ReferencedAssets.js.map +1 -0
- package/lib/module/core/RiveColor.js +90 -0
- package/lib/module/core/RiveColor.js.map +1 -0
- package/lib/module/core/RiveFile.js +64 -0
- package/lib/module/core/RiveFile.js.map +1 -0
- package/lib/module/core/RiveImages.js +5 -0
- package/lib/module/core/RiveImages.js.map +1 -0
- package/lib/module/core/RiveView.js +51 -0
- package/lib/module/core/RiveView.js.map +1 -0
- package/lib/module/core/callDispose.js +15 -0
- package/lib/module/core/callDispose.js.map +1 -0
- package/lib/module/hooks/useRive.js +51 -0
- package/lib/module/hooks/useRive.js.map +1 -0
- package/lib/module/hooks/useRiveBoolean.js +23 -0
- package/lib/module/hooks/useRiveBoolean.js.map +1 -0
- package/lib/module/hooks/useRiveColor.js +30 -0
- package/lib/module/hooks/useRiveColor.js.map +1 -0
- package/lib/module/hooks/useRiveEnum.js +23 -0
- package/lib/module/hooks/useRiveEnum.js.map +1 -0
- package/lib/module/hooks/useRiveFile.js +128 -0
- package/lib/module/hooks/useRiveFile.js.map +1 -0
- package/lib/module/hooks/useRiveNumber.js +23 -0
- package/lib/module/hooks/useRiveNumber.js.map +1 -0
- package/lib/module/hooks/useRiveProperty.js +79 -0
- package/lib/module/hooks/useRiveProperty.js.map +1 -0
- package/lib/module/hooks/useRiveString.js +23 -0
- package/lib/module/hooks/useRiveString.js.map +1 -0
- package/lib/module/hooks/useRiveTrigger.js +33 -0
- package/lib/module/hooks/useRiveTrigger.js.map +1 -0
- package/lib/module/index.js +28 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/specs/ArtboardBy.js +27 -0
- package/lib/module/specs/ArtboardBy.js.map +1 -0
- package/lib/module/specs/Rive.nitro.js +4 -0
- package/lib/module/specs/Rive.nitro.js.map +1 -0
- package/lib/module/specs/RiveFile.nitro.js +4 -0
- package/lib/module/specs/RiveFile.nitro.js.map +1 -0
- package/lib/module/specs/RiveImage.nitro.js +4 -0
- package/lib/module/specs/RiveImage.nitro.js.map +1 -0
- package/lib/module/specs/RiveView.nitro.js +23 -0
- package/lib/module/specs/RiveView.nitro.js.map +1 -0
- package/lib/module/specs/ViewModel.nitro.js +4 -0
- package/lib/module/specs/ViewModel.nitro.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/nitrogen/generated/shared/json/RiveViewConfig.json +18 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/core/Alignment.d.ts +39 -0
- package/lib/typescript/src/core/Alignment.d.ts.map +1 -0
- package/lib/typescript/src/core/Errors.d.ts +14 -0
- package/lib/typescript/src/core/Errors.d.ts.map +1 -0
- package/lib/typescript/src/core/Events.d.ts +26 -0
- package/lib/typescript/src/core/Events.d.ts.map +1 -0
- package/lib/typescript/src/core/Fit.d.ts +48 -0
- package/lib/typescript/src/core/Fit.d.ts.map +1 -0
- package/lib/typescript/src/core/NitroRiveViewComponent.d.ts +4 -0
- package/lib/typescript/src/core/NitroRiveViewComponent.d.ts.map +1 -0
- package/lib/typescript/src/core/ReferencedAssets.d.ts +15 -0
- package/lib/typescript/src/core/ReferencedAssets.d.ts.map +1 -0
- package/lib/typescript/src/core/RiveColor.d.ts +53 -0
- package/lib/typescript/src/core/RiveColor.d.ts.map +1 -0
- package/lib/typescript/src/core/RiveFile.d.ts +62 -0
- package/lib/typescript/src/core/RiveFile.d.ts.map +1 -0
- package/lib/typescript/src/core/RiveImages.d.ts +3 -0
- package/lib/typescript/src/core/RiveImages.d.ts.map +1 -0
- package/lib/typescript/src/core/RiveView.d.ts +38 -0
- package/lib/typescript/src/core/RiveView.d.ts.map +1 -0
- package/lib/typescript/src/core/callDispose.d.ts +7 -0
- package/lib/typescript/src/core/callDispose.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRive.d.ts +9 -0
- package/lib/typescript/src/hooks/useRive.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveBoolean.d.ts +11 -0
- package/lib/typescript/src/hooks/useRiveBoolean.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveColor.d.ts +14 -0
- package/lib/typescript/src/hooks/useRiveColor.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveEnum.d.ts +11 -0
- package/lib/typescript/src/hooks/useRiveEnum.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveFile.d.ts +24 -0
- package/lib/typescript/src/hooks/useRiveFile.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveNumber.d.ts +11 -0
- package/lib/typescript/src/hooks/useRiveNumber.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveProperty.d.ts +22 -0
- package/lib/typescript/src/hooks/useRiveProperty.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveString.d.ts +11 -0
- package/lib/typescript/src/hooks/useRiveString.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRiveTrigger.d.ts +11 -0
- package/lib/typescript/src/hooks/useRiveTrigger.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +32 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/specs/ArtboardBy.d.ts +20 -0
- package/lib/typescript/src/specs/ArtboardBy.d.ts.map +1 -0
- package/lib/typescript/src/specs/Rive.nitro.d.ts +8 -0
- package/lib/typescript/src/specs/Rive.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/RiveFile.nitro.d.ts +42 -0
- package/lib/typescript/src/specs/RiveFile.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/RiveImage.nitro.d.ts +43 -0
- package/lib/typescript/src/specs/RiveImage.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/RiveView.nitro.d.ts +139 -0
- package/lib/typescript/src/specs/RiveView.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ViewModel.nitro.d.ts +103 -0
- package/lib/typescript/src/specs/ViewModel.nitro.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +33 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/nitrogen/generated/android/c++/JAlignment.hpp +80 -0
- package/nitrogen/generated/android/c++/JArtboardBy.hpp +68 -0
- package/nitrogen/generated/android/c++/JArtboardByTypes.hpp +59 -0
- package/nitrogen/generated/android/c++/JDataBindByName.hpp +57 -0
- package/nitrogen/generated/android/c++/JDataBindMode.hpp +59 -0
- package/nitrogen/generated/android/c++/JEventPropertiesOutput.cpp +30 -0
- package/nitrogen/generated/android/c++/JEventPropertiesOutput.hpp +83 -0
- package/nitrogen/generated/android/c++/JFit.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_RiveError.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_UnifiedRiveEvent.hpp +84 -0
- package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
- package/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.cpp +134 -0
- package/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp +96 -0
- package/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.cpp +104 -0
- package/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp +67 -0
- package/nitrogen/generated/android/c++/JHybridRiveImageSpec.cpp +52 -0
- package/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp +65 -0
- package/nitrogen/generated/android/c++/JHybridRiveSpec.cpp +52 -0
- package/nitrogen/generated/android/c++/JHybridRiveSpec.hpp +65 -0
- package/nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp +299 -0
- package/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp +97 -0
- package/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp +65 -0
- package/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp +65 -0
- package/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp +66 -0
- package/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp +66 -0
- package/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp +115 -0
- package/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp +71 -0
- package/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp +65 -0
- package/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.cpp +48 -0
- package/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp +65 -0
- package/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp +86 -0
- package/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp +70 -0
- package/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp +66 -0
- package/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp +61 -0
- package/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JReferencedAssetsType.hpp +77 -0
- package/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp +77 -0
- package/nitrogen/generated/android/c++/JRiveError.hpp +63 -0
- package/nitrogen/generated/android/c++/JRiveErrorType.hpp +74 -0
- package/nitrogen/generated/android/c++/JRiveEventType.hpp +59 -0
- package/nitrogen/generated/android/c++/JUnifiedRiveEvent.hpp +96 -0
- package/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.cpp +30 -0
- package/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp +90 -0
- package/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp +88 -0
- package/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Alignment.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardBy.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ArtboardByTypes.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindByName.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/DataBindMode.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/EventPropertiesOutput.kt +72 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Fit.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_RiveError.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_UnifiedRiveEvent.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_bool.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_double.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Func_void_std__string.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt +67 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt +57 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveSpec.kt +57 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt +183 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt +83 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt +55 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt +79 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ReferencedAssetsType.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/ResolvedReferencedAsset.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveError.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveErrorType.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/RiveEventType.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/UnifiedRiveEvent.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.kt +72 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/riveOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewStateUpdater.kt +23 -0
- package/nitrogen/generated/android/rive+autolinking.cmake +115 -0
- package/nitrogen/generated/android/rive+autolinking.gradle +27 -0
- package/nitrogen/generated/android/riveOnLoad.cpp +192 -0
- package/nitrogen/generated/android/riveOnLoad.hpp +25 -0
- package/nitrogen/generated/ios/RNRive+autolinking.rb +60 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.cpp +360 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp +1180 -0
- package/nitrogen/generated/ios/RNRive-Swift-Cxx-Umbrella.hpp +161 -0
- package/nitrogen/generated/ios/RNRiveAutolinking.mm +137 -0
- package/nitrogen/generated/ios/RNRiveAutolinking.swift +220 -0
- package/nitrogen/generated/ios/c++/HybridRiveFileFactorySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridRiveFileFactorySpecSwift.hpp +119 -0
- package/nitrogen/generated/ios/c++/HybridRiveFileSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridRiveFileSpecSwift.hpp +121 -0
- package/nitrogen/generated/ios/c++/HybridRiveImageFactorySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridRiveImageFactorySpecSwift.hpp +100 -0
- package/nitrogen/generated/ios/c++/HybridRiveImageSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridRiveImageSpecSwift.hpp +71 -0
- package/nitrogen/generated/ios/c++/HybridRiveSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridRiveSpecSwift.hpp +76 -0
- package/nitrogen/generated/ios/c++/HybridRiveViewSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridRiveViewSpecSwift.hpp +277 -0
- package/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelBooleanPropertySpecSwift.hpp +88 -0
- package/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelColorPropertySpecSwift.hpp +88 -0
- package/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelEnumPropertySpecSwift.hpp +90 -0
- package/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelImagePropertySpecSwift.hpp +94 -0
- package/nitrogen/generated/ios/c++/HybridViewModelInstanceSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelInstanceSpecSwift.hpp +149 -0
- package/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelNumberPropertySpecSwift.hpp +88 -0
- package/nitrogen/generated/ios/c++/HybridViewModelPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelPropertySpecSwift.hpp +69 -0
- package/nitrogen/generated/ios/c++/HybridViewModelSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelSpecSwift.hpp +113 -0
- package/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelStringPropertySpecSwift.hpp +90 -0
- package/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridViewModelTriggerPropertySpecSwift.hpp +89 -0
- package/nitrogen/generated/ios/c++/views/HybridRiveViewComponent.mm +136 -0
- package/nitrogen/generated/ios/swift/Alignment.swift +68 -0
- package/nitrogen/generated/ios/swift/ArtboardBy.swift +89 -0
- package/nitrogen/generated/ios/swift/ArtboardByTypes.swift +40 -0
- package/nitrogen/generated/ios/swift/DataBindByName.swift +36 -0
- package/nitrogen/generated/ios/swift/DataBindMode.swift +40 -0
- package/nitrogen/generated/ios/swift/EventPropertiesOutput.swift +19 -0
- package/nitrogen/generated/ios/swift/Fit.swift +64 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_RiveError.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_UnifiedRiveEvent.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_double.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_HybridRiveFileSpec_.swift +51 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_HybridRiveImageSpec_.swift +51 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridRiveFileFactorySpec.swift +59 -0
- package/nitrogen/generated/ios/swift/HybridRiveFileFactorySpec_cxx.swift +207 -0
- package/nitrogen/generated/ios/swift/HybridRiveFileSpec.swift +59 -0
- package/nitrogen/generated/ios/swift/HybridRiveFileSpec_cxx.swift +204 -0
- package/nitrogen/generated/ios/swift/HybridRiveImageFactorySpec.swift +58 -0
- package/nitrogen/generated/ios/swift/HybridRiveImageFactorySpec_cxx.swift +185 -0
- package/nitrogen/generated/ios/swift/HybridRiveImageSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridRiveImageSpec_cxx.swift +126 -0
- package/nitrogen/generated/ios/swift/HybridRiveSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridRiveSpec_cxx.swift +131 -0
- package/nitrogen/generated/ios/swift/HybridRiveViewSpec.swift +79 -0
- package/nitrogen/generated/ios/swift/HybridRiveViewSpec_cxx.swift +623 -0
- package/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridViewModelBooleanPropertySpec_cxx.swift +158 -0
- package/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridViewModelColorPropertySpec_cxx.swift +158 -0
- package/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridViewModelEnumPropertySpec_cxx.swift +158 -0
- package/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec.swift +58 -0
- package/nitrogen/generated/ios/swift/HybridViewModelImagePropertySpec_cxx.swift +171 -0
- package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec.swift +62 -0
- package/nitrogen/generated/ios/swift/HybridViewModelInstanceSpec_cxx.swift +271 -0
- package/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridViewModelNumberPropertySpec_cxx.swift +158 -0
- package/nitrogen/generated/ios/swift/HybridViewModelPropertySpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridViewModelPropertySpec_cxx.swift +121 -0
- package/nitrogen/generated/ios/swift/HybridViewModelSpec.swift +61 -0
- package/nitrogen/generated/ios/swift/HybridViewModelSpec_cxx.swift +222 -0
- package/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridViewModelStringPropertySpec_cxx.swift +158 -0
- package/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec.swift +58 -0
- package/nitrogen/generated/ios/swift/HybridViewModelTriggerPropertySpec_cxx.swift +160 -0
- package/nitrogen/generated/ios/swift/ReferencedAssetsType.swift +75 -0
- package/nitrogen/generated/ios/swift/ResolvedReferencedAsset.swift +185 -0
- package/nitrogen/generated/ios/swift/RiveError.swift +47 -0
- package/nitrogen/generated/ios/swift/RiveErrorType.swift +60 -0
- package/nitrogen/generated/ios/swift/RiveEventType.swift +40 -0
- package/nitrogen/generated/ios/swift/UnifiedRiveEvent.swift +213 -0
- package/nitrogen/generated/ios/swift/Variant__any_HybridViewModelInstanceSpec__DataBindMode_DataBindByName.swift +19 -0
- package/nitrogen/generated/shared/c++/Alignment.hpp +104 -0
- package/nitrogen/generated/shared/c++/ArtboardBy.hpp +86 -0
- package/nitrogen/generated/shared/c++/ArtboardByTypes.hpp +76 -0
- package/nitrogen/generated/shared/c++/DataBindByName.hpp +75 -0
- package/nitrogen/generated/shared/c++/DataBindMode.hpp +62 -0
- package/nitrogen/generated/shared/c++/Fit.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridRiveFileFactorySpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridRiveFileFactorySpec.hpp +74 -0
- package/nitrogen/generated/shared/c++/HybridRiveFileSpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridRiveFileSpec.hpp +75 -0
- package/nitrogen/generated/shared/c++/HybridRiveImageFactorySpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridRiveImageFactorySpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/HybridRiveImageSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridRiveImageSpec.hpp +62 -0
- package/nitrogen/generated/shared/c++/HybridRiveSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridRiveSpec.hpp +62 -0
- package/nitrogen/generated/shared/c++/HybridRiveViewSpec.cpp +54 -0
- package/nitrogen/generated/shared/c++/HybridRiveViewSpec.hpp +122 -0
- package/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridViewModelBooleanPropertySpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridViewModelColorPropertySpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridViewModelEnumPropertySpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridViewModelImagePropertySpec.hpp +71 -0
- package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.cpp +28 -0
- package/nitrogen/generated/shared/c++/HybridViewModelInstanceSpec.hpp +90 -0
- package/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridViewModelNumberPropertySpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridViewModelPropertySpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridViewModelPropertySpec.hpp +62 -0
- package/nitrogen/generated/shared/c++/HybridViewModelSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridViewModelSpec.hpp +71 -0
- package/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridViewModelStringPropertySpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridViewModelTriggerPropertySpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/ReferencedAssetsType.hpp +79 -0
- package/nitrogen/generated/shared/c++/ResolvedReferencedAsset.hpp +95 -0
- package/nitrogen/generated/shared/c++/RiveError.hpp +81 -0
- package/nitrogen/generated/shared/c++/RiveErrorType.hpp +75 -0
- package/nitrogen/generated/shared/c++/RiveEventType.hpp +62 -0
- package/nitrogen/generated/shared/c++/UnifiedRiveEvent.hpp +100 -0
- package/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.cpp +183 -0
- package/nitrogen/generated/shared/c++/views/HybridRiveViewComponent.hpp +124 -0
- package/nitrogen/generated/shared/json/RiveViewConfig.json +18 -0
- package/package.json +193 -0
- package/src/core/Alignment.ts +46 -0
- package/src/core/Errors.ts +14 -0
- package/src/core/Events.ts +31 -0
- package/src/core/Fit.ts +54 -0
- package/src/core/NitroRiveViewComponent.ts +18 -0
- package/src/core/ReferencedAssets.ts +14 -0
- package/src/core/RiveColor.ts +100 -0
- package/src/core/RiveFile.ts +149 -0
- package/src/core/RiveImages.ts +5 -0
- package/src/core/RiveView.tsx +48 -0
- package/src/core/callDispose.ts +18 -0
- package/src/hooks/useRive.ts +56 -0
- package/src/hooks/useRiveBoolean.ts +28 -0
- package/src/hooks/useRiveColor.ts +47 -0
- package/src/hooks/useRiveEnum.ts +27 -0
- package/src/hooks/useRiveFile.ts +184 -0
- package/src/hooks/useRiveNumber.ts +28 -0
- package/src/hooks/useRiveProperty.ts +110 -0
- package/src/hooks/useRiveString.ts +28 -0
- package/src/hooks/useRiveTrigger.ts +49 -0
- package/src/index.tsx +52 -0
- package/src/specs/ArtboardBy.ts +31 -0
- package/src/specs/Rive.nitro.ts +6 -0
- package/src/specs/RiveFile.nitro.ts +57 -0
- package/src/specs/RiveImage.nitro.ts +42 -0
- package/src/specs/RiveView.nitro.ts +149 -0
- package/src/specs/ViewModel.nitro.ts +126 -0
- package/src/types.tsx +34 -0
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
package com.rive
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint
|
|
4
|
+
import android.widget.FrameLayout
|
|
5
|
+
import androidx.lifecycle.LifecycleObserver
|
|
6
|
+
import androidx.lifecycle.LifecycleOwner
|
|
7
|
+
import app.rive.runtime.kotlin.RiveAnimationView
|
|
8
|
+
import app.rive.runtime.kotlin.RiveViewLifecycleObserver
|
|
9
|
+
import app.rive.runtime.kotlin.controllers.RiveFileController
|
|
10
|
+
import app.rive.runtime.kotlin.core.RefCount
|
|
11
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
12
|
+
import app.rive.runtime.kotlin.core.Alignment
|
|
13
|
+
import app.rive.runtime.kotlin.core.File
|
|
14
|
+
import app.rive.runtime.kotlin.core.Fit
|
|
15
|
+
import app.rive.runtime.kotlin.core.RiveEvent
|
|
16
|
+
import app.rive.runtime.kotlin.core.RiveOpenURLEvent
|
|
17
|
+
import app.rive.runtime.kotlin.core.SMIBoolean
|
|
18
|
+
import app.rive.runtime.kotlin.core.SMIInput
|
|
19
|
+
import app.rive.runtime.kotlin.core.SMINumber
|
|
20
|
+
import app.rive.runtime.kotlin.core.SMITrigger
|
|
21
|
+
import app.rive.runtime.kotlin.core.ViewModelInstance
|
|
22
|
+
import app.rive.runtime.kotlin.core.errors.ViewModelException
|
|
23
|
+
import com.margelo.nitro.rive.EventPropertiesOutput
|
|
24
|
+
import com.margelo.nitro.rive.EventPropertiesOutputExtensions as EPO
|
|
25
|
+
import com.margelo.nitro.rive.RiveEventType
|
|
26
|
+
import com.margelo.nitro.rive.UnifiedRiveEvent as RNEvent
|
|
27
|
+
import kotlinx.coroutines.CompletableDeferred
|
|
28
|
+
|
|
29
|
+
sealed class BindData {
|
|
30
|
+
data object None : BindData()
|
|
31
|
+
data object Auto : BindData()
|
|
32
|
+
data class Instance(val instance: ViewModelInstance) : BindData()
|
|
33
|
+
data class ByName(val name: String) : BindData()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
data class ViewConfiguration(
|
|
37
|
+
val artboardName: String?,
|
|
38
|
+
val stateMachineName: String?,
|
|
39
|
+
val autoPlay: Boolean,
|
|
40
|
+
val riveFile: File,
|
|
41
|
+
val alignment: Alignment,
|
|
42
|
+
val fit: Fit,
|
|
43
|
+
val layoutScaleFactor: Float?,
|
|
44
|
+
val bindData: BindData
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
class ReactNativeRiveViewLifecycleObserver(dependencies: MutableList<RefCount>) :
|
|
48
|
+
RiveViewLifecycleObserver(dependencies) {
|
|
49
|
+
@SuppressLint("MissingSuperCall")
|
|
50
|
+
override fun onDestroy(owner: LifecycleOwner) {
|
|
51
|
+
owner.lifecycle.removeObserver(this)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
fun dispose() {
|
|
55
|
+
dependencies.forEach { it.release() }
|
|
56
|
+
dependencies.clear()
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@SuppressLint("ViewConstructor")
|
|
61
|
+
class ReactNativeRiveAnimationView(context: ThemedReactContext) : RiveAnimationView(context) {
|
|
62
|
+
fun dispose() {
|
|
63
|
+
(lifecycleObserver as ReactNativeRiveViewLifecycleObserver).dispose()
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@SuppressLint("VisibleForTests")
|
|
67
|
+
override fun createObserver(): LifecycleObserver {
|
|
68
|
+
return ReactNativeRiveViewLifecycleObserver(
|
|
69
|
+
listOfNotNull(controller, rendererAttributes.assetLoader).toMutableList()
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@SuppressLint("ViewConstructor")
|
|
75
|
+
class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
|
|
76
|
+
internal var riveAnimationView: ReactNativeRiveAnimationView? = null
|
|
77
|
+
private var eventListeners: MutableList<RiveFileController.RiveEventListener> = mutableListOf()
|
|
78
|
+
private val viewReadyDeferred = CompletableDeferred<Boolean>()
|
|
79
|
+
private var _activeStateMachineName: String? = null
|
|
80
|
+
private var willDispose = false
|
|
81
|
+
|
|
82
|
+
init {
|
|
83
|
+
riveAnimationView = ReactNativeRiveAnimationView(context)
|
|
84
|
+
addView(riveAnimationView)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
fun dispose() {
|
|
88
|
+
willDispose = true
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
override fun onDetachedFromWindow() {
|
|
92
|
+
if (willDispose) {
|
|
93
|
+
riveAnimationView?.dispose()
|
|
94
|
+
removeEventListeners()
|
|
95
|
+
}
|
|
96
|
+
super.onDetachedFromWindow()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
//region Public Methods (API)
|
|
100
|
+
suspend fun awaitViewReady(): Boolean {
|
|
101
|
+
return viewReadyDeferred.await()
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
fun configure(config: ViewConfiguration, dataBindingChanged: Boolean, reload: Boolean = false, initialUpdate: Boolean = false) {
|
|
105
|
+
if (reload) {
|
|
106
|
+
riveAnimationView?.setRiveFile(
|
|
107
|
+
config.riveFile,
|
|
108
|
+
artboardName = config.artboardName,
|
|
109
|
+
stateMachineName = config.stateMachineName,
|
|
110
|
+
autoplay = config.autoPlay,
|
|
111
|
+
alignment = config.alignment,
|
|
112
|
+
fit = config.fit
|
|
113
|
+
)
|
|
114
|
+
_activeStateMachineName = getSafeStateMachineName()
|
|
115
|
+
} else {
|
|
116
|
+
riveAnimationView?.alignment = config.alignment
|
|
117
|
+
riveAnimationView?.fit = config.fit
|
|
118
|
+
// TODO: this seems to require a reload for the view to take the new value (bug on Android)
|
|
119
|
+
riveAnimationView?.layoutScaleFactor = config.layoutScaleFactor
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (dataBindingChanged || initialUpdate) {
|
|
123
|
+
applyDataBinding(config.bindData)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
viewReadyDeferred.complete(true)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
fun bindViewModelInstance(vmi: ViewModelInstance) {
|
|
130
|
+
val stateMachines = riveAnimationView?.controller?.stateMachines
|
|
131
|
+
if (!stateMachines.isNullOrEmpty()) {
|
|
132
|
+
stateMachines.first().viewModelInstance = vmi
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
fun getViewModelInstance(): ViewModelInstance? {
|
|
137
|
+
val stateMachines = riveAnimationView?.controller?.stateMachines
|
|
138
|
+
return if (!stateMachines.isNullOrEmpty()) {
|
|
139
|
+
stateMachines.first().viewModelInstance
|
|
140
|
+
} else {
|
|
141
|
+
null
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
fun applyDataBinding(bindData: BindData) {
|
|
146
|
+
val stateMachines = riveAnimationView?.controller?.stateMachines
|
|
147
|
+
if (stateMachines.isNullOrEmpty()) return
|
|
148
|
+
|
|
149
|
+
val stateMachine = stateMachines.first()
|
|
150
|
+
|
|
151
|
+
when (bindData) {
|
|
152
|
+
is BindData.None -> {
|
|
153
|
+
stateMachine.viewModelInstance = null
|
|
154
|
+
}
|
|
155
|
+
is BindData.Auto -> {
|
|
156
|
+
val artboard = riveAnimationView?.controller?.activeArtboard
|
|
157
|
+
val file = riveAnimationView?.controller?.file
|
|
158
|
+
if (artboard != null && file != null) {
|
|
159
|
+
try {
|
|
160
|
+
file.defaultViewModelForArtboard(artboard)
|
|
161
|
+
} catch (e: ViewModelException) {
|
|
162
|
+
null
|
|
163
|
+
}?.let {
|
|
164
|
+
val instance = it.createDefaultInstance()
|
|
165
|
+
stateMachine.viewModelInstance = instance
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
is BindData.Instance -> {
|
|
170
|
+
stateMachine.viewModelInstance = bindData.instance
|
|
171
|
+
}
|
|
172
|
+
is BindData.ByName -> {
|
|
173
|
+
val artboard = riveAnimationView?.controller?.activeArtboard
|
|
174
|
+
val file = riveAnimationView?.controller?.file
|
|
175
|
+
if (artboard != null && file != null) {
|
|
176
|
+
val viewModel = file.defaultViewModelForArtboard(artboard)
|
|
177
|
+
val instance = viewModel.createInstanceFromName(bindData.name)
|
|
178
|
+
stateMachine.viewModelInstance = instance
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
stateMachine.name.let { smName ->
|
|
184
|
+
riveAnimationView?.play(smName, isStateMachine = true)
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
fun play() = riveAnimationView?.play()
|
|
189
|
+
|
|
190
|
+
fun pause() = riveAnimationView?.pause()
|
|
191
|
+
|
|
192
|
+
fun reset() = riveAnimationView?.reset()
|
|
193
|
+
|
|
194
|
+
fun playIfNeeded() {
|
|
195
|
+
if (riveAnimationView?.isPlaying == false) {
|
|
196
|
+
riveAnimationView?.post {
|
|
197
|
+
riveAnimationView?.play()
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
|
|
203
|
+
val eventListener = object : RiveFileController.RiveEventListener {
|
|
204
|
+
override fun notifyEvent(event: RiveEvent) {
|
|
205
|
+
// TODO: Handle general events better (in case of audio events)
|
|
206
|
+
val rnEvent = RNEvent(
|
|
207
|
+
name = event.name,
|
|
208
|
+
type = if (event is RiveOpenURLEvent) RiveEventType.OPENURL else RiveEventType.GENERAL,
|
|
209
|
+
delay = event.delay.toDouble(),
|
|
210
|
+
properties = convertEventProperties(event.properties),
|
|
211
|
+
url = (event as? RiveOpenURLEvent)?.url,
|
|
212
|
+
target = (event as? RiveOpenURLEvent)?.target
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
onEvent(rnEvent)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
riveAnimationView?.addEventListener(eventListener)
|
|
219
|
+
eventListeners.add(eventListener)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
fun removeEventListeners() {
|
|
223
|
+
for (eventListener in eventListeners) {
|
|
224
|
+
riveAnimationView?.removeEventListener(eventListener)
|
|
225
|
+
}
|
|
226
|
+
eventListeners.clear()
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
fun setNumberInputValue(name: String, value: Double, path: String?) {
|
|
230
|
+
handleInput(
|
|
231
|
+
name = name,
|
|
232
|
+
path = path,
|
|
233
|
+
type = InputType.Number,
|
|
234
|
+
onSuccess = { _ ->
|
|
235
|
+
// Use Rive Android's queue system to actually set the input
|
|
236
|
+
riveAnimationView?.controller?.setNumberState(
|
|
237
|
+
stateMachineName = activeStateMachineName,
|
|
238
|
+
inputName = name,
|
|
239
|
+
value = value.toFloat(),
|
|
240
|
+
path = path
|
|
241
|
+
)
|
|
242
|
+
value
|
|
243
|
+
}
|
|
244
|
+
)
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
fun getNumberInputValue(name: String, path: String?): Double {
|
|
248
|
+
return handleInput(
|
|
249
|
+
name = name,
|
|
250
|
+
path = path,
|
|
251
|
+
type = InputType.Number,
|
|
252
|
+
onSuccess = { smi -> (smi as SMINumber).value.toDouble() }
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
fun setBooleanInputValue(name: String, value: Boolean, path: String?) {
|
|
257
|
+
handleInput(
|
|
258
|
+
name = name,
|
|
259
|
+
path = path,
|
|
260
|
+
type = InputType.BooleanInput,
|
|
261
|
+
onSuccess = { _ ->
|
|
262
|
+
// Use Rive Android's queue system to actually set the input
|
|
263
|
+
riveAnimationView?.controller?.setBooleanState(
|
|
264
|
+
stateMachineName = activeStateMachineName,
|
|
265
|
+
inputName = name,
|
|
266
|
+
value = value,
|
|
267
|
+
path = path
|
|
268
|
+
)
|
|
269
|
+
value
|
|
270
|
+
}
|
|
271
|
+
)
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
fun getBooleanInputValue(name: String, path: String?): Boolean {
|
|
275
|
+
return handleInput(
|
|
276
|
+
name = name,
|
|
277
|
+
path = path,
|
|
278
|
+
type = InputType.BooleanInput,
|
|
279
|
+
onSuccess = { smi -> (smi as SMIBoolean).value }
|
|
280
|
+
)
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
fun triggerInput(name: String, path: String?) {
|
|
284
|
+
handleInput(
|
|
285
|
+
name = name,
|
|
286
|
+
path = path,
|
|
287
|
+
type = InputType.Trigger,
|
|
288
|
+
onSuccess = {
|
|
289
|
+
riveAnimationView?.controller?.fireState(
|
|
290
|
+
stateMachineName = activeStateMachineName,
|
|
291
|
+
inputName = name,
|
|
292
|
+
path = path
|
|
293
|
+
)
|
|
294
|
+
}
|
|
295
|
+
)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
fun setTextRunValue(name: String, value: String, path: String?) {
|
|
299
|
+
try {
|
|
300
|
+
if (path == null) {
|
|
301
|
+
riveAnimationView?.setTextRunValue(name, value)
|
|
302
|
+
} else {
|
|
303
|
+
riveAnimationView?.setTextRunValue(name, value, path)
|
|
304
|
+
}
|
|
305
|
+
} catch (e: Exception) {
|
|
306
|
+
throw Error(e.message)
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
fun getTextRunValue(name: String, path: String?): String {
|
|
311
|
+
val value = if (path == null) {
|
|
312
|
+
riveAnimationView?.getTextRunValue(name)
|
|
313
|
+
} else {
|
|
314
|
+
riveAnimationView?.getTextRunValue(name, path)
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (value == null) {
|
|
318
|
+
throw Error("Could not find text run value (name: $name, path: $path)")
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return value
|
|
322
|
+
}
|
|
323
|
+
//endregion
|
|
324
|
+
|
|
325
|
+
//region Internal
|
|
326
|
+
|
|
327
|
+
private fun convertEventProperties(properties: Map<String, Any>?): Map<String, EventPropertiesOutput>? {
|
|
328
|
+
if (properties == null) return null
|
|
329
|
+
|
|
330
|
+
val newMap = HashMap<String, EventPropertiesOutput>()
|
|
331
|
+
|
|
332
|
+
properties.forEach { (key, value) ->
|
|
333
|
+
when (value) {
|
|
334
|
+
is String -> newMap.set(key, EPO.string(value))
|
|
335
|
+
is Number -> newMap.set(key, EPO.number(value.toDouble()))
|
|
336
|
+
is Boolean -> newMap.set(key, EPO.boolean(value))
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return newMap
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Gets the SMI input from the Rive file.
|
|
345
|
+
* @param name The name of the input.
|
|
346
|
+
* @param path The path of the input.
|
|
347
|
+
* @return The SMI input.
|
|
348
|
+
* @throws Error if the input is not found.
|
|
349
|
+
*/
|
|
350
|
+
private fun getSMIInput(name: String, path: String?): SMIInput {
|
|
351
|
+
try {
|
|
352
|
+
val smi = if (path == null) {
|
|
353
|
+
val stateMachine = riveAnimationView?.controller?.stateMachines?.get(0)
|
|
354
|
+
stateMachine?.input(name)
|
|
355
|
+
} else {
|
|
356
|
+
val artboard = riveAnimationView?.controller?.activeArtboard
|
|
357
|
+
artboard?.input(name, path)
|
|
358
|
+
}
|
|
359
|
+
if (smi == null) throw Exception("Could not find input (name: $name, path: $path)")
|
|
360
|
+
return smi
|
|
361
|
+
} catch (e: Exception) {
|
|
362
|
+
throw Error(e.message)
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// TODO: this is throwing when autoplay is false
|
|
367
|
+
// TODO: This is a temporary solution to get the state machine name as Android supports
|
|
368
|
+
// playing multiple state machines, but in React Native we only allow playing one.
|
|
369
|
+
/**
|
|
370
|
+
* Gets the name of the active state machine.
|
|
371
|
+
* @throws Error if the state machine name could not be found
|
|
372
|
+
* @return The name of the state machine that "is playing" / "will be played"
|
|
373
|
+
*/
|
|
374
|
+
private fun getSafeStateMachineName(): String {
|
|
375
|
+
try {
|
|
376
|
+
val stateMachines = riveAnimationView?.controller?.stateMachines
|
|
377
|
+
if (stateMachines.isNullOrEmpty()) {
|
|
378
|
+
throw Exception("No state machines found in the Rive file")
|
|
379
|
+
}
|
|
380
|
+
return stateMachines.first().name
|
|
381
|
+
} catch (e: Exception) {
|
|
382
|
+
throw Error(e.message)
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* The name of the active state machine.
|
|
388
|
+
* @throws Error if the state machine name could not be found
|
|
389
|
+
* @return The name of the state machine that "is playing" / "will be played"
|
|
390
|
+
*/
|
|
391
|
+
private val activeStateMachineName: String
|
|
392
|
+
get() = _activeStateMachineName
|
|
393
|
+
?: throw Error("View not configured. Could not find active state machine name")
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* The type of the state machine input.
|
|
397
|
+
* @param T The type of the state machine input.
|
|
398
|
+
*/
|
|
399
|
+
private sealed class InputType<T> {
|
|
400
|
+
data object Number : InputType<Double>()
|
|
401
|
+
data object BooleanInput : InputType<Boolean>()
|
|
402
|
+
data object Trigger : InputType<Unit>()
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Handles the state machine input.
|
|
407
|
+
* @param name The name of the input.
|
|
408
|
+
* @param path The path of the input.
|
|
409
|
+
* @param type The type of the input.
|
|
410
|
+
* @param onSuccess The function to call when the input is successfully handled.
|
|
411
|
+
* @return The value of the input.
|
|
412
|
+
*/
|
|
413
|
+
private inline fun <T> handleInput(
|
|
414
|
+
name: String,
|
|
415
|
+
path: String?,
|
|
416
|
+
type: InputType<T>,
|
|
417
|
+
onSuccess: (SMIInput) -> T
|
|
418
|
+
): T {
|
|
419
|
+
val smi = getSMIInput(name, path)
|
|
420
|
+
when (type) {
|
|
421
|
+
is InputType.Number -> if (smi !is SMINumber) throw Error("State machine input is not a number")
|
|
422
|
+
is InputType.BooleanInput -> if (smi !is SMIBoolean) throw Error("State machine input is not a boolean")
|
|
423
|
+
is InputType.Trigger -> if (smi !is SMITrigger) throw Error("State machine input is not a trigger")
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
try {
|
|
427
|
+
return onSuccess(smi)
|
|
428
|
+
} catch (e: Exception) {
|
|
429
|
+
throw Error("Could not handle ${type::class.simpleName?.lowercase()} state machine input")
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
//endregion
|
|
433
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
package com.rive
|
|
2
|
+
|
|
3
|
+
import android.view.View
|
|
4
|
+
import com.margelo.nitro.rive.views.HybridRiveViewManager
|
|
5
|
+
|
|
6
|
+
class RiveViewManager : HybridRiveViewManager() {
|
|
7
|
+
override fun onDropViewInstance(view: View) {
|
|
8
|
+
(view as? RiveReactNativeView)?.dispose()
|
|
9
|
+
super.onDropViewInstance(view)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import RiveRuntime
|
|
3
|
+
|
|
4
|
+
/// Protocol for Rive property types that support listener management
|
|
5
|
+
protocol RivePropertyWithListeners: AnyObject {
|
|
6
|
+
associatedtype ListenerValueType
|
|
7
|
+
typealias ListenerType = (ListenerValueType) -> Void
|
|
8
|
+
|
|
9
|
+
func addListener(_ callback: @escaping ListenerType) -> UUID
|
|
10
|
+
func removeListener(_ id: UUID)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/// Protocol for Rive property types with void listeners (Trigger, Image)
|
|
14
|
+
protocol RivePropertyWithVoidListeners: AnyObject {
|
|
15
|
+
func addListener(_ callback: @escaping () -> Void) -> UUID
|
|
16
|
+
func removeListener(_ id: UUID)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
typealias BooleanPropertyType = RiveDataBindingViewModel.Instance.BooleanProperty
|
|
20
|
+
typealias NumberPropertyType = RiveDataBindingViewModel.Instance.NumberProperty
|
|
21
|
+
typealias StringPropertyType = RiveDataBindingViewModel.Instance.StringProperty
|
|
22
|
+
typealias EnumPropertyType = RiveDataBindingViewModel.Instance.EnumProperty
|
|
23
|
+
typealias ColorPropertyType = RiveDataBindingViewModel.Instance.ColorProperty
|
|
24
|
+
typealias TriggerPropertyType = RiveDataBindingViewModel.Instance.TriggerProperty
|
|
25
|
+
typealias ImagePropertyType = RiveDataBindingViewModel.Instance.ImageProperty
|
|
26
|
+
|
|
27
|
+
// Make all Rive property types conform to the protocol
|
|
28
|
+
extension BooleanPropertyType: RivePropertyWithListeners {
|
|
29
|
+
typealias ListenerValueType = Bool // Native: Bool → Bool (no conversion)
|
|
30
|
+
}
|
|
31
|
+
extension NumberPropertyType: RivePropertyWithListeners {
|
|
32
|
+
typealias ListenerValueType = Float // Native: Float → Double (needs conversion)
|
|
33
|
+
}
|
|
34
|
+
extension StringPropertyType: RivePropertyWithListeners {
|
|
35
|
+
typealias ListenerValueType = String // Native: String → String (no conversion)
|
|
36
|
+
}
|
|
37
|
+
extension EnumPropertyType: RivePropertyWithListeners {
|
|
38
|
+
typealias ListenerValueType = String // Native: String → String (no conversion)
|
|
39
|
+
}
|
|
40
|
+
extension ColorPropertyType: RivePropertyWithListeners {
|
|
41
|
+
typealias ListenerValueType = UIColor // Native: UIColor → Double (needs conversion)
|
|
42
|
+
}
|
|
43
|
+
extension TriggerPropertyType: RivePropertyWithListeners {
|
|
44
|
+
func addListener(_ callback: @escaping ListenerType) -> UUID {
|
|
45
|
+
addListener { callback(()) }
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
typealias ListenerValueType = Void
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
extension ImagePropertyType: RivePropertyWithListeners {
|
|
52
|
+
typealias ListenerValueType = Void
|
|
53
|
+
|
|
54
|
+
func addListener(_ callback: @escaping ListenerType) -> UUID {
|
|
55
|
+
addListener { callback(()) }
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/// Helper class for managing ViewModel property listeners
|
|
60
|
+
class PropertyListenerHelper<PropertyType: RivePropertyWithListeners> {
|
|
61
|
+
private var listenerIds: [UUID] = []
|
|
62
|
+
weak var property: PropertyType?
|
|
63
|
+
|
|
64
|
+
init(property: PropertyType) {
|
|
65
|
+
self.property = property
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// Adds a listener to the property and automatically tracks its ID for cleanup
|
|
69
|
+
func addListener(_ callback: @escaping (PropertyType.ListenerValueType) -> Void) {
|
|
70
|
+
guard let property = property else { return }
|
|
71
|
+
let id = property.addListener(callback)
|
|
72
|
+
listenerIds.append(id)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
func removeListeners() throws {
|
|
76
|
+
guard let property = property else { return }
|
|
77
|
+
for id in listenerIds {
|
|
78
|
+
property.removeListener(id)
|
|
79
|
+
}
|
|
80
|
+
listenerIds.removeAll()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
func dispose() throws {
|
|
84
|
+
try? removeListeners()
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/// Protocol for properties that have typed values (Bool, String, Double, etc.)
|
|
89
|
+
/// Provides a default addListener implementation
|
|
90
|
+
protocol ValuedPropertyProtocol<ValueType> {
|
|
91
|
+
associatedtype PropertyType: RivePropertyWithListeners
|
|
92
|
+
associatedtype ValueType
|
|
93
|
+
|
|
94
|
+
var property: PropertyType! { get }
|
|
95
|
+
var helper: PropertyListenerHelper<PropertyType> { get }
|
|
96
|
+
|
|
97
|
+
func addListener(onChanged: @escaping (ValueType) -> Void) throws
|
|
98
|
+
func removeListeners() throws
|
|
99
|
+
func dispose() throws
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Default implementations for lifecycle methods (always available)
|
|
103
|
+
extension ValuedPropertyProtocol {
|
|
104
|
+
func removeListeners() throws {
|
|
105
|
+
try helper.removeListeners()
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
func dispose() throws {
|
|
109
|
+
try helper.dispose()
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/// Automatic addListener() ONLY when ListenerValueType == ValueType (no conversion needed)
|
|
114
|
+
extension ValuedPropertyProtocol where PropertyType.ListenerValueType == ValueType {
|
|
115
|
+
func addListener(onChanged: @escaping (ValueType) -> Void) throws {
|
|
116
|
+
helper.addListener(onChanged) // Types match, just forward directly!
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
final class BundleDataLoader: DataLoader {
|
|
4
|
+
func load(from source: DataSource) async throws -> Data {
|
|
5
|
+
guard case .bundle(let resource, let ext) = source else {
|
|
6
|
+
throw DataLoaderError.invalidSource
|
|
7
|
+
}
|
|
8
|
+
return try loadData(resource: resource, extension: ext)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
func loadData(resource: String, extension ext: String?) throws -> Data {
|
|
12
|
+
guard let url = Bundle.main.url(forResource: resource, withExtension: ext) else {
|
|
13
|
+
let fullName = ext != nil ? "\(resource).\(ext!)" : resource
|
|
14
|
+
throw DataLoaderError.resourceNotFound(resource: fullName)
|
|
15
|
+
}
|
|
16
|
+
return try Data(contentsOf: url)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
func loadData(fileName: String) throws -> Data {
|
|
20
|
+
let name = (fileName as NSString).deletingPathExtension
|
|
21
|
+
let ext = (fileName as NSString).pathExtension
|
|
22
|
+
let fileExtension = ext.isEmpty ? nil : ext
|
|
23
|
+
return try loadData(resource: name, extension: fileExtension)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
enum DataLoaderError: Error, LocalizedError {
|
|
4
|
+
case invalidSource
|
|
5
|
+
case invalidURL(String)
|
|
6
|
+
case httpError(statusCode: Int, url: URL)
|
|
7
|
+
case resourceNotFound(resource: String)
|
|
8
|
+
case fileNotFound(path: String)
|
|
9
|
+
|
|
10
|
+
var errorDescription: String? {
|
|
11
|
+
switch self {
|
|
12
|
+
case .invalidSource:
|
|
13
|
+
return "Invalid data source type for this loader"
|
|
14
|
+
case .invalidURL(let url):
|
|
15
|
+
return "Invalid URL: \(url)"
|
|
16
|
+
case .httpError(let code, let url):
|
|
17
|
+
return "HTTP error \(code) for \(url)"
|
|
18
|
+
case .resourceNotFound(let resource):
|
|
19
|
+
return "Resource not found: \(resource)"
|
|
20
|
+
case .fileNotFound(let path):
|
|
21
|
+
return "File not found: \(path)"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
protocol DataLoader {
|
|
27
|
+
func load(from source: DataSource) async throws -> Data
|
|
28
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import NitroModules
|
|
3
|
+
|
|
4
|
+
enum DataSource {
|
|
5
|
+
case http(url: URL)
|
|
6
|
+
case file(url: URL)
|
|
7
|
+
case bundle(resource: String, extension: String?)
|
|
8
|
+
case bytes(data: Data)
|
|
9
|
+
|
|
10
|
+
static func fromURL(_ url: URL) -> DataSource {
|
|
11
|
+
return url.isFileURL ? .file(url: url) : .http(url: url)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static func fromURL(string: String) throws -> DataSource {
|
|
15
|
+
guard let url = URL(string: string) else {
|
|
16
|
+
throw DataLoaderError.invalidURL(string)
|
|
17
|
+
}
|
|
18
|
+
return fromURL(url)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static func bundle(nameWithExtension: String) -> DataSource {
|
|
22
|
+
let name = (nameWithExtension as NSString).deletingPathExtension
|
|
23
|
+
let ext = (nameWithExtension as NSString).pathExtension
|
|
24
|
+
return .bundle(resource: name, extension: ext.isEmpty ? nil : ext)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static func bytes(from buffer: ArrayBufferHolder) -> DataSource {
|
|
28
|
+
return .bytes(data: buffer.toData(copyIfNeeded: false))
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func createLoader() -> DataLoader {
|
|
32
|
+
switch self {
|
|
33
|
+
case .http:
|
|
34
|
+
return HTTPDataLoader.shared
|
|
35
|
+
case .file:
|
|
36
|
+
return FileDataLoader()
|
|
37
|
+
case .bundle:
|
|
38
|
+
return BundleDataLoader()
|
|
39
|
+
case .bytes:
|
|
40
|
+
return BytesDataLoader()
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|