@studio-piot/native-ui 0.1.0 → 0.2.2
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/README.md +3 -1
- package/dist/components/Select/Select.d.ts +3 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +81 -19
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/SelectCloseButton.d.ts +9 -2
- package/dist/components/Select/SelectCloseButton.d.ts.map +1 -1
- package/dist/components/Select/SelectCloseButton.js +14 -6
- package/dist/components/Select/SelectCloseButton.js.map +1 -1
- package/dist/components/Select/index.d.ts +3 -3
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +2 -1
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/Select/presentSelectSheet.d.ts +7 -0
- package/dist/components/Select/presentSelectSheet.d.ts.map +1 -0
- package/dist/components/Select/presentSelectSheet.js +14 -0
- package/dist/components/Select/presentSelectSheet.js.map +1 -0
- package/dist/components/Select/resolveSelectDetentIndex.d.ts +2 -0
- package/dist/components/Select/resolveSelectDetentIndex.d.ts.map +1 -1
- package/dist/components/Select/resolveSelectDetentIndex.js +5 -0
- package/dist/components/Select/resolveSelectDetentIndex.js.map +1 -1
- package/dist/components/Select/selectThemeRoles.d.ts +1 -1
- package/dist/components/Select/selectThemeRoles.js +1 -1
- package/dist/components/Select/selectThemeRoles.js.map +1 -1
- package/dist/components/Select/trueSheetReanimated.d.ts +13 -0
- package/dist/components/Select/trueSheetReanimated.d.ts.map +1 -0
- package/dist/components/Select/trueSheetReanimated.js +14 -0
- package/dist/components/Select/trueSheetReanimated.js.map +1 -0
- package/dist/components/Select/types.d.ts +3 -1
- package/dist/components/Select/types.d.ts.map +1 -1
- package/dist/components/Slider/Slider.d.ts +3 -0
- package/dist/components/Slider/Slider.d.ts.map +1 -0
- package/dist/components/Slider/Slider.js +46 -0
- package/dist/components/Slider/Slider.js.map +1 -0
- package/dist/components/Slider/index.d.ts +4 -0
- package/dist/components/Slider/index.d.ts.map +1 -0
- package/dist/components/Slider/index.js +8 -0
- package/dist/components/Slider/index.js.map +1 -0
- package/dist/components/Slider/sliderThemeRoles.d.ts +8 -0
- package/dist/components/Slider/sliderThemeRoles.d.ts.map +1 -0
- package/dist/components/Slider/sliderThemeRoles.js +10 -0
- package/dist/components/Slider/sliderThemeRoles.js.map +1 -0
- package/dist/components/Slider/types.d.ts +18 -0
- package/dist/components/Slider/types.d.ts.map +1 -0
- package/dist/components/Slider/types.js +3 -0
- package/dist/components/Slider/types.js.map +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +5 -1
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/docs/components/select.md +32 -10
- package/docs/components/slider.md +65 -0
- package/docs/superpowers/plans/2026-09-25-select.md +26 -8
- package/docs/superpowers/plans/2026-09-25-slider.md +35 -0
- package/docs/superpowers/specs/2026-09-25-select-design.md +39 -67
- package/docs/superpowers/specs/2026-09-25-slider-design.md +117 -0
- package/package.json +12 -4
- package/src/components/Select/Select.tsx +188 -75
- package/src/components/Select/SelectCloseButton.tsx +32 -7
- package/src/components/Select/index.ts +6 -2
- package/src/components/Select/resolveSelectDetentIndex.test.ts +15 -1
- package/src/components/Select/resolveSelectDetentIndex.ts +5 -0
- package/src/components/Select/selectThemeRoles.test.ts +16 -0
- package/src/components/Select/selectThemeRoles.ts +1 -1
- package/src/components/Select/types.ts +3 -1
- package/src/components/Slider/Slider.tsx +95 -0
- package/src/components/Slider/index.ts +6 -0
- package/src/components/Slider/sliderThemeRoles.test.ts +12 -0
- package/src/components/Slider/sliderThemeRoles.ts +8 -0
- package/src/components/Slider/types.ts +18 -0
- package/src/components/index.ts +8 -1
- package/src/index.ts +9 -2
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { StyleSheet, Text, View } from "react-native";
|
|
2
|
+
import CommunitySlider from "@react-native-community/slider";
|
|
3
|
+
import { useResolvedFieldColor } from "../Field/useResolvedFieldColor";
|
|
4
|
+
import { SLIDER_THEME_ROLES } from "./sliderThemeRoles";
|
|
5
|
+
import type { SliderProps } from "./types";
|
|
6
|
+
|
|
7
|
+
export function Slider({
|
|
8
|
+
value,
|
|
9
|
+
onChange,
|
|
10
|
+
minimumValue,
|
|
11
|
+
maximumValue,
|
|
12
|
+
step,
|
|
13
|
+
label,
|
|
14
|
+
formatValue = String,
|
|
15
|
+
disabled = false,
|
|
16
|
+
labelColor: labelColorProp,
|
|
17
|
+
valueColor: valueColorProp,
|
|
18
|
+
highlightColor: highlightColorProp,
|
|
19
|
+
trackColor: trackColorProp,
|
|
20
|
+
style,
|
|
21
|
+
}: SliderProps) {
|
|
22
|
+
const labelColor = useResolvedFieldColor(
|
|
23
|
+
labelColorProp,
|
|
24
|
+
SLIDER_THEME_ROLES.labelColor,
|
|
25
|
+
);
|
|
26
|
+
const valueColor = useResolvedFieldColor(
|
|
27
|
+
valueColorProp,
|
|
28
|
+
SLIDER_THEME_ROLES.valueColor,
|
|
29
|
+
);
|
|
30
|
+
const highlightColor = useResolvedFieldColor(
|
|
31
|
+
highlightColorProp,
|
|
32
|
+
SLIDER_THEME_ROLES.highlightColor,
|
|
33
|
+
);
|
|
34
|
+
const trackColor = useResolvedFieldColor(
|
|
35
|
+
trackColorProp,
|
|
36
|
+
SLIDER_THEME_ROLES.trackColor,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const display = formatValue(value);
|
|
40
|
+
const accessibilityLabel = label ? `${label}. ${display}` : display;
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<View style={[styles.column, disabled && styles.blocked, style]}>
|
|
44
|
+
<View style={styles.header}>
|
|
45
|
+
{label ? (
|
|
46
|
+
<Text style={[styles.label, { color: labelColor, flex: 1 }]}>
|
|
47
|
+
{label}
|
|
48
|
+
</Text>
|
|
49
|
+
) : (
|
|
50
|
+
<View style={{ flex: 1 }} />
|
|
51
|
+
)}
|
|
52
|
+
<Text style={[styles.value, { color: valueColor }]}>{display}</Text>
|
|
53
|
+
</View>
|
|
54
|
+
<CommunitySlider
|
|
55
|
+
accessibilityLabel={accessibilityLabel}
|
|
56
|
+
disabled={disabled}
|
|
57
|
+
maximumTrackTintColor={trackColor}
|
|
58
|
+
maximumValue={maximumValue}
|
|
59
|
+
minimumTrackTintColor={highlightColor}
|
|
60
|
+
minimumValue={minimumValue}
|
|
61
|
+
onValueChange={onChange}
|
|
62
|
+
step={step}
|
|
63
|
+
style={styles.track}
|
|
64
|
+
thumbTintColor={highlightColor}
|
|
65
|
+
value={value}
|
|
66
|
+
/>
|
|
67
|
+
</View>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const styles = StyleSheet.create({
|
|
72
|
+
column: {
|
|
73
|
+
width: "100%",
|
|
74
|
+
gap: 6,
|
|
75
|
+
},
|
|
76
|
+
blocked: {
|
|
77
|
+
opacity: 0.4,
|
|
78
|
+
},
|
|
79
|
+
header: {
|
|
80
|
+
flexDirection: "row",
|
|
81
|
+
alignItems: "center",
|
|
82
|
+
gap: 12,
|
|
83
|
+
},
|
|
84
|
+
label: {
|
|
85
|
+
fontSize: 13,
|
|
86
|
+
fontWeight: "600",
|
|
87
|
+
},
|
|
88
|
+
value: {
|
|
89
|
+
fontSize: 17,
|
|
90
|
+
},
|
|
91
|
+
track: {
|
|
92
|
+
width: "100%",
|
|
93
|
+
height: 40,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { describe, it } from "node:test";
|
|
3
|
+
import { SLIDER_THEME_ROLES } from "./sliderThemeRoles.ts";
|
|
4
|
+
|
|
5
|
+
describe("SLIDER_THEME_ROLES", () => {
|
|
6
|
+
it("maps colour props to Field roles plus fieldSliderHighlight", () => {
|
|
7
|
+
assert.equal(SLIDER_THEME_ROLES.labelColor, "fieldLabel");
|
|
8
|
+
assert.equal(SLIDER_THEME_ROLES.valueColor, "fieldText");
|
|
9
|
+
assert.equal(SLIDER_THEME_ROLES.highlightColor, "fieldSliderHighlight");
|
|
10
|
+
assert.equal(SLIDER_THEME_ROLES.trackColor, "fieldBorder");
|
|
11
|
+
});
|
|
12
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StyleProp, ViewStyle } from "react-native";
|
|
2
|
+
|
|
3
|
+
export type SliderProps = {
|
|
4
|
+
value: number;
|
|
5
|
+
onChange: (value: number) => void;
|
|
6
|
+
minimumValue: number;
|
|
7
|
+
maximumValue: number;
|
|
8
|
+
step?: number;
|
|
9
|
+
label?: string;
|
|
10
|
+
/** Defaults to `String(value)`. */
|
|
11
|
+
formatValue?: (value: number) => string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
labelColor?: string;
|
|
14
|
+
valueColor?: string;
|
|
15
|
+
highlightColor?: string;
|
|
16
|
+
trackColor?: string;
|
|
17
|
+
style?: StyleProp<ViewStyle>;
|
|
18
|
+
};
|
package/src/components/index.ts
CHANGED
|
@@ -34,9 +34,16 @@ export {
|
|
|
34
34
|
SELECT_THEME_ROLES,
|
|
35
35
|
DEFAULT_SELECT_DETENTS,
|
|
36
36
|
DEFAULT_SELECT_INITIAL_DETENT,
|
|
37
|
+
detentsToSnapPoints,
|
|
37
38
|
resolveSelectDetentIndex,
|
|
38
39
|
type SelectThemeColorProp,
|
|
40
|
+
type SelectCloseButtonSlot,
|
|
39
41
|
type SelectOption,
|
|
40
42
|
type SelectProps,
|
|
41
|
-
type SelectCloseButtonProp,
|
|
42
43
|
} from "./Select";
|
|
44
|
+
export {
|
|
45
|
+
Slider,
|
|
46
|
+
SLIDER_THEME_ROLES,
|
|
47
|
+
type SliderThemeColorProp,
|
|
48
|
+
type SliderProps,
|
|
49
|
+
} from "./Slider";
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const version = "0.
|
|
1
|
+
export const version = "0.2.2";
|
|
2
2
|
|
|
3
3
|
export * from "./theme";
|
|
4
4
|
export {
|
|
@@ -41,10 +41,17 @@ export {
|
|
|
41
41
|
SELECT_THEME_ROLES,
|
|
42
42
|
DEFAULT_SELECT_DETENTS,
|
|
43
43
|
DEFAULT_SELECT_INITIAL_DETENT,
|
|
44
|
+
detentsToSnapPoints,
|
|
44
45
|
resolveSelectDetentIndex,
|
|
45
46
|
type SelectThemeColorProp,
|
|
47
|
+
type SelectCloseButtonSlot,
|
|
46
48
|
type SelectOption,
|
|
47
49
|
type SelectProps,
|
|
48
|
-
type SelectCloseButtonProp,
|
|
49
50
|
} from "./components/Select";
|
|
51
|
+
export {
|
|
52
|
+
Slider,
|
|
53
|
+
SLIDER_THEME_ROLES,
|
|
54
|
+
type SliderThemeColorProp,
|
|
55
|
+
type SliderProps,
|
|
56
|
+
} from "./components/Slider";
|
|
50
57
|
export * as components from "./components";
|