@masumdev/rn-ui 0.1.6 → 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/README.md +47 -1752
- 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/AspectRatio.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 +25 -9
- 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/ButtonGroup.js +2 -4
- package/lib/commonjs/components/ButtonGroup.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/FloatingActionButton.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 +108 -7
- 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 +19 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/components/types.js +53 -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/AspectRatio.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 +25 -9
- 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/ButtonGroup.js +3 -5
- package/lib/module/components/ButtonGroup.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/FloatingActionButton.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 +109 -9
- 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 +3 -2
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/types.js +53 -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 -4
- package/lib/typescript/commonjs/components/AlertDialog.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/AspectRatio.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 +5 -8
- 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 +6 -12
- package/lib/typescript/commonjs/components/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/ButtonGroup.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/FloatingActionButton.d.ts +2 -5
- package/lib/typescript/commonjs/components/FloatingActionButton.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 +4 -7
- 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 +15 -2
- 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 +7 -6
- package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/types.d.ts +110 -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 -4
- package/lib/typescript/module/components/AlertDialog.d.ts.map +1 -1
- package/lib/typescript/module/components/AspectRatio.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 +5 -8
- 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 +6 -12
- package/lib/typescript/module/components/Button.d.ts.map +1 -1
- package/lib/typescript/module/components/ButtonGroup.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/FloatingActionButton.d.ts +2 -5
- package/lib/typescript/module/components/FloatingActionButton.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 +4 -7
- 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 +15 -2
- 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 +7 -6
- package/lib/typescript/module/components/index.d.ts.map +1 -1
- package/lib/typescript/module/components/types.d.ts +110 -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 +10 -1
|
@@ -1,22 +1,75 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import React from "react";
|
|
4
|
-
import { View } from "react-native";
|
|
4
|
+
import { Pressable, View } from "react-native";
|
|
5
5
|
import { useTheme } from "../theme/index.js";
|
|
6
|
-
import {
|
|
6
|
+
import { withAlpha } from "../utils/index.js";
|
|
7
|
+
import { triggerHaptic } from "../utils/haptics.js";
|
|
7
8
|
import { Text } from "./Text.js";
|
|
8
9
|
import { renderIcon } from "./types.js";
|
|
9
10
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
const stepperHeights = {
|
|
12
|
+
sm: 36,
|
|
13
|
+
md: 44,
|
|
14
|
+
lg: 52
|
|
15
|
+
};
|
|
10
16
|
function clampStepper(value, min, max) {
|
|
11
17
|
return Math.min(max, Math.max(min, value));
|
|
12
18
|
}
|
|
19
|
+
function MinusIcon({
|
|
20
|
+
color,
|
|
21
|
+
size
|
|
22
|
+
}) {
|
|
23
|
+
return /*#__PURE__*/_jsx(View, {
|
|
24
|
+
style: {
|
|
25
|
+
width: size,
|
|
26
|
+
height: 2,
|
|
27
|
+
backgroundColor: color,
|
|
28
|
+
borderRadius: 1
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function PlusIcon({
|
|
33
|
+
color,
|
|
34
|
+
size
|
|
35
|
+
}) {
|
|
36
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
37
|
+
style: {
|
|
38
|
+
width: size,
|
|
39
|
+
height: size,
|
|
40
|
+
alignItems: "center",
|
|
41
|
+
justifyContent: "center"
|
|
42
|
+
},
|
|
43
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
44
|
+
style: {
|
|
45
|
+
position: "absolute",
|
|
46
|
+
width: size,
|
|
47
|
+
height: 2,
|
|
48
|
+
backgroundColor: color,
|
|
49
|
+
borderRadius: 1
|
|
50
|
+
}
|
|
51
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
52
|
+
style: {
|
|
53
|
+
position: "absolute",
|
|
54
|
+
width: 2,
|
|
55
|
+
height: size,
|
|
56
|
+
backgroundColor: color,
|
|
57
|
+
borderRadius: 1
|
|
58
|
+
}
|
|
59
|
+
})]
|
|
60
|
+
});
|
|
61
|
+
}
|
|
13
62
|
export function Stepper({
|
|
14
63
|
value,
|
|
15
64
|
defaultValue = 0,
|
|
16
65
|
min = 0,
|
|
17
66
|
max = 999,
|
|
18
67
|
step = 1,
|
|
68
|
+
variant = "input",
|
|
69
|
+
size = "md",
|
|
19
70
|
disabled = false,
|
|
71
|
+
glass = false,
|
|
72
|
+
haptic = true,
|
|
20
73
|
onValueChange,
|
|
21
74
|
decrementIcon,
|
|
22
75
|
incrementIcon,
|
|
@@ -27,15 +80,30 @@ export function Stepper({
|
|
|
27
80
|
colors,
|
|
28
81
|
components,
|
|
29
82
|
radii,
|
|
30
|
-
spacing
|
|
83
|
+
spacing,
|
|
84
|
+
isDark
|
|
31
85
|
} = useTheme();
|
|
32
86
|
const [internalValue, setInternalValue] = React.useState(defaultValue);
|
|
33
87
|
const currentValue = clampStepper(value ?? internalValue, min, max);
|
|
34
88
|
const setNextValue = nextValue => {
|
|
89
|
+
if (disabled) return;
|
|
35
90
|
const next = clampStepper(nextValue, min, max);
|
|
91
|
+
if (haptic) triggerHaptic("selection");
|
|
36
92
|
if (value === undefined) setInternalValue(next);
|
|
37
93
|
onValueChange?.(next);
|
|
38
94
|
};
|
|
95
|
+
const containerHeight = stepperHeights[size];
|
|
96
|
+
const padding = 4;
|
|
97
|
+
const buttonSize = containerHeight - padding * 2;
|
|
98
|
+
const iconSize = size === "sm" ? 12 : size === "md" ? 14 : 16;
|
|
99
|
+
const glassBg = isDark ? "rgba(15, 27, 45, 0.70)" : "rgba(255, 255, 255, 0.85)";
|
|
100
|
+
const containerBg = disabled ? withAlpha(colors.input, 0.55) : glass ? glassBg : variant === "soft" ? withAlpha(colors.primary, 0.08) : colors.input;
|
|
101
|
+
const borderColor = glass ? isDark ? "rgba(248, 250, 252, 0.20)" : "rgba(15, 23, 42, 0.14)" : colors.border;
|
|
102
|
+
|
|
103
|
+
// Concentric inner radius (Outer 16px - 4px padding = 12px inner)
|
|
104
|
+
const innerRadius = radii.md;
|
|
105
|
+
const canDecrement = !disabled && currentValue > min;
|
|
106
|
+
const canIncrement = !disabled && currentValue < max;
|
|
39
107
|
return /*#__PURE__*/_jsxs(View, {
|
|
40
108
|
accessibilityRole: "adjustable",
|
|
41
109
|
accessibilityValue: {
|
|
@@ -44,46 +112,73 @@ export function Stepper({
|
|
|
44
112
|
now: currentValue
|
|
45
113
|
},
|
|
46
114
|
style: [{
|
|
47
|
-
|
|
115
|
+
height: containerHeight,
|
|
116
|
+
minHeight: containerHeight,
|
|
48
117
|
flexDirection: "row",
|
|
49
118
|
alignItems: "center",
|
|
50
119
|
borderWidth: components.borderWidth.strong,
|
|
51
|
-
borderColor
|
|
120
|
+
borderColor,
|
|
52
121
|
borderRadius: radii.lg,
|
|
53
|
-
backgroundColor:
|
|
54
|
-
|
|
55
|
-
opacity: disabled ? 0.
|
|
122
|
+
backgroundColor: containerBg,
|
|
123
|
+
padding,
|
|
124
|
+
opacity: disabled ? 0.56 : 1
|
|
56
125
|
}, style],
|
|
57
126
|
...props,
|
|
58
|
-
children: [/*#__PURE__*/_jsx(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
shape: "square",
|
|
63
|
-
disabled: disabled || currentValue <= min,
|
|
127
|
+
children: [/*#__PURE__*/_jsx(Pressable, {
|
|
128
|
+
accessibilityRole: "button",
|
|
129
|
+
accessibilityLabel: "Decrement stepper",
|
|
130
|
+
disabled: !canDecrement,
|
|
64
131
|
onPress: () => setNextValue(currentValue - step),
|
|
65
|
-
|
|
132
|
+
style: ({
|
|
133
|
+
pressed
|
|
134
|
+
}) => [{
|
|
135
|
+
width: buttonSize,
|
|
136
|
+
height: buttonSize,
|
|
137
|
+
borderRadius: innerRadius,
|
|
138
|
+
backgroundColor: pressed && canDecrement ? colors.backgroundMuted : canDecrement ? withAlpha(colors.secondary, 0.12) : colors.transparent,
|
|
139
|
+
alignItems: "center",
|
|
140
|
+
justifyContent: "center",
|
|
141
|
+
opacity: canDecrement ? pressed ? 0.8 : 1 : 0.4
|
|
142
|
+
}],
|
|
143
|
+
children: decrementIcon ? renderIcon(decrementIcon, canDecrement ? colors.text : colors.disabledText, iconSize) : /*#__PURE__*/_jsx(MinusIcon, {
|
|
144
|
+
color: canDecrement ? colors.text : colors.disabledText,
|
|
145
|
+
size: iconSize
|
|
146
|
+
})
|
|
66
147
|
}), /*#__PURE__*/_jsx(View, {
|
|
67
148
|
style: {
|
|
68
|
-
|
|
149
|
+
flex: 1,
|
|
69
150
|
alignItems: "center",
|
|
70
|
-
|
|
151
|
+
justifyContent: "center",
|
|
152
|
+
paddingHorizontal: spacing.xs
|
|
71
153
|
},
|
|
72
154
|
children: /*#__PURE__*/_jsx(Text, {
|
|
73
|
-
variant: "label",
|
|
155
|
+
variant: size === "sm" ? "bodySmall" : "label",
|
|
156
|
+
weight: "600",
|
|
74
157
|
style: {
|
|
75
158
|
fontVariant: ["tabular-nums"]
|
|
76
159
|
},
|
|
77
160
|
children: currentValue
|
|
78
161
|
})
|
|
79
|
-
}), /*#__PURE__*/_jsx(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
shape: "square",
|
|
84
|
-
disabled: disabled || currentValue >= max,
|
|
162
|
+
}), /*#__PURE__*/_jsx(Pressable, {
|
|
163
|
+
accessibilityRole: "button",
|
|
164
|
+
accessibilityLabel: "Increment stepper",
|
|
165
|
+
disabled: !canIncrement,
|
|
85
166
|
onPress: () => setNextValue(currentValue + step),
|
|
86
|
-
|
|
167
|
+
style: ({
|
|
168
|
+
pressed
|
|
169
|
+
}) => [{
|
|
170
|
+
width: buttonSize,
|
|
171
|
+
height: buttonSize,
|
|
172
|
+
borderRadius: innerRadius,
|
|
173
|
+
backgroundColor: pressed && canIncrement ? colors.backgroundMuted : canIncrement ? withAlpha(colors.secondary, 0.12) : colors.transparent,
|
|
174
|
+
alignItems: "center",
|
|
175
|
+
justifyContent: "center",
|
|
176
|
+
opacity: canIncrement ? pressed ? 0.8 : 1 : 0.4
|
|
177
|
+
}],
|
|
178
|
+
children: incrementIcon ? renderIcon(incrementIcon, canIncrement ? colors.text : colors.disabledText, iconSize) : /*#__PURE__*/_jsx(PlusIcon, {
|
|
179
|
+
color: canIncrement ? colors.text : colors.disabledText,
|
|
180
|
+
size: iconSize
|
|
181
|
+
})
|
|
87
182
|
})]
|
|
88
183
|
});
|
|
89
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","useTheme","
|
|
1
|
+
{"version":3,"names":["React","Pressable","View","useTheme","withAlpha","triggerHaptic","Text","renderIcon","jsx","_jsx","jsxs","_jsxs","stepperHeights","sm","md","lg","clampStepper","value","min","max","Math","MinusIcon","color","size","style","width","height","backgroundColor","borderRadius","PlusIcon","alignItems","justifyContent","children","position","Stepper","defaultValue","step","variant","disabled","glass","haptic","onValueChange","decrementIcon","incrementIcon","props","colors","components","radii","spacing","isDark","internalValue","setInternalValue","useState","currentValue","setNextValue","nextValue","next","undefined","containerHeight","padding","buttonSize","iconSize","glassBg","containerBg","input","primary","borderColor","border","innerRadius","canDecrement","canIncrement","accessibilityRole","accessibilityValue","now","minHeight","flexDirection","borderWidth","strong","opacity","accessibilityLabel","onPress","pressed","backgroundMuted","secondary","transparent","text","disabledText","flex","paddingHorizontal","xs","weight","fontVariant"],"sourceRoot":"../../../src","sources":["components/Stepper.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -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: [{
|