@onekeyfe/react-native-segment-slider 3.0.53 → 3.0.54

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 (44) hide show
  1. package/README.md +47 -3
  2. package/SegmentSlider.podspec +1 -1
  3. package/android/src/main/java/com/margelo/nitro/segmentslider/HybridSegmentSlider.kt +39 -11
  4. package/android/src/main/java/com/margelo/nitro/segmentslider/SegmentSliderColorParser.kt +19 -3
  5. package/ios/HybridSegmentSlider.swift +38 -13
  6. package/ios/SegmentSliderColorParser.swift +40 -9
  7. package/lib/module/index.js +7 -4
  8. package/lib/module/index.js.map +1 -1
  9. package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +9 -15
  10. package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +3 -5
  11. package/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +2 -6
  12. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +4 -8
  13. package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +11 -0
  14. package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +2 -0
  15. package/lib/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +10 -11
  16. package/lib/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +4 -9
  17. package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +2 -3
  18. package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +14 -14
  19. package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +3 -4
  20. package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +3 -5
  21. package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +7 -19
  22. package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +1 -2
  23. package/lib/nitrogen/generated/shared/json/SegmentSliderConfig.json +1 -2
  24. package/lib/typescript/src/SegmentSlider.nitro.d.ts +18 -8
  25. package/lib/typescript/src/SegmentSlider.nitro.d.ts.map +1 -1
  26. package/lib/typescript/src/index.d.ts.map +1 -1
  27. package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +9 -15
  28. package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +3 -5
  29. package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +2 -6
  30. package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +4 -8
  31. package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +11 -0
  32. package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +2 -0
  33. package/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +10 -11
  34. package/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +4 -9
  35. package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +2 -3
  36. package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +14 -14
  37. package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +3 -4
  38. package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +3 -5
  39. package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +7 -19
  40. package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +1 -2
  41. package/nitrogen/generated/shared/json/SegmentSliderConfig.json +1 -2
  42. package/package.json +1 -1
  43. package/src/SegmentSlider.nitro.ts +20 -9
  44. package/src/index.tsx +16 -6
@@ -25,14 +25,14 @@ namespace margelo::nitro::segmentslider::views {
25
25
  const HybridSegmentSliderProps& sourceProps,
26
26
  const react::RawProps& rawProps):
27
27
  react::ViewProps(context, sourceProps, rawProps, filterObjectKeys),
