@onekeyfe/react-native-segment-slider 3.0.40
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 +21 -0
- package/README.md +31 -0
- package/SegmentSlider.podspec +29 -0
- package/android/CMakeLists.txt +26 -0
- package/android/build.gradle +128 -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/segmentslider/HybridSegmentSlider.kt +364 -0
- package/android/src/main/java/com/margelo/nitro/segmentslider/SegmentSliderColorParser.kt +56 -0
- package/android/src/main/java/com/margelo/nitro/segmentslider/SegmentSliderPackage.kt +29 -0
- package/ios/HybridSegmentSlider.swift +412 -0
- package/ios/SegmentSliderColorParser.swift +152 -0
- package/lib/module/SegmentSlider.nitro.js +4 -0
- package/lib/module/SegmentSlider.nitro.js.map +1 -0
- package/lib/module/index.js +43 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/lib/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
- package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +265 -0
- package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +106 -0
- package/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +136 -0
- package/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.hpp +49 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void.kt +80 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void_double.kt +80 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +203 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/segmentsliderOnLoad.kt +35 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderManager.kt +50 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderStateUpdater.kt +23 -0
- package/lib/nitrogen/generated/android/segmentslider+autolinking.cmake +83 -0
- package/lib/nitrogen/generated/android/segmentslider+autolinking.gradle +27 -0
- package/lib/nitrogen/generated/android/segmentsliderOnLoad.cpp +50 -0
- package/lib/nitrogen/generated/android/segmentsliderOnLoad.hpp +25 -0
- package/lib/nitrogen/generated/ios/SegmentSlider+autolinking.rb +60 -0
- package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.cpp +49 -0
- package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +116 -0
- package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +44 -0
- package/lib/nitrogen/generated/ios/SegmentSliderAutolinking.mm +33 -0
- package/lib/nitrogen/generated/ios/SegmentSliderAutolinking.swift +25 -0
- package/lib/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.cpp +11 -0
- package/lib/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +208 -0
- package/lib/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +196 -0
- package/lib/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/lib/nitrogen/generated/ios/swift/Func_void_double.swift +47 -0
- package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +76 -0
- package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +423 -0
- package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +62 -0
- package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +105 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +327 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +128 -0
- package/lib/nitrogen/generated/shared/json/SegmentSliderConfig.json +30 -0
- package/lib/nitrogen/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/lib/nitrogen/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
- package/lib/nitrogen/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +265 -0
- package/lib/nitrogen/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +106 -0
- package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +136 -0
- package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.hpp +49 -0
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void.kt +80 -0
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void_double.kt +80 -0
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +203 -0
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/segmentsliderOnLoad.kt +35 -0
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderManager.kt +50 -0
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderStateUpdater.kt +23 -0
- package/lib/nitrogen/nitrogen/generated/android/segmentslider+autolinking.cmake +83 -0
- package/lib/nitrogen/nitrogen/generated/android/segmentslider+autolinking.gradle +27 -0
- package/lib/nitrogen/nitrogen/generated/android/segmentsliderOnLoad.cpp +50 -0
- package/lib/nitrogen/nitrogen/generated/android/segmentsliderOnLoad.hpp +25 -0
- package/lib/nitrogen/nitrogen/generated/ios/SegmentSlider+autolinking.rb +60 -0
- package/lib/nitrogen/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.cpp +49 -0
- package/lib/nitrogen/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +116 -0
- package/lib/nitrogen/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +44 -0
- package/lib/nitrogen/nitrogen/generated/ios/SegmentSliderAutolinking.mm +33 -0
- package/lib/nitrogen/nitrogen/generated/ios/SegmentSliderAutolinking.swift +25 -0
- package/lib/nitrogen/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.cpp +11 -0
- package/lib/nitrogen/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +208 -0
- package/lib/nitrogen/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +196 -0
- package/lib/nitrogen/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/lib/nitrogen/nitrogen/generated/ios/swift/Func_void_double.swift +47 -0
- package/lib/nitrogen/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +76 -0
- package/lib/nitrogen/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +423 -0
- package/lib/nitrogen/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +62 -0
- package/lib/nitrogen/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +105 -0
- package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +327 -0
- package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +128 -0
- package/lib/nitrogen/nitrogen/generated/shared/json/SegmentSliderConfig.json +30 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/SegmentSlider.nitro.d.ts +72 -0
- package/lib/typescript/src/SegmentSlider.nitro.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +11 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +17 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
- package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +265 -0
- package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +106 -0
- package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +136 -0
- package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void_double.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +203 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/segmentsliderOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderManager.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderStateUpdater.kt +23 -0
- package/nitrogen/generated/android/segmentslider+autolinking.cmake +83 -0
- package/nitrogen/generated/android/segmentslider+autolinking.gradle +27 -0
- package/nitrogen/generated/android/segmentsliderOnLoad.cpp +50 -0
- package/nitrogen/generated/android/segmentsliderOnLoad.hpp +25 -0
- package/nitrogen/generated/ios/SegmentSlider+autolinking.rb +60 -0
- package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.cpp +49 -0
- package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +116 -0
- package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +44 -0
- package/nitrogen/generated/ios/SegmentSliderAutolinking.mm +33 -0
- package/nitrogen/generated/ios/SegmentSliderAutolinking.swift +25 -0
- package/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +208 -0
- package/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +196 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_double.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +76 -0
- package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +423 -0
- package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +62 -0
- package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +105 -0
- package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +327 -0
- package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +128 -0
- package/nitrogen/generated/shared/json/SegmentSliderConfig.json +30 -0
- package/package.json +170 -0
- package/src/SegmentSlider.nitro.ts +80 -0
- package/src/index.tsx +59 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
HybridView,
|
|
3
|
+
HybridViewMethods,
|
|
4
|
+
HybridViewProps,
|
|
5
|
+
} from 'react-native-nitro-modules';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A segmented slider rendered entirely by native code. Track, fill bar, the
|
|
9
|
+
* N+1 segment marks, the draggable thumb and the value bubble are all drawn on
|
|
10
|
+
* the native UI thread (CALayer on iOS, Canvas onDraw on Android) and the pan
|
|
11
|
+
* gesture is handled natively — there is NO JS round-trip per frame during a
|
|
12
|
+
* drag. This mirrors the web variant
|
|
13
|
+
* (`packages/components/src/composite/SegmentSlider/index.tsx`) which avoids
|
|
14
|
+
* React state per frame by mutating the DOM imperatively.
|
|
15
|
+
*
|
|
16
|
+
* Geometry contract (points), matching the web layout 1:1:
|
|
17
|
+
* THUMB_SIZE = 16, MARK_SIZE = 10, hit/container height = 24
|
|
18
|
+
* track is inset by THUMB_SIZE/2 on each end → usable width W' = W - 16
|
|
19
|
+
* pct = (clamp(value,min,max) - min) / (max - min)
|
|
20
|
+
* thumb x = 8 + pct * W'
|
|
21
|
+
* mark i x = 8 + (i / segments) * W' (i in 0..segments)
|
|
22
|
+
*
|
|
23
|
+
* Colors are resolved from the Tamagui theme in the JS wrapper and passed in as
|
|
24
|
+
* hex / rgba() strings so the native side never depends on the theme system.
|
|
25
|
+
*/
|
|
26
|
+
export interface SegmentSliderProps extends HybridViewProps {
|
|
27
|
+
/** Current (controlled) value. Ignored while the user is dragging. */
|
|
28
|
+
value: number;
|
|
29
|
+
/** Range minimum (default range 0..100). */
|
|
30
|
+
min: number;
|
|
31
|
+
/** Range maximum. */
|
|
32
|
+
max: number;
|
|
33
|
+
/** Number of segment marks. 0 = continuous (no marks). Marks are visual. */
|
|
34
|
+
segments: number;
|
|
35
|
+
/** Track height in points (web default 4). */
|
|
36
|
+
sliderHeight: number;
|
|
37
|
+
/** When true the slider is non-interactive and dimmed. */
|
|
38
|
+
disabled: boolean;
|
|
39
|
+
/** When true a `${round(value)}%` bubble appears above the thumb on drag. */
|
|
40
|
+
showBubble: boolean;
|
|
41
|
+
/** When true the fill grows from the value-0 origin instead of the left. */
|
|
42
|
+
centerOrigin: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Monotonic token. Bump from JS on coin / leverage reset so the native view
|
|
45
|
+
* snaps to the new value WITHOUT animating the thumb scale. Mirrors the
|
|
46
|
+
* `epoch` convention used by react-native-perp-depth-bar.
|
|
47
|
+
*/
|
|
48
|
+
epoch: number;
|
|
49
|
+
|
|
50
|
+
// --- Resolved theme colors (hex `#rgb`/`#rrggbb`/`#rrggbbaa` or rgba()) ---
|
|
51
|
+
/** Active fill bar color (Tamagui `bgPrimary`). */
|
|
52
|
+
fillColor: string;
|
|
53
|
+
/** Inactive track color (Tamagui `neutral5`). */
|
|
54
|
+
trackColor: string;
|
|
55
|
+
/** Thumb fill color (Tamagui `bg`). */
|
|
56
|
+
thumbColor: string;
|
|
57
|
+
/** Thumb border color (Tamagui `borderStrong`). */
|
|
58
|
+
thumbBorderColor: string;
|
|
59
|
+
/** Active mark fill + border color (Tamagui `bgPrimary`). */
|
|
60
|
+
markActiveColor: string;
|
|
61
|
+
/** Inactive mark fill color (Tamagui `bg`). */
|
|
62
|
+
markInactiveColor: string;
|
|
63
|
+
/** Inactive mark border color (Tamagui `neutral5`). */
|
|
64
|
+
markBorderColor: string;
|
|
65
|
+
/** Bubble background color (Tamagui `bgPrimary`). */
|
|
66
|
+
bubbleColor: string;
|
|
67
|
+
/** Bubble text color (Tamagui `bg`). */
|
|
68
|
+
bubbleTextColor: string;
|
|
69
|
+
|
|
70
|
+
/** Fired (already rounded to an integer) when the value changes. */
|
|
71
|
+
onChange?: (value: number) => void;
|
|
72
|
+
/** Fired once when a drag/tap begins. */
|
|
73
|
+
onSlideStart?: () => void;
|
|
74
|
+
/** Fired once when a drag/tap ends. */
|
|
75
|
+
onSlideComplete?: () => void;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface SegmentSliderMethods extends HybridViewMethods {}
|
|
79
|
+
|
|
80
|
+
export type SegmentSlider = HybridView<SegmentSliderProps, SegmentSliderMethods>;
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useCallback, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
import { type ViewProps } from 'react-native';
|
|
4
|
+
import { callback, getHostComponent } from 'react-native-nitro-modules';
|
|
5
|
+
|
|
6
|
+
import type {
|
|
7
|
+
SegmentSliderMethods,
|
|
8
|
+
SegmentSliderProps,
|
|
9
|
+
} from './SegmentSlider.nitro';
|
|
10
|
+
|
|
11
|
+
const SegmentSliderConfig = require('../nitrogen/generated/shared/json/SegmentSliderConfig.json');
|
|
12
|
+
|
|
13
|
+
export type { SegmentSliderMethods, SegmentSliderProps };
|
|
14
|
+
|
|
15
|
+
const SegmentSliderHost = getHostComponent<
|
|
16
|
+
SegmentSliderProps,
|
|
17
|
+
SegmentSliderMethods
|
|
18
|
+
>('SegmentSlider', () => SegmentSliderConfig);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Thin wrapper so consumers pass plain functions. Nitro view callbacks must be
|
|
22
|
+
* wrapped with `callback(...)` to cross the JSI boundary; we encapsulate that
|
|
23
|
+
* here behind refs so the underlying functions stay stable across re-renders
|
|
24
|
+
* (otherwise every parent render would re-create the native callback).
|
|
25
|
+
*/
|
|
26
|
+
export function SegmentSliderView({
|
|
27
|
+
onChange,
|
|
28
|
+
onSlideStart,
|
|
29
|
+
onSlideComplete,
|
|
30
|
+
...props
|
|
31
|
+
}: SegmentSliderProps & ViewProps) {
|
|
32
|
+
const onChangeRef = useRef(onChange);
|
|
33
|
+
onChangeRef.current = onChange;
|
|
34
|
+
const onSlideStartRef = useRef(onSlideStart);
|
|
35
|
+
onSlideStartRef.current = onSlideStart;
|
|
36
|
+
const onSlideCompleteRef = useRef(onSlideComplete);
|
|
37
|
+
onSlideCompleteRef.current = onSlideComplete;
|
|
38
|
+
|
|
39
|
+
const stableOnChange = useCallback((value: number) => {
|
|
40
|
+
onChangeRef.current?.(value);
|
|
41
|
+
}, []);
|
|
42
|
+
const stableOnSlideStart = useCallback(() => {
|
|
43
|
+
onSlideStartRef.current?.();
|
|
44
|
+
}, []);
|
|
45
|
+
const stableOnSlideComplete = useCallback(() => {
|
|
46
|
+
onSlideCompleteRef.current?.();
|
|
47
|
+
}, []);
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<SegmentSliderHost
|
|
51
|
+
{...props}
|
|
52
|
+
onChange={onChange ? callback(stableOnChange) : undefined}
|
|
53
|
+
onSlideStart={onSlideStart ? callback(stableOnSlideStart) : undefined}
|
|
54
|
+
onSlideComplete={
|
|
55
|
+
onSlideComplete ? callback(stableOnSlideComplete) : undefined
|
|
56
|
+
}
|
|
57
|
+
/>
|
|
58
|
+
);
|
|
59
|
+
}
|