@masumdev/rn-ui 0.1.7 → 0.2.0
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/lib/commonjs/components/Accordion.js +28 -13
- package/lib/commonjs/components/Accordion.js.map +1 -1
- package/lib/commonjs/components/Alert.js +229 -73
- package/lib/commonjs/components/Alert.js.map +1 -1
- package/lib/commonjs/components/AlertDialog.js +143 -87
- package/lib/commonjs/components/AlertDialog.js.map +1 -1
- package/lib/commonjs/components/Avatar.js +31 -28
- package/lib/commonjs/components/Avatar.js.map +1 -1
- package/lib/commonjs/components/Badge.js +18 -7
- package/lib/commonjs/components/Badge.js.map +1 -1
- package/lib/commonjs/components/BottomSheet.js +63 -8
- package/lib/commonjs/components/BottomSheet.js.map +1 -1
- package/lib/commonjs/components/Breadcrumb.js +31 -9
- package/lib/commonjs/components/Breadcrumb.js.map +1 -1
- package/lib/commonjs/components/Button.js +22 -6
- package/lib/commonjs/components/Button.js.map +1 -1
- package/lib/commonjs/components/Calendar.js +113 -31
- package/lib/commonjs/components/Calendar.js.map +1 -1
- package/lib/commonjs/components/Card.js +8 -3
- package/lib/commonjs/components/Card.js.map +1 -1
- package/lib/commonjs/components/Carousel.js +67 -21
- package/lib/commonjs/components/Carousel.js.map +1 -1
- package/lib/commonjs/components/Checkbox.js +12 -7
- package/lib/commonjs/components/Checkbox.js.map +1 -1
- package/lib/commonjs/components/Collapsible.js +47 -36
- package/lib/commonjs/components/Collapsible.js.map +1 -1
- package/lib/commonjs/components/Combobox.js +110 -48
- package/lib/commonjs/components/Combobox.js.map +1 -1
- package/lib/commonjs/components/Command.js +121 -77
- package/lib/commonjs/components/Command.js.map +1 -1
- package/lib/commonjs/components/DropdownMenu.js +78 -25
- package/lib/commonjs/components/DropdownMenu.js.map +1 -1
- package/lib/commonjs/components/Empty.js +24 -10
- package/lib/commonjs/components/Empty.js.map +1 -1
- package/lib/commonjs/components/FormField.js +63 -13
- package/lib/commonjs/components/FormField.js.map +1 -1
- package/lib/commonjs/components/IconButton.js +22 -6
- package/lib/commonjs/components/IconButton.js.map +1 -1
- package/lib/commonjs/components/Input.js +11 -13
- package/lib/commonjs/components/Input.js.map +1 -1
- package/lib/commonjs/components/InputGroup.js +19 -10
- package/lib/commonjs/components/InputGroup.js.map +1 -1
- package/lib/commonjs/components/InputOTP.js +46 -15
- package/lib/commonjs/components/InputOTP.js.map +1 -1
- package/lib/commonjs/components/Popover.js +90 -23
- package/lib/commonjs/components/Popover.js.map +1 -1
- package/lib/commonjs/components/Progress.js +105 -6
- package/lib/commonjs/components/Progress.js.map +1 -1
- package/lib/commonjs/components/RadioGroup.js +109 -51
- package/lib/commonjs/components/RadioGroup.js.map +1 -1
- package/lib/commonjs/components/Rating.js +109 -95
- package/lib/commonjs/components/Rating.js.map +1 -1
- package/lib/commonjs/components/Select.js +109 -43
- package/lib/commonjs/components/Select.js.map +1 -1
- package/lib/commonjs/components/Sheet.js +217 -29
- package/lib/commonjs/components/Sheet.js.map +1 -1
- package/lib/commonjs/components/Stepper.js +119 -24
- package/lib/commonjs/components/Stepper.js.map +1 -1
- package/lib/commonjs/components/Switch.js +21 -11
- package/lib/commonjs/components/Switch.js.map +1 -1
- package/lib/commonjs/components/Tabs.js +159 -28
- package/lib/commonjs/components/Tabs.js.map +1 -1
- package/lib/commonjs/components/Timeline.js +35 -12
- package/lib/commonjs/components/Timeline.js.map +1 -1
- package/lib/commonjs/components/Toast.js +163 -38
- package/lib/commonjs/components/Toast.js.map +1 -1
- package/lib/commonjs/components/index.js +12 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/components/types.js +16 -0
- package/lib/commonjs/components/types.js.map +1 -1
- package/lib/commonjs/theme/tokens.js +7 -7
- package/lib/commonjs/theme/tokens.js.map +1 -1
- package/lib/commonjs/utils/haptics.js +42 -0
- package/lib/commonjs/utils/haptics.js.map +1 -0
- package/lib/commonjs/utils/index.js +7 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/components/Accordion.js +28 -13
- package/lib/module/components/Accordion.js.map +1 -1
- package/lib/module/components/Alert.js +229 -73
- package/lib/module/components/Alert.js.map +1 -1
- package/lib/module/components/AlertDialog.js +144 -88
- package/lib/module/components/AlertDialog.js.map +1 -1
- package/lib/module/components/Avatar.js +31 -28
- package/lib/module/components/Avatar.js.map +1 -1
- package/lib/module/components/Badge.js +18 -7
- package/lib/module/components/Badge.js.map +1 -1
- package/lib/module/components/BottomSheet.js +64 -4
- package/lib/module/components/BottomSheet.js.map +1 -1
- package/lib/module/components/Breadcrumb.js +31 -9
- package/lib/module/components/Breadcrumb.js.map +1 -1
- package/lib/module/components/Button.js +22 -6
- package/lib/module/components/Button.js.map +1 -1
- package/lib/module/components/Calendar.js +114 -32
- package/lib/module/components/Calendar.js.map +1 -1
- package/lib/module/components/Card.js +8 -3
- package/lib/module/components/Card.js.map +1 -1
- package/lib/module/components/Carousel.js +67 -21
- package/lib/module/components/Carousel.js.map +1 -1
- package/lib/module/components/Checkbox.js +12 -7
- package/lib/module/components/Checkbox.js.map +1 -1
- package/lib/module/components/Collapsible.js +49 -38
- package/lib/module/components/Collapsible.js.map +1 -1
- package/lib/module/components/Combobox.js +110 -48
- package/lib/module/components/Combobox.js.map +1 -1
- package/lib/module/components/Command.js +121 -77
- package/lib/module/components/Command.js.map +1 -1
- package/lib/module/components/DropdownMenu.js +79 -26
- package/lib/module/components/DropdownMenu.js.map +1 -1
- package/lib/module/components/Empty.js +24 -10
- package/lib/module/components/Empty.js.map +1 -1
- package/lib/module/components/FormField.js +63 -14
- package/lib/module/components/FormField.js.map +1 -1
- package/lib/module/components/IconButton.js +22 -6
- package/lib/module/components/IconButton.js.map +1 -1
- package/lib/module/components/Input.js +12 -14
- package/lib/module/components/Input.js.map +1 -1
- package/lib/module/components/InputGroup.js +19 -10
- package/lib/module/components/InputGroup.js.map +1 -1
- package/lib/module/components/InputOTP.js +46 -15
- package/lib/module/components/InputOTP.js.map +1 -1
- package/lib/module/components/Popover.js +90 -24
- package/lib/module/components/Popover.js.map +1 -1
- package/lib/module/components/Progress.js +106 -8
- package/lib/module/components/Progress.js.map +1 -1
- package/lib/module/components/RadioGroup.js +108 -51
- package/lib/module/components/RadioGroup.js.map +1 -1
- package/lib/module/components/Rating.js +109 -95
- package/lib/module/components/Rating.js.map +1 -1
- package/lib/module/components/Select.js +111 -45
- package/lib/module/components/Select.js.map +1 -1
- package/lib/module/components/Sheet.js +216 -24
- package/lib/module/components/Sheet.js.map +1 -1
- package/lib/module/components/Stepper.js +120 -25
- package/lib/module/components/Stepper.js.map +1 -1
- package/lib/module/components/Switch.js +21 -11
- package/lib/module/components/Switch.js.map +1 -1
- package/lib/module/components/Tabs.js +158 -29
- package/lib/module/components/Tabs.js.map +1 -1
- package/lib/module/components/Timeline.js +35 -12
- package/lib/module/components/Timeline.js.map +1 -1
- package/lib/module/components/Toast.js +164 -38
- package/lib/module/components/Toast.js.map +1 -1
- package/lib/module/components/index.js +2 -2
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/types.js +16 -0
- package/lib/module/components/types.js.map +1 -1
- package/lib/module/theme/tokens.js +7 -7
- package/lib/module/theme/tokens.js.map +1 -1
- package/lib/module/utils/haptics.js +38 -0
- package/lib/module/utils/haptics.js.map +1 -0
- package/lib/module/utils/index.js +1 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/commonjs/components/Accordion.d.ts +6 -3
- package/lib/typescript/commonjs/components/Accordion.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Alert.d.ts +4 -4
- package/lib/typescript/commonjs/components/Alert.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/AlertDialog.d.ts +5 -3
- package/lib/typescript/commonjs/components/AlertDialog.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Avatar.d.ts +9 -4
- package/lib/typescript/commonjs/components/Avatar.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Badge.d.ts +4 -4
- package/lib/typescript/commonjs/components/Badge.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/BottomSheet.d.ts +13 -4
- package/lib/typescript/commonjs/components/BottomSheet.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Breadcrumb.d.ts +6 -5
- package/lib/typescript/commonjs/components/Breadcrumb.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Button.d.ts +3 -3
- package/lib/typescript/commonjs/components/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Calendar.d.ts +9 -1
- package/lib/typescript/commonjs/components/Calendar.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Card.d.ts +3 -2
- package/lib/typescript/commonjs/components/Card.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Carousel.d.ts +4 -1
- package/lib/typescript/commonjs/components/Carousel.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Checkbox.d.ts +3 -3
- package/lib/typescript/commonjs/components/Checkbox.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Collapsible.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Combobox.d.ts +11 -6
- package/lib/typescript/commonjs/components/Combobox.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Command.d.ts +3 -0
- package/lib/typescript/commonjs/components/Command.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/DropdownMenu.d.ts +4 -2
- package/lib/typescript/commonjs/components/DropdownMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Empty.d.ts +7 -4
- package/lib/typescript/commonjs/components/Empty.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/FormField.d.ts +12 -4
- package/lib/typescript/commonjs/components/FormField.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/IconButton.d.ts +3 -3
- package/lib/typescript/commonjs/components/IconButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Input.d.ts +2 -1
- package/lib/typescript/commonjs/components/Input.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/InputGroup.d.ts +3 -2
- package/lib/typescript/commonjs/components/InputGroup.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/InputOTP.d.ts +9 -4
- package/lib/typescript/commonjs/components/InputOTP.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Popover.d.ts +1 -1
- package/lib/typescript/commonjs/components/Popover.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Progress.d.ts +13 -1
- package/lib/typescript/commonjs/components/Progress.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/RadioGroup.d.ts +3 -2
- package/lib/typescript/commonjs/components/RadioGroup.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Rating.d.ts +3 -23
- package/lib/typescript/commonjs/components/Rating.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Select.d.ts +5 -4
- package/lib/typescript/commonjs/components/Select.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Sheet.d.ts +25 -6
- package/lib/typescript/commonjs/components/Sheet.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Stepper.d.ts +5 -3
- package/lib/typescript/commonjs/components/Stepper.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Switch.d.ts +3 -3
- package/lib/typescript/commonjs/components/Switch.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Tabs.d.ts +21 -4
- package/lib/typescript/commonjs/components/Tabs.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Timeline.d.ts +9 -3
- package/lib/typescript/commonjs/components/Timeline.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Toast.d.ts +3 -0
- package/lib/typescript/commonjs/components/Toast.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/index.d.ts +5 -5
- package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/types.d.ts +35 -0
- package/lib/typescript/commonjs/components/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/haptics.d.ts +6 -0
- package/lib/typescript/commonjs/utils/haptics.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/index.d.ts +1 -0
- package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
- package/lib/typescript/module/components/Accordion.d.ts +6 -3
- package/lib/typescript/module/components/Accordion.d.ts.map +1 -1
- package/lib/typescript/module/components/Alert.d.ts +4 -4
- package/lib/typescript/module/components/Alert.d.ts.map +1 -1
- package/lib/typescript/module/components/AlertDialog.d.ts +5 -3
- package/lib/typescript/module/components/AlertDialog.d.ts.map +1 -1
- package/lib/typescript/module/components/Avatar.d.ts +9 -4
- package/lib/typescript/module/components/Avatar.d.ts.map +1 -1
- package/lib/typescript/module/components/Badge.d.ts +4 -4
- package/lib/typescript/module/components/Badge.d.ts.map +1 -1
- package/lib/typescript/module/components/BottomSheet.d.ts +13 -4
- package/lib/typescript/module/components/BottomSheet.d.ts.map +1 -1
- package/lib/typescript/module/components/Breadcrumb.d.ts +6 -5
- package/lib/typescript/module/components/Breadcrumb.d.ts.map +1 -1
- package/lib/typescript/module/components/Button.d.ts +3 -3
- package/lib/typescript/module/components/Button.d.ts.map +1 -1
- package/lib/typescript/module/components/Calendar.d.ts +9 -1
- package/lib/typescript/module/components/Calendar.d.ts.map +1 -1
- package/lib/typescript/module/components/Card.d.ts +3 -2
- package/lib/typescript/module/components/Card.d.ts.map +1 -1
- package/lib/typescript/module/components/Carousel.d.ts +4 -1
- package/lib/typescript/module/components/Carousel.d.ts.map +1 -1
- package/lib/typescript/module/components/Checkbox.d.ts +3 -3
- package/lib/typescript/module/components/Checkbox.d.ts.map +1 -1
- package/lib/typescript/module/components/Collapsible.d.ts.map +1 -1
- package/lib/typescript/module/components/Combobox.d.ts +11 -6
- package/lib/typescript/module/components/Combobox.d.ts.map +1 -1
- package/lib/typescript/module/components/Command.d.ts +3 -0
- package/lib/typescript/module/components/Command.d.ts.map +1 -1
- package/lib/typescript/module/components/DropdownMenu.d.ts +4 -2
- package/lib/typescript/module/components/DropdownMenu.d.ts.map +1 -1
- package/lib/typescript/module/components/Empty.d.ts +7 -4
- package/lib/typescript/module/components/Empty.d.ts.map +1 -1
- package/lib/typescript/module/components/FormField.d.ts +12 -4
- package/lib/typescript/module/components/FormField.d.ts.map +1 -1
- package/lib/typescript/module/components/IconButton.d.ts +3 -3
- package/lib/typescript/module/components/IconButton.d.ts.map +1 -1
- package/lib/typescript/module/components/Input.d.ts +2 -1
- package/lib/typescript/module/components/Input.d.ts.map +1 -1
- package/lib/typescript/module/components/InputGroup.d.ts +3 -2
- package/lib/typescript/module/components/InputGroup.d.ts.map +1 -1
- package/lib/typescript/module/components/InputOTP.d.ts +9 -4
- package/lib/typescript/module/components/InputOTP.d.ts.map +1 -1
- package/lib/typescript/module/components/Popover.d.ts +1 -1
- package/lib/typescript/module/components/Popover.d.ts.map +1 -1
- package/lib/typescript/module/components/Progress.d.ts +13 -1
- package/lib/typescript/module/components/Progress.d.ts.map +1 -1
- package/lib/typescript/module/components/RadioGroup.d.ts +3 -2
- package/lib/typescript/module/components/RadioGroup.d.ts.map +1 -1
- package/lib/typescript/module/components/Rating.d.ts +3 -23
- package/lib/typescript/module/components/Rating.d.ts.map +1 -1
- package/lib/typescript/module/components/Select.d.ts +5 -4
- package/lib/typescript/module/components/Select.d.ts.map +1 -1
- package/lib/typescript/module/components/Sheet.d.ts +25 -6
- package/lib/typescript/module/components/Sheet.d.ts.map +1 -1
- package/lib/typescript/module/components/Stepper.d.ts +5 -3
- package/lib/typescript/module/components/Stepper.d.ts.map +1 -1
- package/lib/typescript/module/components/Switch.d.ts +3 -3
- package/lib/typescript/module/components/Switch.d.ts.map +1 -1
- package/lib/typescript/module/components/Tabs.d.ts +21 -4
- package/lib/typescript/module/components/Tabs.d.ts.map +1 -1
- package/lib/typescript/module/components/Timeline.d.ts +9 -3
- package/lib/typescript/module/components/Timeline.d.ts.map +1 -1
- package/lib/typescript/module/components/Toast.d.ts +3 -0
- package/lib/typescript/module/components/Toast.d.ts.map +1 -1
- package/lib/typescript/module/components/index.d.ts +5 -5
- package/lib/typescript/module/components/index.d.ts.map +1 -1
- package/lib/typescript/module/components/types.d.ts +35 -0
- package/lib/typescript/module/components/types.d.ts.map +1 -1
- package/lib/typescript/module/utils/haptics.d.ts +6 -0
- package/lib/typescript/module/utils/haptics.d.ts.map +1 -0
- package/lib/typescript/module/utils/index.d.ts +1 -0
- package/lib/typescript/module/utils/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,7 @@ import React from "react";
|
|
|
4
4
|
import { Pressable } from "react-native";
|
|
5
5
|
import Animated, { interpolateColor, useAnimatedStyle, useSharedValue, withSpring, withTiming } from "react-native-reanimated";
|
|
6
6
|
import { useTheme } from "../theme/index.js";
|
|
7
|
+
import { triggerHaptic } from "../utils/haptics.js";
|
|
7
8
|
import { renderIcon } from "./types.js";
|
|
8
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
10
|
export function Switch({
|
|
@@ -14,6 +15,8 @@ export function Switch({
|
|
|
14
15
|
invalid = false,
|
|
15
16
|
size = "md",
|
|
16
17
|
tone = "primary",
|
|
18
|
+
glass = false,
|
|
19
|
+
haptic = true,
|
|
17
20
|
style,
|
|
18
21
|
trackStyle,
|
|
19
22
|
thumbStyle,
|
|
@@ -32,7 +35,8 @@ export function Switch({
|
|
|
32
35
|
const {
|
|
33
36
|
colors,
|
|
34
37
|
components,
|
|
35
|
-
radii
|
|
38
|
+
radii,
|
|
39
|
+
isDark
|
|
36
40
|
} = useTheme();
|
|
37
41
|
const isControlled = value !== undefined;
|
|
38
42
|
const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
|
|
@@ -47,7 +51,6 @@ export function Switch({
|
|
|
47
51
|
});
|
|
48
52
|
}, [checked, progress]);
|
|
49
53
|
const activeColor = invalid ? colors.danger : colors[tone];
|
|
50
|
-
const activeSoftColor = invalid ? colors.dangerSoft : tone === "primary" ? colors.primarySoft : tone === "secondary" ? colors.secondarySoft : tone === "accent" ? colors.accentSoft : tone === "success" ? colors.successSoft : tone === "warning" ? colors.warningSoft : tone === "danger" ? colors.dangerSoft : colors.infoSoft;
|
|
51
54
|
const thumbIcon = checked ? activeIcon : inactiveIcon;
|
|
52
55
|
const selectedThumbContent = (checked ? activeThumbContent : inactiveThumbContent) ?? thumbContent;
|
|
53
56
|
const width = components.switch.width[size];
|
|
@@ -57,12 +60,19 @@ export function Switch({
|
|
|
57
60
|
const borderWidth = components.borderWidth.focus;
|
|
58
61
|
const inset = (height - thumbSize) / 2;
|
|
59
62
|
const travel = width - thumbSize - (inset + borderWidth) * 2;
|
|
60
|
-
const
|
|
61
|
-
const inactiveTrackColor = disabled ? colors.disabled : colors.backgroundMuted;
|
|
62
|
-
const
|
|
63
|
+
const glassBg = isDark ? "rgba(15, 27, 45, 0.60)" : "rgba(255, 255, 255, 0.70)";
|
|
64
|
+
const inactiveTrackColor = disabled ? colors.disabled : glass ? glassBg : isDark ? "rgba(30, 41, 59, 0.90)" : colors.backgroundMuted;
|
|
65
|
+
const activeTrackColor = disabled ? colors.disabled : activeColor;
|
|
66
|
+
const inactiveBorderColor = invalid ? colors.danger : glass ? isDark ? "rgba(248, 250, 252, 0.20)" : "rgba(15, 23, 42, 0.14)" : isDark ? "rgba(148, 163, 184, 0.30)" : colors.border;
|
|
67
|
+
const activeBorderColor = invalid ? colors.danger : activeColor;
|
|
68
|
+
|
|
69
|
+
// Crisp white/light-slate knob for OFF state in both dark & light mode
|
|
70
|
+
const inactiveThumbColor = disabled ? colors.disabledText : isDark ? "#e2e8f0" : "#ffffff";
|
|
71
|
+
const activeThumbColor = disabled ? colors.disabledText : "#ffffff";
|
|
63
72
|
const handlePress = event => {
|
|
64
73
|
onPress?.(event);
|
|
65
74
|
if (disabled) return;
|
|
75
|
+
if (haptic) triggerHaptic("selection");
|
|
66
76
|
const nextValue = !checked;
|
|
67
77
|
if (!isControlled) {
|
|
68
78
|
setUncontrolledValue(nextValue);
|
|
@@ -82,8 +92,8 @@ export function Switch({
|
|
|
82
92
|
});
|
|
83
93
|
};
|
|
84
94
|
const trackAnimatedStyle = useAnimatedStyle(() => ({
|
|
85
|
-
backgroundColor: interpolateColor(progress.value, [0, 1], [inactiveTrackColor,
|
|
86
|
-
borderColor: interpolateColor(progress.value, [0, 1], [inactiveBorderColor,
|
|
95
|
+
backgroundColor: interpolateColor(progress.value, [0, 1], [inactiveTrackColor, activeTrackColor]),
|
|
96
|
+
borderColor: interpolateColor(progress.value, [0, 1], [inactiveBorderColor, activeBorderColor])
|
|
87
97
|
}));
|
|
88
98
|
const thumbAnimatedStyle = useAnimatedStyle(() => ({
|
|
89
99
|
transform: [{
|
|
@@ -91,9 +101,9 @@ export function Switch({
|
|
|
91
101
|
}, {
|
|
92
102
|
scale: 1 + pressed.value * 0.06
|
|
93
103
|
}],
|
|
94
|
-
backgroundColor: interpolateColor(progress.value, [0, 1], [
|
|
104
|
+
backgroundColor: interpolateColor(progress.value, [0, 1], [inactiveThumbColor, activeThumbColor])
|
|
95
105
|
}));
|
|
96
|
-
const iconColor = checked ? invalid ? colors.
|
|
106
|
+
const iconColor = checked ? invalid ? colors.danger : activeColor : colors.textSubtle;
|
|
97
107
|
const thumbContentParams = {
|
|
98
108
|
checked,
|
|
99
109
|
disabled,
|
|
@@ -116,7 +126,7 @@ export function Switch({
|
|
|
116
126
|
style: ({
|
|
117
127
|
pressed: isPressed
|
|
118
128
|
}) => [{
|
|
119
|
-
opacity: disabled ? 0.
|
|
129
|
+
opacity: disabled ? 0.45 : isPressed ? 0.9 : 1,
|
|
120
130
|
alignSelf: "flex-start"
|
|
121
131
|
}, style],
|
|
122
132
|
...props,
|
|
@@ -137,7 +147,7 @@ export function Switch({
|
|
|
137
147
|
alignItems: "center",
|
|
138
148
|
justifyContent: "center",
|
|
139
149
|
borderWidth: components.borderWidth.default,
|
|
140
|
-
borderColor: checked ? activeColor :
|
|
150
|
+
borderColor: checked ? activeColor : "transparent"
|
|
141
151
|
}, thumbAnimatedStyle, thumbStyle],
|
|
142
152
|
children: renderThumb ? renderThumb(thumbContentParams) : renderedThumbContent ? renderedThumbContent : thumbIcon ? renderIcon(thumbIcon, iconColor, iconSize) : null
|
|
143
153
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Pressable","Animated","interpolateColor","useAnimatedStyle","useSharedValue","withSpring","withTiming","useTheme","renderIcon","jsx","_jsx","Switch","value","defaultValue","onValueChange","disabled","invalid","size","tone","style","trackStyle","thumbStyle","activeIcon","inactiveIcon","thumbContent","activeThumbContent","inactiveThumbContent","renderThumb","onPress","onPressIn","onPressOut","accessibilityLabel","props","colors","components","radii","isControlled","undefined","uncontrolledValue","setUncontrolledValue","useState","checked","progress","pressed","useEffect","damping","stiffness","mass","activeColor","danger","
|
|
1
|
+
{"version":3,"names":["React","Pressable","Animated","interpolateColor","useAnimatedStyle","useSharedValue","withSpring","withTiming","useTheme","triggerHaptic","renderIcon","jsx","_jsx","Switch","value","defaultValue","onValueChange","disabled","invalid","size","tone","glass","haptic","style","trackStyle","thumbStyle","activeIcon","inactiveIcon","thumbContent","activeThumbContent","inactiveThumbContent","renderThumb","onPress","onPressIn","onPressOut","accessibilityLabel","props","colors","components","radii","isDark","isControlled","undefined","uncontrolledValue","setUncontrolledValue","useState","checked","progress","pressed","useEffect","damping","stiffness","mass","activeColor","danger","thumbIcon","selectedThumbContent","width","switch","height","thumbSize","iconSize","borderWidth","focus","inset","travel","glassBg","inactiveTrackColor","backgroundMuted","activeTrackColor","inactiveBorderColor","border","activeBorderColor","inactiveThumbColor","disabledText","activeThumbColor","handlePress","event","nextValue","handlePressIn","duration","handlePressOut","trackAnimatedStyle","backgroundColor","borderColor","thumbAnimatedStyle","transform","translateX","scale","iconColor","textSubtle","thumbContentParams","color","renderedThumbContent","accessibilityRole","accessibilityState","isPressed","opacity","alignSelf","children","View","borderRadius","full","padding","justifyContent","alignItems","default"],"sourceRoot":"../../../src","sources":["components/Switch.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,13 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { Pressable, View } from "react-native";
|
|
5
|
+
import Animated, { useAnimatedStyle, useSharedValue, withTiming } from "react-native-reanimated";
|
|
5
6
|
import { useTheme } from "../theme/index.js";
|
|
7
|
+
import { triggerHaptic } from "../utils/haptics.js";
|
|
6
8
|
import { Text } from "./Text.js";
|
|
7
|
-
import {
|
|
9
|
+
import { renderIcon } from "./types.js";
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
11
|
const TabsContext = /*#__PURE__*/React.createContext(null);
|
|
12
|
+
export function useTabsContext() {
|
|
13
|
+
const context = React.useContext(TabsContext);
|
|
14
|
+
if (!context) {
|
|
15
|
+
throw new Error("Tabs compound components must be rendered inside <Tabs />");
|
|
16
|
+
}
|
|
17
|
+
return context;
|
|
18
|
+
}
|
|
9
19
|
export function Tabs({
|
|
10
20
|
value,
|
|
11
21
|
defaultValue,
|
|
22
|
+
variant = "segmented",
|
|
23
|
+
size = "md",
|
|
24
|
+
glass = false,
|
|
25
|
+
haptic = true,
|
|
26
|
+
animated = true,
|
|
12
27
|
onValueChange,
|
|
13
28
|
style,
|
|
14
29
|
...props
|
|
@@ -17,15 +32,35 @@ export function Tabs({
|
|
|
17
32
|
spacing
|
|
18
33
|
} = useTheme();
|
|
19
34
|
const [internalValue, setInternalValue] = React.useState(defaultValue);
|
|
35
|
+
const [tabNodes, setTabNodes] = React.useState({});
|
|
20
36
|
const currentValue = value ?? internalValue;
|
|
37
|
+
const registerTabNode = React.useCallback((tabValue, layout) => {
|
|
38
|
+
setTabNodes(prev => {
|
|
39
|
+
if (prev[tabValue]?.x === layout.x && prev[tabValue]?.width === layout.width) {
|
|
40
|
+
return prev;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
...prev,
|
|
44
|
+
[tabValue]: layout
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}, []);
|
|
21
48
|
const handleValueChange = React.useCallback(next => {
|
|
49
|
+
if (haptic) triggerHaptic("selection");
|
|
22
50
|
if (value === undefined) setInternalValue(next);
|
|
23
51
|
onValueChange?.(next);
|
|
24
|
-
}, [onValueChange, value]);
|
|
52
|
+
}, [haptic, onValueChange, value]);
|
|
25
53
|
const context = React.useMemo(() => ({
|
|
26
54
|
value: currentValue,
|
|
27
|
-
onValueChange: handleValueChange
|
|
28
|
-
|
|
55
|
+
onValueChange: handleValueChange,
|
|
56
|
+
variant,
|
|
57
|
+
size,
|
|
58
|
+
glass,
|
|
59
|
+
haptic,
|
|
60
|
+
animated,
|
|
61
|
+
registerTabNode,
|
|
62
|
+
tabNodes
|
|
63
|
+
}), [currentValue, handleValueChange, variant, size, glass, haptic, animated, registerTabNode, tabNodes]);
|
|
29
64
|
return /*#__PURE__*/_jsx(TabsContext.Provider, {
|
|
30
65
|
value: context,
|
|
31
66
|
children: /*#__PURE__*/_jsx(View, {
|
|
@@ -37,73 +72,165 @@ export function Tabs({
|
|
|
37
72
|
})
|
|
38
73
|
});
|
|
39
74
|
}
|
|
75
|
+
const listHeights = {
|
|
76
|
+
sm: 36,
|
|
77
|
+
md: 44,
|
|
78
|
+
lg: 52
|
|
79
|
+
};
|
|
40
80
|
export function TabsList({
|
|
41
81
|
style,
|
|
82
|
+
children,
|
|
42
83
|
...props
|
|
43
84
|
}) {
|
|
44
85
|
const {
|
|
45
86
|
colors,
|
|
46
87
|
components,
|
|
47
88
|
radii,
|
|
48
|
-
spacing
|
|
89
|
+
spacing,
|
|
90
|
+
isDark
|
|
49
91
|
} = useTheme();
|
|
50
|
-
|
|
92
|
+
const {
|
|
93
|
+
value,
|
|
94
|
+
variant,
|
|
95
|
+
size,
|
|
96
|
+
glass,
|
|
97
|
+
animated,
|
|
98
|
+
tabNodes
|
|
99
|
+
} = useTabsContext();
|
|
100
|
+
const activeNode = value ? tabNodes[value] : undefined;
|
|
101
|
+
const indicatorX = useSharedValue(0);
|
|
102
|
+
const indicatorWidth = useSharedValue(0);
|
|
103
|
+
const initialized = useSharedValue(false);
|
|
104
|
+
React.useEffect(() => {
|
|
105
|
+
if (activeNode && activeNode.width > 0) {
|
|
106
|
+
if (!animated || !initialized.value) {
|
|
107
|
+
indicatorX.value = activeNode.x;
|
|
108
|
+
indicatorWidth.value = activeNode.width;
|
|
109
|
+
initialized.value = true;
|
|
110
|
+
} else {
|
|
111
|
+
indicatorX.value = withTiming(activeNode.x, {
|
|
112
|
+
duration: 180
|
|
113
|
+
});
|
|
114
|
+
indicatorWidth.value = withTiming(activeNode.width, {
|
|
115
|
+
duration: 180
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}, [activeNode, animated, indicatorX, indicatorWidth, initialized]);
|
|
120
|
+
const glassBg = isDark ? "rgba(15, 27, 45, 0.70)" : "rgba(255, 255, 255, 0.85)";
|
|
121
|
+
const isUnderline = variant === "underline";
|
|
122
|
+
const isPills = variant === "pills";
|
|
123
|
+
const height = listHeights[size];
|
|
124
|
+
const indicatorStyle = useAnimatedStyle(() => ({
|
|
125
|
+
transform: [{
|
|
126
|
+
translateX: indicatorX.value
|
|
127
|
+
}],
|
|
128
|
+
width: indicatorWidth.value
|
|
129
|
+
}));
|
|
130
|
+
const activeBg = variant === "segmented" || variant === "pills" ? colors.primary : variant === "soft" ? colors.primarySoft : colors.transparent;
|
|
131
|
+
const padding = isUnderline ? 0 : 4;
|
|
132
|
+
// Concentric radius rule: InnerRadius = OuterRadius - Padding (16 - 4 = 12px)
|
|
133
|
+
const innerRadius = isPills ? radii.full : isUnderline ? 0 : radii.md;
|
|
134
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
51
135
|
style: [{
|
|
52
136
|
width: "100%",
|
|
53
|
-
minHeight:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
137
|
+
minHeight: height,
|
|
138
|
+
height: isUnderline ? undefined : height,
|
|
139
|
+
padding,
|
|
140
|
+
borderRadius: isUnderline ? 0 : radii.lg,
|
|
141
|
+
borderWidth: isUnderline ? 0 : components.borderWidth.strong,
|
|
142
|
+
borderColor: glass ? isDark ? "rgba(248, 250, 252, 0.20)" : "rgba(15, 23, 42, 0.14)" : colors.border,
|
|
143
|
+
borderBottomWidth: isUnderline ? components.borderWidth.strong : undefined,
|
|
144
|
+
borderBottomColor: isUnderline ? colors.border : undefined,
|
|
145
|
+
backgroundColor: isUnderline ? colors.transparent : isPills ? colors.transparent : glass ? glassBg : colors.input,
|
|
59
146
|
flexDirection: "row",
|
|
60
|
-
|
|
147
|
+
alignItems: "stretch",
|
|
148
|
+
gap: isPills ? spacing.xs : isUnderline ? spacing.md : 4,
|
|
149
|
+
position: "relative"
|
|
61
150
|
}, style],
|
|
62
|
-
...props
|
|
151
|
+
...props,
|
|
152
|
+
children: [activeNode && /*#__PURE__*/_jsx(Animated.View, {
|
|
153
|
+
style: [{
|
|
154
|
+
position: "absolute",
|
|
155
|
+
top: isUnderline ? undefined : padding,
|
|
156
|
+
bottom: isUnderline ? 0 : padding,
|
|
157
|
+
height: isUnderline ? 2.5 : undefined,
|
|
158
|
+
borderRadius: innerRadius,
|
|
159
|
+
backgroundColor: isUnderline ? colors.primary : activeBg,
|
|
160
|
+
zIndex: 0
|
|
161
|
+
}, indicatorStyle]
|
|
162
|
+
}), children]
|
|
63
163
|
});
|
|
64
164
|
}
|
|
65
165
|
export function TabsTrigger({
|
|
66
166
|
value,
|
|
167
|
+
icon,
|
|
67
168
|
children,
|
|
68
169
|
style,
|
|
69
170
|
disabled,
|
|
70
171
|
...props
|
|
71
172
|
}) {
|
|
72
|
-
const
|
|
173
|
+
const {
|
|
174
|
+
value: selectedValue,
|
|
175
|
+
onValueChange,
|
|
176
|
+
variant,
|
|
177
|
+
size,
|
|
178
|
+
registerTabNode
|
|
179
|
+
} = useTabsContext();
|
|
73
180
|
const {
|
|
74
181
|
colors,
|
|
75
182
|
radii,
|
|
76
183
|
spacing
|
|
77
184
|
} = useTheme();
|
|
78
|
-
const active =
|
|
79
|
-
|
|
185
|
+
const active = selectedValue === value;
|
|
186
|
+
const handleLayout = event => {
|
|
187
|
+
const {
|
|
188
|
+
x,
|
|
189
|
+
width,
|
|
190
|
+
height
|
|
191
|
+
} = event.nativeEvent.layout;
|
|
192
|
+
registerTabNode(value, {
|
|
193
|
+
x,
|
|
194
|
+
width,
|
|
195
|
+
height
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
const activeTextColor = variant === "segmented" || variant === "pills" ? colors.onPrimary : colors.primary;
|
|
199
|
+
const isPills = variant === "pills";
|
|
200
|
+
const isUnderline = variant === "underline";
|
|
201
|
+
const triggerRadius = isPills ? radii.full : isUnderline ? 0 : radii.md;
|
|
202
|
+
return /*#__PURE__*/_jsxs(Pressable, {
|
|
80
203
|
accessibilityRole: "tab",
|
|
81
204
|
accessibilityState: {
|
|
82
205
|
selected: active,
|
|
83
206
|
disabled: Boolean(disabled)
|
|
84
207
|
},
|
|
85
208
|
disabled: disabled,
|
|
86
|
-
|
|
209
|
+
onLayout: handleLayout,
|
|
210
|
+
onPress: () => onValueChange?.(value),
|
|
87
211
|
style: ({
|
|
88
212
|
pressed
|
|
89
213
|
}) => [{
|
|
90
214
|
flex: 1,
|
|
91
|
-
|
|
92
|
-
borderRadius:
|
|
93
|
-
backgroundColor: active ? colors.primary : colors.transparent,
|
|
215
|
+
height: isUnderline ? listHeights[size] : "100%",
|
|
216
|
+
borderRadius: triggerRadius,
|
|
94
217
|
alignItems: "center",
|
|
95
218
|
justifyContent: "center",
|
|
96
|
-
|
|
97
|
-
|
|
219
|
+
flexDirection: "row",
|
|
220
|
+
gap: spacing.xs,
|
|
221
|
+
paddingHorizontal: spacing.sm,
|
|
222
|
+
zIndex: 1,
|
|
223
|
+
opacity: disabled ? 0.5 : pressed ? 0.82 : 1
|
|
98
224
|
}, style],
|
|
99
225
|
...props,
|
|
100
|
-
children: typeof children === "string" ? /*#__PURE__*/_jsx(Text, {
|
|
101
|
-
variant: "label",
|
|
226
|
+
children: [icon ? renderIcon(icon, active ? activeTextColor : colors.textMuted, size === "sm" ? 14 : 16) : null, typeof children === "string" ? /*#__PURE__*/_jsx(Text, {
|
|
227
|
+
variant: size === "sm" ? "bodySmall" : "label",
|
|
228
|
+
weight: active ? "600" : "400",
|
|
102
229
|
style: {
|
|
103
|
-
color: active ?
|
|
230
|
+
color: active ? activeTextColor : colors.textMuted
|
|
104
231
|
},
|
|
105
232
|
children: children
|
|
106
|
-
}) : children
|
|
233
|
+
}) : children]
|
|
107
234
|
});
|
|
108
235
|
}
|
|
109
236
|
export function TabsContent({
|
|
@@ -112,8 +239,10 @@ export function TabsContent({
|
|
|
112
239
|
style,
|
|
113
240
|
...props
|
|
114
241
|
}) {
|
|
115
|
-
const
|
|
116
|
-
|
|
242
|
+
const {
|
|
243
|
+
value: selectedValue
|
|
244
|
+
} = useTabsContext();
|
|
245
|
+
const active = selectedValue === value;
|
|
117
246
|
if (!active && !forceMount) return null;
|
|
118
247
|
return /*#__PURE__*/_jsx(View, {
|
|
119
248
|
style: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Pressable","View","useTheme","Text","jsx","_jsx","TabsContext","createContext","Tabs","value","defaultValue","onValueChange","style","props","spacing","internalValue","setInternalValue","useState","currentValue","
|
|
1
|
+
{"version":3,"names":["React","Pressable","View","Animated","useAnimatedStyle","useSharedValue","withTiming","useTheme","triggerHaptic","Text","renderIcon","jsx","_jsx","jsxs","_jsxs","TabsContext","createContext","useTabsContext","context","useContext","Error","Tabs","value","defaultValue","variant","size","glass","haptic","animated","onValueChange","style","props","spacing","internalValue","setInternalValue","useState","tabNodes","setTabNodes","currentValue","registerTabNode","useCallback","tabValue","layout","prev","x","width","handleValueChange","next","undefined","useMemo","Provider","children","gap","md","listHeights","sm","lg","TabsList","colors","components","radii","isDark","activeNode","indicatorX","indicatorWidth","initialized","useEffect","duration","glassBg","isUnderline","isPills","height","indicatorStyle","transform","translateX","activeBg","primary","primarySoft","transparent","padding","innerRadius","full","minHeight","borderRadius","borderWidth","strong","borderColor","border","borderBottomWidth","borderBottomColor","backgroundColor","input","flexDirection","alignItems","xs","position","top","bottom","zIndex","TabsTrigger","icon","disabled","selectedValue","active","handleLayout","event","nativeEvent","activeTextColor","onPrimary","triggerRadius","accessibilityRole","accessibilityState","selected","Boolean","onLayout","onPress","pressed","flex","justifyContent","paddingHorizontal","opacity","textMuted","weight","color","TabsContent","forceMount","display"],"sourceRoot":"../../../src","sources":["components/Tabs.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,SAAS,EACTC,IAAI,QAMC,cAAc;AACrB,OAAOC,QAAQ,IACbC,gBAAgB,EAChBC,cAAc,EACdC,UAAU,QACL,yBAAyB;AAEhC,SAASC,QAAQ,QAAQ,mBAAU;AACnC,SAASC,aAAa,QAAQ,qBAAkB;AAChD,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SACEC,UAAU,QAOL,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAuBjB,MAAMC,WAAW,gBAAGf,KAAK,CAACgB,aAAa,CAA0B,IAAI,CAAC;AAEtE,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAMC,OAAO,GAAGlB,KAAK,CAACmB,UAAU,CAACJ,WAAW,CAAC;EAC7C,IAAI,CAACG,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CAAC,2DAA2D,CAAC;EAC9E;EACA,OAAOF,OAAO;AAChB;AAeA,OAAO,SAASG,IAAIA,CAAC;EACnBC,KAAK;EACLC,YAAY;EACZC,OAAO,GAAG,WAAW;EACrBC,IAAI,GAAG,IAAI;EACXC,KAAK,GAAG,KAAK;EACbC,MAAM,GAAG,IAAI;EACbC,QAAQ,GAAG,IAAI;EACfC,aAAa;EACbC,KAAK;EACL,GAAGC;AACM,CAAC,EAAE;EACZ,MAAM;IAAEC;EAAQ,CAAC,GAAGzB,QAAQ,CAAC,CAAC;EAC9B,MAAM,CAAC0B,aAAa,EAAEC,gBAAgB,CAAC,GAAGlC,KAAK,CAACmC,QAAQ,CAACZ,YAAY,CAAC;EACtE,MAAM,CAACa,QAAQ,EAAEC,WAAW,CAAC,GAAGrC,KAAK,CAACmC,QAAQ,CAAgC,CAAC,CAAC,CAAC;EAEjF,MAAMG,YAAY,GAAGhB,KAAK,IAAIW,aAAa;EAE3C,MAAMM,eAAe,GAAGvC,KAAK,CAACwC,WAAW,CACvC,CAACC,QAAgB,EAAEC,MAAqB,KAAK;IAC3CL,WAAW,CAAEM,IAAI,IAAK;MACpB,IACEA,IAAI,CAACF,QAAQ,CAAC,EAAEG,CAAC,KAAKF,MAAM,CAACE,CAAC,IAC9BD,IAAI,CAACF,QAAQ,CAAC,EAAEI,KAAK,KAAKH,MAAM,CAACG,KAAK,EACtC;QACA,OAAOF,IAAI;MACb;MACA,OAAO;QAAE,GAAGA,IAAI;QAAE,CAACF,QAAQ,GAAGC;MAAO,CAAC;IACxC,CAAC,CAAC;EACJ,CAAC,EACD,EACF,CAAC;EAED,MAAMI,iBAAiB,GAAG9C,KAAK,CAACwC,WAAW,CACxCO,IAAY,IAAK;IAChB,IAAIpB,MAAM,EAAEnB,aAAa,CAAC,WAAW,CAAC;IACtC,IAAIc,KAAK,KAAK0B,SAAS,EAAEd,gBAAgB,CAACa,IAAI,CAAC;IAC/ClB,aAAa,GAAGkB,IAAI,CAAC;EACvB,CAAC,EACD,CAACpB,MAAM,EAAEE,aAAa,EAAEP,KAAK,CAC/B,CAAC;EAED,MAAMJ,OAAO,GAAGlB,KAAK,CAACiD,OAAO,CAC3B,OAAO;IACL3B,KAAK,EAAEgB,YAAY;IACnBT,aAAa,EAAEiB,iBAAiB;IAChCtB,OAAO;IACPC,IAAI;IACJC,KAAK;IACLC,MAAM;IACNC,QAAQ;IACRW,eAAe;IACfH;EACF,CAAC,CAAC,EACF,CACEE,YAAY,EACZQ,iBAAiB,EACjBtB,OAAO,EACPC,IAAI,EACJC,KAAK,EACLC,MAAM,EACNC,QAAQ,EACRW,eAAe,EACfH,QAAQ,CAEZ,CAAC;EAED,oBACExB,IAAA,CAACG,WAAW,CAACmC,QAAQ;IAAC5B,KAAK,EAAEJ,OAAQ;IAAAiC,QAAA,eACnCvC,IAAA,CAACV,IAAI;MAAC4B,KAAK,EAAE,CAAC;QAAEe,KAAK,EAAE,MAAM;QAAEO,GAAG,EAAEpB,OAAO,CAACqB;MAAG,CAAC,EAAEvB,KAAK,CAAE;MAAA,GAAKC;IAAK,CAAG;EAAC,CACnD,CAAC;AAE3B;AAEA,MAAMuB,WAAqC,GAAG;EAC5CC,EAAE,EAAE,EAAE;EACNF,EAAE,EAAE,EAAE;EACNG,EAAE,EAAE;AACN,CAAC;AAMD,OAAO,SAASC,QAAQA,CAAC;EAAE3B,KAAK;EAAEqB,QAAQ;EAAE,GAAGpB;AAAqB,CAAC,EAAE;EACrE,MAAM;IAAE2B,MAAM;IAAEC,UAAU;IAAEC,KAAK;IAAE5B,OAAO;IAAE6B;EAAO,CAAC,GAAGtD,QAAQ,CAAC,CAAC;EACjE,MAAM;IAAEe,KAAK;IAAEE,OAAO;IAAEC,IAAI;IAAEC,KAAK;IAAEE,QAAQ;IAAEQ;EAAS,CAAC,GAAGnB,cAAc,CAAC,CAAC;EAE5E,MAAM6C,UAAU,GAAGxC,KAAK,GAAGc,QAAQ,CAACd,KAAK,CAAC,GAAG0B,SAAS;EAEtD,MAAMe,UAAU,GAAG1D,cAAc,CAAC,CAAC,CAAC;EACpC,MAAM2D,cAAc,GAAG3D,cAAc,CAAC,CAAC,CAAC;EACxC,MAAM4D,WAAW,GAAG5D,cAAc,CAAC,KAAK,CAAC;EAEzCL,KAAK,CAACkE,SAAS,CAAC,MAAM;IACpB,IAAIJ,UAAU,IAAIA,UAAU,CAACjB,KAAK,GAAG,CAAC,EAAE;MACtC,IAAI,CAACjB,QAAQ,IAAI,CAACqC,WAAW,CAAC3C,KAAK,EAAE;QACnCyC,UAAU,CAACzC,KAAK,GAAGwC,UAAU,CAAClB,CAAC;QAC/BoB,cAAc,CAAC1C,KAAK,GAAGwC,UAAU,CAACjB,KAAK;QACvCoB,WAAW,CAAC3C,KAAK,GAAG,IAAI;MAC1B,CAAC,MAAM;QACLyC,UAAU,CAACzC,KAAK,GAAGhB,UAAU,CAACwD,UAAU,CAAClB,CAAC,EAAE;UAAEuB,QAAQ,EAAE;QAAI,CAAC,CAAC;QAC9DH,cAAc,CAAC1C,KAAK,GAAGhB,UAAU,CAACwD,UAAU,CAACjB,KAAK,EAAE;UAAEsB,QAAQ,EAAE;QAAI,CAAC,CAAC;MACxE;IACF;EACF,CAAC,EAAE,CAACL,UAAU,EAAElC,QAAQ,EAAEmC,UAAU,EAAEC,cAAc,EAAEC,WAAW,CAAC,CAAC;EAEnE,MAAMG,OAAO,GAAGP,MAAM,GAClB,wBAAwB,GACxB,2BAA2B;EAE/B,MAAMQ,WAAW,GAAG7C,OAAO,KAAK,WAAW;EAC3C,MAAM8C,OAAO,GAAG9C,OAAO,KAAK,OAAO;EAEnC,MAAM+C,MAAM,GAAGjB,WAAW,CAAC7B,IAAI,CAAC;EAEhC,MAAM+C,cAAc,GAAGpE,gBAAgB,CAAC,OAAO;IAC7CqE,SAAS,EAAE,CAAC;MAAEC,UAAU,EAAEX,UAAU,CAACzC;IAAM,CAAC,CAAC;IAC7CuB,KAAK,EAAEmB,cAAc,CAAC1C;EACxB,CAAC,CAAC,CAAC;EAEH,MAAMqD,QAAQ,GACZnD,OAAO,KAAK,WAAW,IAAIA,OAAO,KAAK,OAAO,GAC1CkC,MAAM,CAACkB,OAAO,GACdpD,OAAO,KAAK,MAAM,GAChBkC,MAAM,CAACmB,WAAW,GAClBnB,MAAM,CAACoB,WAAW;EAE1B,MAAMC,OAAO,GAAGV,WAAW,GAAG,CAAC,GAAG,CAAC;EACnC;EACA,MAAMW,WAAW,GAAGV,OAAO,GACvBV,KAAK,CAACqB,IAAI,GACVZ,WAAW,GACT,CAAC,GACDT,KAAK,CAACP,EAAE;EAEd,oBACEvC,KAAA,CAACZ,IAAI;IACH4B,KAAK,EAAE,CACL;MACEe,KAAK,EAAE,MAAM;MACbqC,SAAS,EAAEX,MAAM;MACjBA,MAAM,EAAEF,WAAW,GAAGrB,SAAS,GAAGuB,MAAM;MACxCQ,OAAO;MACPI,YAAY,EAAEd,WAAW,GAAG,CAAC,GAAGT,KAAK,CAACJ,EAAE;MACxC4B,WAAW,EAAEf,WAAW,GAAG,CAAC,GAAGV,UAAU,CAACyB,WAAW,CAACC,MAAM;MAC5DC,WAAW,EAAE5D,KAAK,GACdmC,MAAM,GACJ,2BAA2B,GAC3B,wBAAwB,GAC1BH,MAAM,CAAC6B,MAAM;MACjBC,iBAAiB,EAAEnB,WAAW,GAAGV,UAAU,CAACyB,WAAW,CAACC,MAAM,GAAGrC,SAAS;MAC1EyC,iBAAiB,EAAEpB,WAAW,GAAGX,MAAM,CAAC6B,MAAM,GAAGvC,SAAS;MAC1D0C,eAAe,EAAErB,WAAW,GACxBX,MAAM,CAACoB,WAAW,GAClBR,OAAO,GACLZ,MAAM,CAACoB,WAAW,GAClBpD,KAAK,GACH0C,OAAO,GACPV,MAAM,CAACiC,KAAK;MACpBC,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,SAAS;MACrBzC,GAAG,EAAEkB,OAAO,GAAGtC,OAAO,CAAC8D,EAAE,GAAGzB,WAAW,GAAGrC,OAAO,CAACqB,EAAE,GAAG,CAAC;MACxD0C,QAAQ,EAAE;IACZ,CAAC,EACDjE,KAAK,CACL;IAAA,GACEC,KAAK;IAAAoB,QAAA,GAGRW,UAAU,iBACTlD,IAAA,CAACT,QAAQ,CAACD,IAAI;MACZ4B,KAAK,EAAE,CACL;QACEiE,QAAQ,EAAE,UAAU;QACpBC,GAAG,EAAE3B,WAAW,GAAGrB,SAAS,GAAG+B,OAAO;QACtCkB,MAAM,EAAE5B,WAAW,GAAG,CAAC,GAAGU,OAAO;QACjCR,MAAM,EAAEF,WAAW,GAAG,GAAG,GAAGrB,SAAS;QACrCmC,YAAY,EAAEH,WAAW;QACzBU,eAAe,EAAErB,WAAW,GAAGX,MAAM,CAACkB,OAAO,GAAGD,QAAQ;QACxDuB,MAAM,EAAE;MACV,CAAC,EACD1B,cAAc;IACd,CACH,CACF,EACArB,QAAQ;EAAA,CACL,CAAC;AAEX;AASA,OAAO,SAASgD,WAAWA,CAAC;EAC1B7E,KAAK;EACL8E,IAAI;EACJjD,QAAQ;EACRrB,KAAK;EACLuE,QAAQ;EACR,GAAGtE;AACa,CAAC,EAAE;EACnB,MAAM;IACJT,KAAK,EAAEgF,aAAa;IACpBzE,aAAa;IACbL,OAAO;IACPC,IAAI;IACJc;EACF,CAAC,GAAGtB,cAAc,CAAC,CAAC;EACpB,MAAM;IAAEyC,MAAM;IAAEE,KAAK;IAAE5B;EAAQ,CAAC,GAAGzB,QAAQ,CAAC,CAAC;EAC7C,MAAMgG,MAAM,GAAGD,aAAa,KAAKhF,KAAK;EAEtC,MAAMkF,YAAY,GAAIC,KAAwB,IAAK;IACjD,MAAM;MAAE7D,CAAC;MAAEC,KAAK;MAAE0B;IAAO,CAAC,GAAGkC,KAAK,CAACC,WAAW,CAAChE,MAAM;IACrDH,eAAe,CAACjB,KAAK,EAAE;MAAEsB,CAAC;MAAEC,KAAK;MAAE0B;IAAO,CAAC,CAAC;EAC9C,CAAC;EAED,MAAMoC,eAAe,GACnBnF,OAAO,KAAK,WAAW,IAAIA,OAAO,KAAK,OAAO,GAC1CkC,MAAM,CAACkD,SAAS,GAChBlD,MAAM,CAACkB,OAAO;EAEpB,MAAMN,OAAO,GAAG9C,OAAO,KAAK,OAAO;EACnC,MAAM6C,WAAW,GAAG7C,OAAO,KAAK,WAAW;EAE3C,MAAMqF,aAAa,GAAGvC,OAAO,GAAGV,KAAK,CAACqB,IAAI,GAAGZ,WAAW,GAAG,CAAC,GAAGT,KAAK,CAACP,EAAE;EAEvE,oBACEvC,KAAA,CAACb,SAAS;IACR6G,iBAAiB,EAAC,KAAK;IACvBC,kBAAkB,EAAE;MAAEC,QAAQ,EAAET,MAAM;MAAEF,QAAQ,EAAEY,OAAO,CAACZ,QAAQ;IAAE,CAAE;IACtEA,QAAQ,EAAEA,QAAS;IACnBa,QAAQ,EAAEV,YAAa;IACvBW,OAAO,EAAEA,CAAA,KAAMtF,aAAa,GAAGP,KAAK,CAAE;IACtCQ,KAAK,EAAEA,CAAC;MAAEsF;IAAQ,CAAC,KAAK,CACtB;MACEC,IAAI,EAAE,CAAC;MACP9C,MAAM,EAAEF,WAAW,GAAGf,WAAW,CAAC7B,IAAI,CAAC,GAAG,MAAM;MAChD0D,YAAY,EAAE0B,aAAa;MAC3BhB,UAAU,EAAE,QAAQ;MACpByB,cAAc,EAAE,QAAQ;MACxB1B,aAAa,EAAE,KAAK;MACpBxC,GAAG,EAAEpB,OAAO,CAAC8D,EAAE;MACfyB,iBAAiB,EAAEvF,OAAO,CAACuB,EAAE;MAC7B2C,MAAM,EAAE,CAAC;MACTsB,OAAO,EAAEnB,QAAQ,GAAG,GAAG,GAAGe,OAAO,GAAG,IAAI,GAAG;IAC7C,CAAC,EACDtF,KAAK,CACL;IAAA,GACEC,KAAK;IAAAoB,QAAA,GAERiD,IAAI,GACD1F,UAAU,CACR0F,IAAI,EACJG,MAAM,GAAGI,eAAe,GAAGjD,MAAM,CAAC+D,SAAS,EAC3ChG,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,EACvB,CAAC,GACD,IAAI,EACP,OAAO0B,QAAQ,KAAK,QAAQ,gBAC3BvC,IAAA,CAACH,IAAI;MACHe,OAAO,EAAEC,IAAI,KAAK,IAAI,GAAG,WAAW,GAAG,OAAQ;MAC/CiG,MAAM,EAAEnB,MAAM,GAAG,KAAK,GAAG,KAAM;MAC/BzE,KAAK,EAAE;QAAE6F,KAAK,EAAEpB,MAAM,GAAGI,eAAe,GAAGjD,MAAM,CAAC+D;MAAU,CAAE;MAAAtE,QAAA,EAE7DA;IAAQ,CACL,CAAC,GAEPA,QACD;EAAA,CACQ,CAAC;AAEhB;AAQA,OAAO,SAASyE,WAAWA,CAAC;EAC1BtG,KAAK;EACLuG,UAAU,GAAG,KAAK;EAClB/F,KAAK;EACL,GAAGC;AACa,CAAC,EAAE;EACnB,MAAM;IAAET,KAAK,EAAEgF;EAAc,CAAC,GAAGrF,cAAc,CAAC,CAAC;EACjD,MAAMsF,MAAM,GAAGD,aAAa,KAAKhF,KAAK;EAEtC,IAAI,CAACiF,MAAM,IAAI,CAACsB,UAAU,EAAE,OAAO,IAAI;EACvC,oBACEjH,IAAA,CAACV,IAAI;IAAC4B,KAAK,EAAE,CAAC;MAAEgG,OAAO,EAAEvB,MAAM,GAAG,MAAM,GAAG;IAAO,CAAC,EAAEzE,KAAK,CAAE;IAAA,GAAKC;EAAK,CAAG,CAAC;AAE9E","ignoreList":[]}
|
|
@@ -4,23 +4,38 @@ import React from "react";
|
|
|
4
4
|
import { View } from "react-native";
|
|
5
5
|
import { useTheme } from "../theme/index.js";
|
|
6
6
|
import { Text } from "./Text.js";
|
|
7
|
+
import { renderIcon } from "./types.js";
|
|
7
8
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
8
9
|
export function Timeline({
|
|
9
10
|
style,
|
|
11
|
+
children,
|
|
10
12
|
...props
|
|
11
13
|
}) {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
} = useTheme();
|
|
14
|
+
const childrenArray = React.Children.toArray(children).filter(Boolean);
|
|
15
|
+
const count = childrenArray.length;
|
|
15
16
|
return /*#__PURE__*/_jsx(View, {
|
|
16
17
|
style: [{
|
|
17
|
-
gap:
|
|
18
|
+
gap: 0
|
|
18
19
|
}, style],
|
|
19
|
-
...props
|
|
20
|
+
...props,
|
|
21
|
+
children: childrenArray.map((child, index) => {
|
|
22
|
+
if (/*#__PURE__*/React.isValidElement(child)) {
|
|
23
|
+
return /*#__PURE__*/React.cloneElement(child, {
|
|
24
|
+
isLast: child.props.isLast ?? index === count - 1,
|
|
25
|
+
isFirst: child.props.isFirst ?? index === 0
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return child;
|
|
29
|
+
})
|
|
20
30
|
});
|
|
21
31
|
}
|
|
22
32
|
export function TimelineItem({
|
|
23
33
|
active = false,
|
|
34
|
+
isLast = false,
|
|
35
|
+
isFirst = false,
|
|
36
|
+
lineColor,
|
|
37
|
+
dotColor,
|
|
38
|
+
icon,
|
|
24
39
|
style,
|
|
25
40
|
children,
|
|
26
41
|
...props
|
|
@@ -31,6 +46,8 @@ export function TimelineItem({
|
|
|
31
46
|
spacing
|
|
32
47
|
} = useTheme();
|
|
33
48
|
const indicatorSize = components.timeline.indicatorSize;
|
|
49
|
+
const resolvedDotColor = dotColor ?? (active ? colors.primary : colors.border);
|
|
50
|
+
const resolvedLineColor = lineColor ?? (active ? colors.primary : colors.borderMuted);
|
|
34
51
|
return /*#__PURE__*/_jsxs(View, {
|
|
35
52
|
style: [{
|
|
36
53
|
flexDirection: "row",
|
|
@@ -39,26 +56,32 @@ export function TimelineItem({
|
|
|
39
56
|
...props,
|
|
40
57
|
children: [/*#__PURE__*/_jsxs(View, {
|
|
41
58
|
style: {
|
|
42
|
-
alignItems: "center"
|
|
59
|
+
alignItems: "center",
|
|
60
|
+
width: indicatorSize + 8
|
|
43
61
|
},
|
|
44
62
|
children: [/*#__PURE__*/_jsx(View, {
|
|
45
63
|
style: {
|
|
46
64
|
width: indicatorSize,
|
|
47
65
|
height: indicatorSize,
|
|
48
66
|
borderRadius: indicatorSize / 2,
|
|
49
|
-
backgroundColor:
|
|
50
|
-
|
|
51
|
-
|
|
67
|
+
backgroundColor: resolvedDotColor,
|
|
68
|
+
marginTop: 4,
|
|
69
|
+
alignItems: "center",
|
|
70
|
+
justifyContent: "center"
|
|
71
|
+
},
|
|
72
|
+
children: icon ? renderIcon(icon, colors.onPrimary, 8) : null
|
|
73
|
+
}), !isLast && /*#__PURE__*/_jsx(View, {
|
|
52
74
|
style: {
|
|
53
|
-
width: components.timeline.connectorWidth,
|
|
75
|
+
width: components.timeline.connectorWidth ?? 1.5,
|
|
54
76
|
flex: 1,
|
|
55
|
-
|
|
56
|
-
|
|
77
|
+
backgroundColor: resolvedLineColor,
|
|
78
|
+
marginTop: 4
|
|
57
79
|
}
|
|
58
80
|
})]
|
|
59
81
|
}), /*#__PURE__*/_jsx(View, {
|
|
60
82
|
style: {
|
|
61
83
|
flex: 1,
|
|
84
|
+
paddingBottom: isLast ? 0 : spacing.lg,
|
|
62
85
|
gap: spacing.xs
|
|
63
86
|
},
|
|
64
87
|
children: children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","useTheme","Text","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Timeline","style","props","
|
|
1
|
+
{"version":3,"names":["React","View","useTheme","Text","renderIcon","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Timeline","style","children","props","childrenArray","Children","toArray","filter","Boolean","count","length","gap","map","child","index","isValidElement","cloneElement","isLast","isFirst","TimelineItem","active","lineColor","dotColor","icon","colors","components","spacing","indicatorSize","timeline","resolvedDotColor","primary","border","resolvedLineColor","borderMuted","flexDirection","md","alignItems","width","height","borderRadius","backgroundColor","marginTop","justifyContent","onPrimary","connectorWidth","flex","paddingBottom","lg","xs","TimelineTitle","variant","TimelineDescription","color"],"sourceRoot":"../../../src","sources":["components/Timeline.tsx"],"mappings":"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","ignoreList":[]}
|