28
- value([&]() -> CachedProp<double> {
28
+ defaultValue([&]() -> CachedProp<double> {
29
29
  try {
30
- const react::RawValue* rawValue = rawProps.at("value", nullptr, nullptr);
31
- if (rawValue == nullptr) return sourceProps.value;
30
+ const react::RawValue* rawValue = rawProps.at("defaultValue", nullptr, nullptr);
31
+ if (rawValue == nullptr) return sourceProps.defaultValue;
32
32
  const auto& [runtime, value] = (std::pair<jsi::Runtime*, jsi::Value>)*rawValue;
33
- return CachedProp<double>::fromRawValue(*runtime, value, sourceProps.value);
33
+ return CachedProp<double>::fromRawValue(*runtime, value, sourceProps.defaultValue);
34
34
  } catch (const std::exception& exc) {
35
- throw std::runtime_error(std::string("SegmentSlider.value: ") + exc.what());
35
+ throw std::runtime_error(std::string("SegmentSlider.defaultValue: ") + exc.what());
36
36
  }
37
37
  }()),
38
38
  min([&]() -> CachedProp<double> {
@@ -115,16 +115,6 @@ namespace margelo::nitro::segmentslider::views {
115
115
  throw std::runtime_error(std::string("SegmentSlider.snapTapToSegment: ") + exc.what());
116
116
  }
117
117
  }()),
118
- epoch([&]() -> CachedProp<double> {
119
- try {
120
- const react::RawValue* rawValue = rawProps.at("epoch", nullptr, nullptr);
121
- if (rawValue == nullptr) return sourceProps.epoch;
122
- const auto& [runtime, value] = (std::pair<jsi::Runtime*, jsi::Value>)*rawValue;
123
- return CachedProp<double>::fromRawValue(*runtime, value, sourceProps.epoch);
124
- } catch (const std::exception& exc) {
125
- throw std::runtime_error(std::string("SegmentSlider.epoch: ") + exc.what());
126
- }
127
- }()),
128
118
  fillColor([&]() -> CachedProp<std::string> {
129
119
  try {
130
120
  const react::RawValue* rawValue = rawProps.at("fillColor", nullptr, nullptr);
@@ -258,7 +248,7 @@ namespace margelo::nitro::segmentslider::views {
258
248
 
259
249
  HybridSegmentSliderProps::HybridSegmentSliderProps(const HybridSegmentSliderProps& other):
260
250
  react::ViewProps(),
261
- value(other.value),
251
+ defaultValue(other.defaultValue),
262
252
  min(other.min),
263
253
  max(other.max),
264
254
  segments(other.segments),
@@ -267,7 +257,6 @@ namespace margelo::nitro::segmentslider::views {
267
257
  showBubble(other.showBubble),
268
258
  centerOrigin(other.centerOrigin),
269
259
  snapTapToSegment(other.snapTapToSegment),
270
- epoch(other.epoch),
271
260
  fillColor(other.fillColor),
272
261
  trackColor(other.trackColor),
273
262
  thumbColor(other.thumbColor),
@@ -284,7 +273,7 @@ namespace margelo::nitro::segmentslider::views {
284
273
 
285
274
  bool HybridSegmentSliderProps::filterObjectKeys(const std::string& propName) {
286
275
  switch (hashString(propName)) {
287
- case hashString("value"): return true;
276
+ case hashString("defaultValue"): return true;
288
277
  case hashString("min"): return true;
289
278
  case hashString("max"): return true;
290
279
  case hashString("segments"): return true;
@@ -293,7 +282,6 @@ namespace margelo::nitro::segmentslider::views {
293
282
  case hashString("showBubble"): return true;
294
283
  case hashString("centerOrigin"): return true;
295
284
  case hashString("snapTapToSegment"): return true;
296
- case hashString("epoch"): return true;
297
285
  case hashString("fillColor"): return true;
298
286
  case hashString("trackColor"): return true;
299
287
  case hashString("thumbColor"): return true;
@@ -43,7 +43,7 @@ namespace margelo::nitro::segmentslider::views {
43
43
  const react::RawProps& rawProps);
44
44
 
45
45
  public:
46
- CachedProp<double> value;
46
+ CachedProp<double> defaultValue;
47
47
  CachedProp<double> min;
48
48
  CachedProp<double> max;
49
49
  CachedProp<double> segments;
@@ -52,7 +52,6 @@ namespace margelo::nitro::segmentslider::views {
52
52
  CachedProp<bool> showBubble;
53
53
  CachedProp<bool> centerOrigin;
54
54
  CachedProp<bool> snapTapToSegment;
55
- CachedProp<double> epoch;
56
55
  CachedProp<std::string> fillColor;
57
56
  CachedProp<std::string> trackColor;
58
57
  CachedProp<std::string> thumbColor;
@@ -4,7 +4,7 @@
4
4
  "bubblingEventTypes": {},
5
5
  "directEventTypes": {},
6
6
  "validAttributes": {
7
- "value": true,
7
+ "defaultValue": true,
8
8
  "min": true,
9
9
  "max": true,
10
10
  "segments": true,
@@ -13,7 +13,6 @@
13
13
  "showBubble": true,
14
14
  "centerOrigin": true,
15
15
  "snapTapToSegment": true,
16
- "epoch": true,
17
16
  "fillColor": true,
18
17
  "trackColor": true,
19
18
  "thumbColor": true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/react-native-segment-slider",
3
- "version": "3.0.53",
3
+ "version": "3.0.54",
4
4
  "description": "react-native-segment-slider",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -24,8 +24,16 @@ import type {
24
24
  * hex / rgba() strings so the native side never depends on the theme system.
25
25
  */
26
26
  export interface SegmentSliderProps extends HybridViewProps {
27
- /** Current (controlled) value. Ignored while the user is dragging. */
28
- value: number;
27
+ /**
28
+ * Initial value, applied ONCE when the view mounts. The slider is
29
+ * UNCONTROLLED: after mount the native view owns the value (driven by the
30
+ * pan gesture and reported via `onChange`). To set the value imperatively
31
+ * from JS — e.g. a leverage / coin reset — call the `setValue` method on the
32
+ * hybrid ref instead of re-rendering with a new prop. This keeps reset (and
33
+ * any high-rate) updates off the Fabric prop-commit path (REACT-NATIVE-1JZ)
34
+ * and removes the controlled-value-vs-drag conflict entirely.
35
+ */
36
+ defaultValue: number;
29
37
  /** Range minimum (default range 0..100). */
30
38
  min: number;
31
39
  /** Range maximum. */
@@ -47,12 +55,6 @@ export interface SegmentSliderProps extends HybridViewProps {
47
55
  * callers keep the free-tap behavior.
48
56
  */
49
57
  snapTapToSegment: boolean;
50
- /**
51
- * Monotonic token. Bump from JS on coin / leverage reset so the native view
52
- * snaps to the new value WITHOUT animating the thumb scale. Mirrors the
53
- * `epoch` convention used by react-native-perp-depth-bar.
54
- */
55
- epoch: number;
56
58
 
57
59
  // --- Resolved theme colors (hex `#rgb`/`#rrggbb`/`#rrggbbaa` or rgba()) ---
58
60
  /** Active fill bar color (Tamagui `bgPrimary`). */
@@ -82,6 +84,15 @@ export interface SegmentSliderProps extends HybridViewProps {
82
84
  onSlideComplete?: () => void;
83
85
  }
84
86
 
85
- export interface SegmentSliderMethods extends HybridViewMethods {}
87
+ export interface SegmentSliderMethods extends HybridViewMethods {
88
+ /**
89
+ * Imperatively set the slider value (clamped to `min..max`). Hard-snaps the
90
+ * thumb to the new value, cancelling any in-flight drag, and does NOT fire
91
+ * `onChange` (the JS caller already knows the value, so re-emitting would
92
+ * loop). This is the supported way to update the value after mount — see
93
+ * `defaultValue`.
94
+ */
95
+ setValue(value: number): void;
96
+ }
86
97
 
87
98
  export type SegmentSlider = HybridView<SegmentSliderProps, SegmentSliderMethods>;
package/src/index.tsx CHANGED
@@ -1,4 +1,4 @@
1
- import { useCallback, useRef } from 'react';
1
+ import { useCallback, useMemo, useRef } from 'react';
2
2
 
3
3
  import { type ViewProps } from 'react-native';
4
4
  import { callback, getHostComponent } from 'react-native-nitro-modules';
@@ -45,15 +45,25 @@ export function SegmentSliderView({
45
45
  const stableOnSlideComplete = useCallback(() => {
46
46
  onSlideCompleteRef.current?.();
47
47
  }, []);
48
+ const onChangeCallback = useMemo(
49
+ () => callback(stableOnChange),
50
+ [stableOnChange],
51
+ );
52
+ const onSlideStartCallback = useMemo(
53
+ () => callback(stableOnSlideStart),
54
+ [stableOnSlideStart],
55
+ );
56
+ const onSlideCompleteCallback = useMemo(
57
+ () => callback(stableOnSlideComplete),
58
+ [stableOnSlideComplete],
59
+ );
48
60
 
49
61
  return (
50
62
  <SegmentSliderHost
51
63
  {...props}
52
- onChange={onChange ? callback(stableOnChange) : undefined}
53
- onSlideStart={onSlideStart ? callback(stableOnSlideStart) : undefined}
54
- onSlideComplete={
55
- onSlideComplete ? callback(stableOnSlideComplete) : undefined
56
- }
64
+ onChange={onChange ? onChangeCallback : undefined}
65
+ onSlideStart={onSlideStart ? onSlideStartCallback : undefined}
66
+ onSlideComplete={onSlideComplete ? onSlideCompleteCallback : undefined}
57
67
  />
58
68
  );
59
69
  }