@onekeyfe/react-native-skeleton 1.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +39 -0
  3. package/Skeleton.podspec +29 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +128 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +2 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/com/margelo/nitro/skeleton/Skeleton.kt +135 -0
  10. package/android/src/main/java/com/margelo/nitro/skeleton/SkeletonPackage.kt +29 -0
  11. package/ios/Skeleton.swift +126 -0
  12. package/lib/module/Skeleton.nitro.js +4 -0
  13. package/lib/module/Skeleton.nitro.js.map +1 -0
  14. package/lib/module/index.js +6 -0
  15. package/lib/module/index.js.map +1 -0
  16. package/lib/module/package.json +1 -0
  17. package/lib/nitrogen/generated/android/c++/JHybridSkeletonSpec.cpp +85 -0
  18. package/lib/nitrogen/generated/android/c++/JHybridSkeletonSpec.hpp +68 -0
  19. package/lib/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.cpp +60 -0
  20. package/lib/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.hpp +49 -0
  21. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/HybridSkeletonSpec.kt +65 -0
  22. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/skeletonOnLoad.kt +35 -0
  23. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonManager.kt +50 -0
  24. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonStateUpdater.kt +23 -0
  25. package/lib/nitrogen/generated/android/skeleton+autolinking.cmake +83 -0
  26. package/lib/nitrogen/generated/android/skeleton+autolinking.gradle +27 -0
  27. package/lib/nitrogen/generated/android/skeletonOnLoad.cpp +46 -0
  28. package/lib/nitrogen/generated/android/skeletonOnLoad.hpp +25 -0
  29. package/lib/nitrogen/generated/ios/Skeleton+autolinking.rb +60 -0
  30. package/lib/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.cpp +33 -0
  31. package/lib/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.hpp +84 -0
  32. package/lib/nitrogen/generated/ios/Skeleton-Swift-Cxx-Umbrella.hpp +44 -0
  33. package/lib/nitrogen/generated/ios/SkeletonAutolinking.mm +33 -0
  34. package/lib/nitrogen/generated/ios/SkeletonAutolinking.swift +25 -0
  35. package/lib/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.cpp +11 -0
  36. package/lib/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.hpp +84 -0
  37. package/lib/nitrogen/generated/ios/c++/views/HybridSkeletonComponent.mm +101 -0
  38. package/lib/nitrogen/generated/ios/swift/HybridSkeletonSpec.swift +57 -0
  39. package/lib/nitrogen/generated/ios/swift/HybridSkeletonSpec_cxx.swift +176 -0
  40. package/lib/nitrogen/generated/shared/c++/HybridSkeletonSpec.cpp +24 -0
  41. package/lib/nitrogen/generated/shared/c++/HybridSkeletonSpec.hpp +67 -0
  42. package/lib/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.cpp +99 -0
  43. package/lib/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.hpp +110 -0
  44. package/lib/nitrogen/generated/shared/json/SkeletonConfig.json +11 -0
  45. package/lib/typescript/package.json +1 -0
  46. package/lib/typescript/src/Skeleton.nitro.d.ts +9 -0
  47. package/lib/typescript/src/Skeleton.nitro.d.ts.map +1 -0
  48. package/lib/typescript/src/index.d.ts +3 -0
  49. package/lib/typescript/src/index.d.ts.map +1 -0
  50. package/nitro.json +17 -0
  51. package/nitrogen/generated/android/c++/JHybridSkeletonSpec.cpp +85 -0
  52. package/nitrogen/generated/android/c++/JHybridSkeletonSpec.hpp +68 -0
  53. package/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.cpp +60 -0
  54. package/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.hpp +49 -0
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/HybridSkeletonSpec.kt +65 -0
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/skeletonOnLoad.kt +35 -0
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonManager.kt +50 -0
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonStateUpdater.kt +23 -0
  59. package/nitrogen/generated/android/skeleton+autolinking.cmake +83 -0
  60. package/nitrogen/generated/android/skeleton+autolinking.gradle +27 -0
  61. package/nitrogen/generated/android/skeletonOnLoad.cpp +46 -0
  62. package/nitrogen/generated/android/skeletonOnLoad.hpp +25 -0
  63. package/nitrogen/generated/ios/Skeleton+autolinking.rb +60 -0
  64. package/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.cpp +33 -0
  65. package/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.hpp +84 -0
  66. package/nitrogen/generated/ios/Skeleton-Swift-Cxx-Umbrella.hpp +44 -0
  67. package/nitrogen/generated/ios/SkeletonAutolinking.mm +33 -0
  68. package/nitrogen/generated/ios/SkeletonAutolinking.swift +25 -0
  69. package/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.cpp +11 -0
  70. package/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.hpp +84 -0
  71. package/nitrogen/generated/ios/c++/views/HybridSkeletonComponent.mm +101 -0
  72. package/nitrogen/generated/ios/swift/HybridSkeletonSpec.swift +57 -0
  73. package/nitrogen/generated/ios/swift/HybridSkeletonSpec_cxx.swift +176 -0
  74. package/nitrogen/generated/shared/c++/HybridSkeletonSpec.cpp +24 -0
  75. package/nitrogen/generated/shared/c++/HybridSkeletonSpec.hpp +67 -0
  76. package/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.cpp +99 -0
  77. package/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.hpp +110 -0
  78. package/nitrogen/generated/shared/json/SkeletonConfig.json +11 -0
  79. package/package.json +170 -0
  80. package/src/Skeleton.nitro.ts +13 -0
  81. package/src/index.tsx +8 -0
