@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.
- package/LICENSE +20 -0
- package/README.md +39 -0
- package/Skeleton.podspec +29 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +128 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/skeleton/Skeleton.kt +135 -0
- package/android/src/main/java/com/margelo/nitro/skeleton/SkeletonPackage.kt +29 -0
- package/ios/Skeleton.swift +126 -0
- package/lib/module/Skeleton.nitro.js +4 -0
- package/lib/module/Skeleton.nitro.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/nitrogen/generated/android/c++/JHybridSkeletonSpec.cpp +85 -0
- package/lib/nitrogen/generated/android/c++/JHybridSkeletonSpec.hpp +68 -0
- package/lib/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.cpp +60 -0
- package/lib/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.hpp +49 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/HybridSkeletonSpec.kt +65 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/skeletonOnLoad.kt +35 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonManager.kt +50 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonStateUpdater.kt +23 -0
- package/lib/nitrogen/generated/android/skeleton+autolinking.cmake +83 -0
- package/lib/nitrogen/generated/android/skeleton+autolinking.gradle +27 -0
- package/lib/nitrogen/generated/android/skeletonOnLoad.cpp +46 -0
- package/lib/nitrogen/generated/android/skeletonOnLoad.hpp +25 -0
- package/lib/nitrogen/generated/ios/Skeleton+autolinking.rb +60 -0
- package/lib/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.cpp +33 -0
- package/lib/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.hpp +84 -0
- package/lib/nitrogen/generated/ios/Skeleton-Swift-Cxx-Umbrella.hpp +44 -0
- package/lib/nitrogen/generated/ios/SkeletonAutolinking.mm +33 -0
- package/lib/nitrogen/generated/ios/SkeletonAutolinking.swift +25 -0
- package/lib/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.cpp +11 -0
- package/lib/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.hpp +84 -0
- package/lib/nitrogen/generated/ios/c++/views/HybridSkeletonComponent.mm +101 -0
- package/lib/nitrogen/generated/ios/swift/HybridSkeletonSpec.swift +57 -0
- package/lib/nitrogen/generated/ios/swift/HybridSkeletonSpec_cxx.swift +176 -0
- package/lib/nitrogen/generated/shared/c++/HybridSkeletonSpec.cpp +24 -0
- package/lib/nitrogen/generated/shared/c++/HybridSkeletonSpec.hpp +67 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.cpp +99 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.hpp +110 -0
- package/lib/nitrogen/generated/shared/json/SkeletonConfig.json +11 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/Skeleton.nitro.d.ts +9 -0
- package/lib/typescript/src/Skeleton.nitro.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +17 -0
- package/nitrogen/generated/android/c++/JHybridSkeletonSpec.cpp +85 -0
- package/nitrogen/generated/android/c++/JHybridSkeletonSpec.hpp +68 -0
- package/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.cpp +60 -0
- package/nitrogen/generated/android/c++/views/JHybridSkeletonStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/HybridSkeletonSpec.kt +65 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/skeletonOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonManager.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/skeleton/views/HybridSkeletonStateUpdater.kt +23 -0
- package/nitrogen/generated/android/skeleton+autolinking.cmake +83 -0
- package/nitrogen/generated/android/skeleton+autolinking.gradle +27 -0
- package/nitrogen/generated/android/skeletonOnLoad.cpp +46 -0
- package/nitrogen/generated/android/skeletonOnLoad.hpp +25 -0
- package/nitrogen/generated/ios/Skeleton+autolinking.rb +60 -0
- package/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.cpp +33 -0
- package/nitrogen/generated/ios/Skeleton-Swift-Cxx-Bridge.hpp +84 -0
- package/nitrogen/generated/ios/Skeleton-Swift-Cxx-Umbrella.hpp +44 -0
- package/nitrogen/generated/ios/SkeletonAutolinking.mm +33 -0
- package/nitrogen/generated/ios/SkeletonAutolinking.swift +25 -0
- package/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridSkeletonSpecSwift.hpp +84 -0
- package/nitrogen/generated/ios/c++/views/HybridSkeletonComponent.mm +101 -0
- package/nitrogen/generated/ios/swift/HybridSkeletonSpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridSkeletonSpec_cxx.swift +176 -0
- package/nitrogen/generated/shared/c++/HybridSkeletonSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridSkeletonSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.cpp +99 -0
- package/nitrogen/generated/shared/c++/views/HybridSkeletonComponent.hpp +110 -0
- package/nitrogen/generated/shared/json/SkeletonConfig.json +11 -0
- package/package.json +170 -0
- package/src/Skeleton.nitro.ts +13 -0
- 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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|