@@ -0,0 +1,67 @@
1
+ ///
2
+ /// HybridSkeletonSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/HybridObject.hpp>)
11
+ #include <NitroModules/HybridObject.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+
16
+
17
+
18
+ #include <optional>
19
+ #include <string>
20
+ #include <vector>
21
+
22
+ namespace margelo::nitro::skeleton {
23
+
24
+ using namespace margelo::nitro;
25
+
26
+ /**
27
+ * An abstract base class for `Skeleton`
28
+ * Inherit this class to create instances of `HybridSkeletonSpec` in C++.
29
+ * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual.
30
+ * @example
31
+ * ```cpp
32
+ * class HybridSkeleton: public HybridSkeletonSpec {
33
+ * public:
34
+ * HybridSkeleton(...): HybridObject(TAG) { ... }
35
+ * // ...
36
+ * };
37
+ * ```
38
+ */
39
+ class HybridSkeletonSpec: public virtual HybridObject {
40
+ public:
41
+ // Constructor
42
+ explicit HybridSkeletonSpec(): HybridObject(TAG) { }
43
+
44
+ // Destructor
45
+ ~HybridSkeletonSpec() override = default;
46
+
47
+ public:
48
+ // Properties
49
+ virtual std::optional<double> getShimmerSpeed() = 0;
50
+ virtual void setShimmerSpeed(std::optional<double> shimmerSpeed) = 0;
51
+ virtual std::optional<std::vector<std::string>> getShimmerGradientColors() = 0;
52
+ virtual void setShimmerGradientColors(const std::optional<std::vector<std::string>>& shimmerGradientColors) = 0;
53
+
54
+ public:
55
+ // Methods
56
+
57
+
58
+ protected:
59
+ // Hybrid Setup
60
+ void loadHybridMethods() override;
61
+
62
+ protected:
63
+ // Tag for logging
64
+ static constexpr auto TAG = "Skeleton";
65
+ };
66
+
67
+ } // namespace margelo::nitro::skeleton
@@ -0,0 +1,99 @@
1
+ ///
2
+ /// HybridSkeletonComponent.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridSkeletonComponent.hpp"
9
+
10
+ #include <string>
11
+ #include <exception>
12
+ #include <utility>
13
+ #include <NitroModules/NitroDefines.hpp>
14
+ #include <NitroModules/JSIConverter.hpp>
15
+ #include <react/renderer/core/RawValue.h>
16
+ #include <react/renderer/core/ShadowNode.h>
17
+ #include <react/renderer/core/ComponentDescriptor.h>
18
+ #include <react/renderer/components/view/ViewProps.h>
19
+
20
+ namespace margelo::nitro::skeleton::views {
21
+
22
+ extern const char HybridSkeletonComponentName[] = "Skeleton";
23
+
24
+ HybridSkeletonProps::HybridSkeletonProps(const react::PropsParserContext& context,
25
+ const HybridSkeletonProps& sourceProps,
26
+ const react::RawProps& rawProps):
27
+ react::ViewProps(context, sourceProps, rawProps, filterObjectKeys),
28
+ shimmerSpeed([&]() -> CachedProp<std::optional<double>> {
29
+ try {
30
+ const react::RawValue* rawValue = rawProps.at("shimmerSpeed", nullptr, nullptr);
31
+ if (rawValue == nullptr) return sourceProps.shimmerSpeed;
32
+ const auto& [runtime, value] = (std::pair<jsi::Runtime*, jsi::Value>)*rawValue;
33
+ return CachedProp<std::optional<double>>::fromRawValue(*runtime, value, sourceProps.shimmerSpeed);
34
+ } catch (const std::exception& exc) {
35
+ throw std::runtime_error(std::string("Skeleton.shimmerSpeed: ") + exc.what());
36
+ }
37
+ }()),
38
+ shimmerGradientColors([&]() -> CachedProp<std::optional<std::vector<std::string>>> {
39
+ try {
40
+ const react::RawValue* rawValue = rawProps.at("shimmerGradientColors", nullptr, nullptr);
41
+ if (rawValue == nullptr) return sourceProps.shimmerGradientColors;
42
+ const auto& [runtime, value] = (std::pair<jsi::Runtime*, jsi::Value>)*rawValue;
43
+ return CachedProp<std::optional<std::vector<std::string>>>::fromRawValue(*runtime, value, sourceProps.shimmerGradientColors);
44
+ } catch (const std::exception& exc) {
45
+ throw std::runtime_error(std::string("Skeleton.shimmerGradientColors: ") + exc.what());
46
+ }
47
+ }()),
48
+ hybridRef([&]() -> CachedProp<std::optional<std::function<void(const std::shared_ptr<HybridSkeletonSpec>& /* ref */)>>> {
49
+ try {
50
+ const react::RawValue* rawValue = rawProps.at("hybridRef", nullptr, nullptr);
51
+ if (rawValue == nullptr) return sourceProps.hybridRef;
52
+ const auto& [runtime, value] = (std::pair<jsi::Runtime*, jsi::Value>)*rawValue;
53
+ return CachedProp<std::optional<std::function<void(const std::shared_ptr<HybridSkeletonSpec>& /* ref */)>>>::fromRawValue(*runtime, value.asObject(*runtime).getProperty(*runtime, "f"), sourceProps.hybridRef);
54
+ } catch (const std::exception& exc) {
55
+ throw std::runtime_error(std::string("Skeleton.hybridRef: ") + exc.what());
56
+ }
57
+ }()) { }
58
+
59
+ HybridSkeletonProps::HybridSkeletonProps(const HybridSkeletonProps& other):
60
+ react::ViewProps(),
61
+ shimmerSpeed(other.shimmerSpeed),
62
+ shimmerGradientColors(other.shimmerGradientColors),
63
+ hybridRef(other.hybridRef) { }
64
+
65
+ bool HybridSkeletonProps::filterObjectKeys(const std::string& propName) {
66
+ switch (hashString(propName)) {
67
+ case hashString("shimmerSpeed"): return true;
68
+ case hashString("shimmerGradientColors"): return true;
69
+ case hashString("hybridRef"): return true;
70
+ default: return false;
71
+ }
72
+ }
73
+
74
+ HybridSkeletonComponentDescriptor::HybridSkeletonComponentDescriptor(const react::ComponentDescriptorParameters& parameters)
75
+ : ConcreteComponentDescriptor(parameters,
76
+ react::RawPropsParser(/* enableJsiParser */ true)) {}
77
+
78
+ std::shared_ptr<const react::Props> HybridSkeletonComponentDescriptor::cloneProps(const react::PropsParserContext& context,
79
+ const std::shared_ptr<const react::Props>& props,
80
+ react::RawProps rawProps) const {
81
+ // 1. Prepare raw props parser
82
+ rawProps.parse(rawPropsParser_);
83
+ // 2. Copy props with Nitro's cached copy constructor
84
+ return HybridSkeletonShadowNode::Props(context, /* & */ rawProps, props);
85
+ }
86
+
87
+ #ifdef ANDROID
88
+ void HybridSkeletonComponentDescriptor::adopt(react::ShadowNode& shadowNode) const {
89
+ // This is called immediately after `ShadowNode` is created, cloned or in progress.
90
+ // On Android, we need to wrap props in our state, which gets routed through Java and later unwrapped in JNI/C++.
91
+ auto& concreteShadowNode = dynamic_cast<HybridSkeletonShadowNode&>(shadowNode);
92
+ const HybridSkeletonProps& props = concreteShadowNode.getConcreteProps();
93
+ HybridSkeletonState state;
94
+ state.setProps(props);
95
+ concreteShadowNode.setStateData(std::move(state));
96
+ }
97
+ #endif
98
+
99
+ } // namespace margelo::nitro::skeleton::views
@@ -0,0 +1,110 @@
1
+ ///
2
+ /// HybridSkeletonComponent.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <optional>
11
+ #include <NitroModules/NitroDefines.hpp>
12
+ #include <NitroModules/NitroHash.hpp>
13
+ #include <NitroModules/CachedProp.hpp>
14
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
15
+ #include <react/renderer/core/PropsParserContext.h>
16
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
17
+ #include <react/renderer/components/view/ViewProps.h>
18
+
19
+ #include <optional>
20
+ #include <string>
21
+ #include <vector>
22
+ #include <memory>
23
+ #include "HybridSkeletonSpec.hpp"
24
+ #include <functional>
25
+
26
+ namespace margelo::nitro::skeleton::views {
27
+
28
+ using namespace facebook;
29
+
30
+ /**
31
+ * The name of the actual native View.
32
+ */
33
+ extern const char HybridSkeletonComponentName[];
34
+
35
+ /**
36
+ * Props for the "Skeleton" View.
37
+ */
38
+ class HybridSkeletonProps final: public react::ViewProps {
39
+ public:
40
+ HybridSkeletonProps() = default;
41
+ HybridSkeletonProps(const HybridSkeletonProps&);
42
+ HybridSkeletonProps(const react::PropsParserContext& context,
43
+ const HybridSkeletonProps& sourceProps,
44
+ const react::RawProps& rawProps);
45
+
46
+ public:
47
+ CachedProp<std::optional<double>> shimmerSpeed;
48
+ CachedProp<std::optional<std::vector<std::string>>> shimmerGradientColors;
49
+ CachedProp<std::optional<std::function<void(const std::shared_ptr<HybridSkeletonSpec>& /* ref */)>>> hybridRef;
50
+
51
+ private:
52
+ static bool filterObjectKeys(const std::string& propName);
53
+ };
54
+
55
+ /**
56
+ * State for the "Skeleton" View.
57
+ */
58
+ class HybridSkeletonState final {
59
+ public:
60
+ HybridSkeletonState() = default;
61
+
62
+ public:
63
+ void setProps(const HybridSkeletonProps& props) { _props.emplace(props); }
64
+ const std::optional<HybridSkeletonProps>& getProps() const { return _props; }
65
+
66
+ public:
67
+ #ifdef ANDROID
68
+ HybridSkeletonState(const HybridSkeletonState& /* previousState */, folly::dynamic /* data */) {}
69
+ folly::dynamic getDynamic() const {
70
+ throw std::runtime_error("HybridSkeletonState does not support folly!");
71
+ }
72
+ react::MapBuffer getMapBuffer() const {
73
+ throw std::runtime_error("HybridSkeletonState does not support MapBuffer!");
74
+ };
75
+ #endif
76
+
77
+ private:
78
+ std::optional<HybridSkeletonProps> _props;
79
+ };
80
+
81
+ /**
82
+ * The Shadow Node for the "Skeleton" View.
83
+ */
84
+ using HybridSkeletonShadowNode = react::ConcreteViewShadowNode<HybridSkeletonComponentName /* "HybridSkeleton" */,
85
+ HybridSkeletonProps /* custom props */,
86
+ react::ViewEventEmitter /* default */,
87
+ HybridSkeletonState /* custom state */>;
88
+
89
+ /**
90
+ * The Component Descriptor for the "Skeleton" View.
91
+ */
92
+ class HybridSkeletonComponentDescriptor final: public react::ConcreteComponentDescriptor<HybridSkeletonShadowNode> {
93
+ public:
94
+ HybridSkeletonComponentDescriptor(const react::ComponentDescriptorParameters& parameters);
95
+
96
+ public:
97
+ /**
98
+ * A faster path for cloning props - reuses the caching logic from `HybridSkeletonProps`.
99
+ */
100
+ std::shared_ptr<const react::Props> cloneProps(const react::PropsParserContext& context,
101
+ const std::shared_ptr<const react::Props>& props,
102
+ react::RawProps rawProps) const override;
103
+ #ifdef ANDROID
104
+ void adopt(react::ShadowNode& shadowNode) const override;
105
+ #endif
106
+ };
107
+
108
+ /* The actual view for "Skeleton" needs to be implemented in platform-specific code. */
109
+
110
+ } // namespace margelo::nitro::skeleton::views
@@ -0,0 +1,11 @@
1
+ {
2
+ "uiViewClassName": "Skeleton",
3
+ "supportsRawText": false,
4
+ "bubblingEventTypes": {},
5
+ "directEventTypes": {},
6
+ "validAttributes": {
7
+ "shimmerSpeed": true,
8
+ "shimmerGradientColors": true,
9
+ "hybridRef": true
10
+ }
11
+ }
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,9 @@
1
+ import type { HybridView, HybridViewMethods, HybridViewProps } from 'react-native-nitro-modules';
2
+ export interface SkeletonProps extends HybridViewProps {
3
+ shimmerSpeed?: number;
4
+ shimmerGradientColors?: string[];
5
+ }
6
+ export interface SkeletonMethods extends HybridViewMethods {
7
+ }
8
+ export type Skeleton = HybridView<SkeletonProps, SkeletonMethods>;
9
+ //# sourceMappingURL=Skeleton.nitro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.nitro.d.ts","sourceRoot":"","sources":["../../../src/Skeleton.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AACD,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;CAAG;AAE7D,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SkeletonMethods, SkeletonProps } from './Skeleton.nitro';
2
+ export declare const SkeletonView: import("react-native-nitro-modules").ReactNativeView<SkeletonProps, SkeletonMethods>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvE,eAAO,MAAM,YAAY,sFAGxB,CAAC"}
package/nitro.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "cxxNamespace": ["skeleton"],
3
+ "ios": {
4
+ "iosModuleName": "Skeleton"
5
+ },
6
+ "android": {
7
+ "androidNamespace": ["skeleton"],
8
+ "androidCxxLibName": "skeleton"
9
+ },
10
+ "autolinking": {
11
+ "Skeleton": {
12
+ "swift": "HybridSkeleton",
13
+ "kotlin": "HybridSkeleton"
14
+ }
15
+ },
16
+ "ignorePaths": ["node_modules"]
17
+ }
@@ -0,0 +1,85 @@
1
+ ///
2
+ /// JHybridSkeletonSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "JHybridSkeletonSpec.hpp"
9
+
10
+
11
+
12
+ #include <optional>
13
+ #include <string>
14
+ #include <vector>
15
+
16
+ namespace margelo::nitro::skeleton {
17
+
18
+ jni::local_ref<JHybridSkeletonSpec::jhybriddata> JHybridSkeletonSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
19
+ return makeCxxInstance(jThis);
20
+ }
21
+
22
+ void JHybridSkeletonSpec::registerNatives() {
23
+ registerHybrid({
24
+ makeNativeMethod("initHybrid", JHybridSkeletonSpec::initHybrid),
25
+ });
26
+ }
27
+
28
+ size_t JHybridSkeletonSpec::getExternalMemorySize() noexcept {
29
+ static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
30
+ return method(_javaPart);
31
+ }
32
+
33
+ void JHybridSkeletonSpec::dispose() noexcept {
34
+ static const auto method = javaClassStatic()->getMethod<void()>("dispose");
35
+ method(_javaPart);
36
+ }
37
+
38
+ std::string JHybridSkeletonSpec::toString() {
39
+ static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
40
+ auto javaString = method(_javaPart);
41
+ return javaString->toStdString();
42
+ }
43
+
44
+ // Properties
45
+ std::optional<double> JHybridSkeletonSpec::getShimmerSpeed() {
46
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JDouble>()>("getShimmerSpeed");
47
+ auto __result = method(_javaPart);
48
+ return __result != nullptr ? std::make_optional(__result->value()) : std::nullopt;
49
+ }
50
+ void JHybridSkeletonSpec::setShimmerSpeed(std::optional<double> shimmerSpeed) {
51
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JDouble> /* shimmerSpeed */)>("setShimmerSpeed");
52
+ method(_javaPart, shimmerSpeed.has_value() ? jni::JDouble::valueOf(shimmerSpeed.value()) : nullptr);
53
+ }
54
+ std::optional<std::vector<std::string>> JHybridSkeletonSpec::getShimmerGradientColors() {
55
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<jni::JString>>()>("getShimmerGradientColors");
56
+ auto __result = method(_javaPart);
57
+ return __result != nullptr ? std::make_optional([&]() {
58
+ size_t __size = __result->size();
59
+ std::vector<std::string> __vector;
60
+ __vector.reserve(__size);
61
+ for (size_t __i = 0; __i < __size; __i++) {
62
+ auto __element = __result->getElement(__i);
63
+ __vector.push_back(__element->toStdString());
64
+ }
65
+ return __vector;
66
+ }()) : std::nullopt;
67
+ }
68
+ void JHybridSkeletonSpec::setShimmerGradientColors(const std::optional<std::vector<std::string>>& shimmerGradientColors) {
69
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JArrayClass<jni::JString>> /* shimmerGradientColors */)>("setShimmerGradientColors");
70
+ method(_javaPart, shimmerGradientColors.has_value() ? [&]() {
71
+ size_t __size = shimmerGradientColors.value().size();
72
+ jni::local_ref<jni::JArrayClass<jni::JString>> __array = jni::JArrayClass<jni::JString>::newArray(__size);
73
+ for (size_t __i = 0; __i < __size; __i++) {
74
+ const auto& __element = shimmerGradientColors.value()[__i];
75
+ auto __elementJni = jni::make_jstring(__element);
76
+ __array->setElement(__i, *__elementJni);
77
+ }
78
+ return __array;
79
+ }() : nullptr);
80
+ }
81
+
82
+ // Methods
83
+
84
+
85
+ } // namespace margelo::nitro::skeleton
@@ -0,0 +1,68 @@
1
+ ///
2
+ /// HybridSkeletonSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <NitroModules/JHybridObject.hpp>
11
+ #include <fbjni/fbjni.h>
12
+ #include "HybridSkeletonSpec.hpp"
13
+
14
+
15
+
16
+
17
+ namespace margelo::nitro::skeleton {
18
+
19
+ using namespace facebook;
20
+
21
+ class JHybridSkeletonSpec: public jni::HybridClass<JHybridSkeletonSpec, JHybridObject>,
22
+ public virtual HybridSkeletonSpec {
23
+ public:
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/skeleton/HybridSkeletonSpec;";
25
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
26
+ static void registerNatives();
27
+
28
+ protected:
29
+ // C++ constructor (called from Java via `initHybrid()`)
30
+ explicit JHybridSkeletonSpec(jni::alias_ref<jhybridobject> jThis) :
31
+ HybridObject(HybridSkeletonSpec::TAG),
32
+ HybridBase(jThis),
33
+ _javaPart(jni::make_global(jThis)) {}
34
+
35
+ public:
36
+ ~JHybridSkeletonSpec() override {
37
+ // Hermes GC can destroy JS objects on a non-JNI Thread.
38
+ jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
39
+ }
40
+
41
+ public:
42
+ size_t getExternalMemorySize() noexcept override;
43
+ void dispose() noexcept override;
44
+ std::string toString() override;
45
+
46
+ public:
47
+ inline const jni::global_ref<JHybridSkeletonSpec::javaobject>& getJavaPart() const noexcept {
48
+ return _javaPart;
49
+ }
50
+
51
+ public:
52
+ // Properties
53
+ std::optional<double> getShimmerSpeed() override;
54
+ void setShimmerSpeed(std::optional<double> shimmerSpeed) override;
55
+ std::optional<std::vector<std::string>> getShimmerGradientColors() override;
56
+ void setShimmerGradientColors(const std::optional<std::vector<std::string>>& shimmerGradientColors) override;
57
+
58
+ public:
59
+ // Methods
60
+
61
+
62
+ private:
63
+ friend HybridBase;
64
+ using HybridBase::HybridBase;
65
+ jni::global_ref<JHybridSkeletonSpec::javaobject> _javaPart;
66
+ };
67
+
68
+ } // namespace margelo::nitro::skeleton
@@ -0,0 +1,60 @@
1
+ ///
2
+ /// JHybridSkeletonStateUpdater.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "JHybridSkeletonStateUpdater.hpp"
9
+ #include "views/HybridSkeletonComponent.hpp"
10
+ #include <NitroModules/NitroDefines.hpp>
11
+
12
+ namespace margelo::nitro::skeleton::views {
13
+
14
+ using namespace facebook;
15
+ using ConcreteStateData = react::ConcreteState<HybridSkeletonState>;
16
+
17
+ void JHybridSkeletonStateUpdater::updateViewProps(jni::alias_ref<jni::JClass> /* class */,
18
+ jni::alias_ref<JHybridSkeletonSpec::javaobject> javaView,
19
+ jni::alias_ref<JStateWrapper::javaobject> stateWrapperInterface) {
20
+ JHybridSkeletonSpec* view = javaView->cthis();
21
+
22
+ // Get concrete StateWrapperImpl from passed StateWrapper interface object
23
+ jobject rawStateWrapper = stateWrapperInterface.get();
24
+ if (!stateWrapperInterface->isInstanceOf(react::StateWrapperImpl::javaClassStatic())) {
25
+ throw std::runtime_error("StateWrapper is not a StateWrapperImpl");
26
+ }
27
+ auto stateWrapper = jni::alias_ref<react::StateWrapperImpl::javaobject>{
28
+ static_cast<react::StateWrapperImpl::javaobject>(rawStateWrapper)};
29
+
30
+ std::shared_ptr<const react::State> state = stateWrapper->cthis()->getState();
31
+ auto concreteState = std::dynamic_pointer_cast<const ConcreteStateData>(state);
32
+ const HybridSkeletonState& data = concreteState->getData();
33
+ const std::optional<HybridSkeletonProps>& maybeProps = data.getProps();
34
+ if (!maybeProps.has_value()) {
35
+ // Props aren't set yet!
36
+ throw std::runtime_error("HybridSkeletonState's data doesn't contain any props!");
37
+ }
38
+ const HybridSkeletonProps& props = maybeProps.value();
39
+ if (props.shimmerSpeed.isDirty) {
40
+ view->setShimmerSpeed(props.shimmerSpeed.value);
41
+ // TODO: Set isDirty = false
42
+ }
43
+ if (props.shimmerGradientColors.isDirty) {
44
+ view->setShimmerGradientColors(props.shimmerGradientColors.value);
45
+ // TODO: Set isDirty = false
46
+ }
47
+
48
+ // Update hybridRef if it changed
49
+ if (props.hybridRef.isDirty) {
50
+ // hybridRef changed - call it with new this
51
+ const auto& maybeFunc = props.hybridRef.value;
52
+ if (maybeFunc.has_value()) {
53
+ std::shared_ptr<JHybridSkeletonSpec> shared = javaView->cthis()->shared_cast<JHybridSkeletonSpec>();
54
+ maybeFunc.value()(shared);
55
+ }
56
+ // TODO: Set isDirty = false
57
+ }
58
+ }
59
+
60
+ } // namespace margelo::nitro::skeleton::views
@@ -0,0 +1,49 @@
1
+ ///
2
+ /// JHybridSkeletonStateUpdater.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #ifndef RN_SERIALIZABLE_STATE
11
+ #error skeleton was compiled without the 'RN_SERIALIZABLE_STATE' flag. This flag is required for Nitro Views - set it in your CMakeLists!
12
+ #endif
13
+
14
+ #include <fbjni/fbjni.h>
15
+ #include <react/fabric/StateWrapperImpl.h>
16
+ #include <react/fabric/CoreComponentsRegistry.h>
17
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
18
+ #include <NitroModules/NitroDefines.hpp>
19
+ #include <NitroModules/JStateWrapper.hpp>
20
+ #include "JHybridSkeletonSpec.hpp"
21
+ #include "views/HybridSkeletonComponent.hpp"
22
+
23
+ namespace margelo::nitro::skeleton::views {
24
+
25
+ using namespace facebook;
26
+
27
+ class JHybridSkeletonStateUpdater: public jni::JavaClass<JHybridSkeletonStateUpdater> {
28
+ public:
29
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/skeleton/views/HybridSkeletonStateUpdater;";
30
+
31
+ public:
32
+ static void updateViewProps(jni::alias_ref<jni::JClass> /* class */,
33
+ jni::alias_ref<JHybridSkeletonSpec::javaobject> view,
34
+ jni::alias_ref<JStateWrapper::javaobject> stateWrapperInterface);
35
+
36
+ public:
37
+ static void registerNatives() {
38
+ // Register JNI calls
39
+ javaClassStatic()->registerNatives({
40
+ makeNativeMethod("updateViewProps", JHybridSkeletonStateUpdater::updateViewProps),
41
+ });
42
+ // Register React Native view component descriptor
43
+ auto provider = react::concreteComponentDescriptorProvider<HybridSkeletonComponentDescriptor>();
44
+ auto providerRegistry = react::CoreComponentsRegistry::sharedProviderRegistry();
45
+ providerRegistry->add(provider);
46
+ }
47
+ };
48
+
49
+ } // namespace margelo::nitro::skeleton::views
@@ -0,0 +1,65 @@
1
+ ///
2
+ /// HybridSkeletonSpec.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.skeleton
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.jni.HybridData
12
+ import com.facebook.proguard.annotations.DoNotStrip
13
+ import com.margelo.nitro.views.HybridView
14
+
15
+ /**
16
+ * A Kotlin class representing the Skeleton HybridObject.
17
+ * Implement this abstract class to create Kotlin-based instances of Skeleton.
18
+ */
19
+ @DoNotStrip
20
+ @Keep
21
+ @Suppress(
22
+ "KotlinJniMissingFunction", "unused",
23
+ "RedundantSuppression", "RedundantUnitReturnType", "SimpleRedundantLet",
24
+ "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
25
+ )
26
+ abstract class HybridSkeletonSpec: HybridView() {
27
+ @DoNotStrip
28
+ private var mHybridData: HybridData = initHybrid()
29
+
30
+ init {
31
+ super.updateNative(mHybridData)
32
+ }
33
+
34
+ override fun updateNative(hybridData: HybridData) {
35
+ mHybridData = hybridData
36
+ super.updateNative(hybridData)
37
+ }
38
+
39
+ // Default implementation of `HybridObject.toString()`
40
+ override fun toString(): String {
41
+ return "[HybridObject Skeleton]"
42
+ }
43
+
44
+ // Properties
45
+ @get:DoNotStrip
46
+ @get:Keep
47
+ @set:DoNotStrip
48
+ @set:Keep
49
+ abstract var shimmerSpeed: Double?
50
+
51
+ @get:DoNotStrip
52
+ @get:Keep
53
+ @set:DoNotStrip
54
+ @set:Keep
55
+ abstract var shimmerGradientColors: Array<String>?
56
+
57
+ // Methods
58
+
59
+
60
+ private external fun initHybrid(): HybridData
61
+
62
+ companion object {
63
+ protected const val TAG = "HybridSkeletonSpec"
64
+ }
65
+ }