@xhsreds/reds-rn-next 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/benchmarks/out.json +900 -820
  2. package/coverage/.tmp/coverage-0.json +1 -1
  3. package/coverage/.tmp/coverage-1.json +1 -1
  4. package/coverage/.tmp/coverage-10.json +1 -1
  5. package/coverage/.tmp/coverage-11.json +1 -1
  6. package/coverage/.tmp/coverage-12.json +1 -1
  7. package/coverage/.tmp/coverage-13.json +1 -1
  8. package/coverage/.tmp/coverage-14.json +1 -1
  9. package/coverage/.tmp/coverage-15.json +1 -1
  10. package/coverage/.tmp/coverage-16.json +1 -1
  11. package/coverage/.tmp/coverage-17.json +1 -1
  12. package/coverage/.tmp/coverage-18.json +1 -1
  13. package/coverage/.tmp/coverage-19.json +1 -1
  14. package/coverage/.tmp/coverage-2.json +1 -1
  15. package/coverage/.tmp/coverage-20.json +1 -1
  16. package/coverage/.tmp/coverage-21.json +1 -1
  17. package/coverage/.tmp/coverage-22.json +1 -1
  18. package/coverage/.tmp/coverage-23.json +1 -1
  19. package/coverage/.tmp/coverage-24.json +1 -1
  20. package/coverage/.tmp/coverage-25.json +1 -1
  21. package/coverage/.tmp/coverage-26.json +1 -1
  22. package/coverage/.tmp/coverage-27.json +1 -1
  23. package/coverage/.tmp/coverage-28.json +1 -1
  24. package/coverage/.tmp/coverage-29.json +1 -0
  25. package/coverage/.tmp/coverage-3.json +1 -1
  26. package/coverage/.tmp/coverage-30.json +1 -0
  27. package/coverage/.tmp/coverage-31.json +1 -0
  28. package/coverage/.tmp/coverage-4.json +1 -1
  29. package/coverage/.tmp/coverage-5.json +1 -1
  30. package/coverage/.tmp/coverage-6.json +1 -1
  31. package/coverage/.tmp/coverage-7.json +1 -1
  32. package/coverage/.tmp/coverage-8.json +1 -1
  33. package/coverage/.tmp/coverage-9.json +1 -1
  34. package/lib/cjs/_chunks/CkkZzOy_.js +23 -0
  35. package/lib/cjs/_chunks/CkkZzOy_.js.map +1 -0
  36. package/lib/cjs/_chunks/RPaDcSae.js +20 -0
  37. package/lib/cjs/_chunks/RPaDcSae.js.map +1 -0
  38. package/lib/cjs/_chunks/bwo-gq0b.js +66 -0
  39. package/lib/cjs/_chunks/bwo-gq0b.js.map +1 -0
  40. package/lib/cjs/components/ActionSheets/ActionSheets.js +99 -0
  41. package/lib/cjs/components/ActionSheets/ActionSheets.js.map +1 -0
  42. package/lib/cjs/components/ActionSheets/index.js +37 -0
  43. package/lib/cjs/components/ActionSheets/index.js.map +1 -0
  44. package/lib/cjs/components/ActionSheets/interface/index.js +9 -0
  45. package/lib/cjs/components/ActionSheets/interface/index.js.map +1 -0
  46. package/lib/cjs/components/ActionSheets/styles.js +59 -0
  47. package/lib/cjs/components/ActionSheets/styles.js.map +1 -0
  48. package/lib/cjs/components/AvatarGroup/AvatarGroup.js +10 -4
  49. package/lib/cjs/components/AvatarGroup/AvatarGroup.js.map +1 -1
  50. package/lib/cjs/components/AvatarGroup/index.js +17 -11
  51. package/lib/cjs/components/AvatarGroup/index.js.map +1 -1
  52. package/lib/cjs/components/ImagePreview/ImagePreview.js +11 -5
  53. package/lib/cjs/components/ImagePreview/ImagePreview.js.map +1 -1
  54. package/lib/cjs/components/ImagePreview/index.js +18 -12
  55. package/lib/cjs/components/ImagePreview/index.js.map +1 -1
  56. package/lib/cjs/components/List/ListItem/ListItem.js +11 -5
  57. package/lib/cjs/components/List/ListItem/ListItem.js.map +1 -1
  58. package/lib/cjs/components/List/index.js +16 -10
  59. package/lib/cjs/components/List/index.js.map +1 -1
  60. package/lib/cjs/components/Picker/Picker.js +6 -1
  61. package/lib/cjs/components/Picker/Picker.js.map +1 -1
  62. package/lib/cjs/components/Picker/index.js +6 -1
  63. package/lib/cjs/components/Picker/index.js.map +1 -1
  64. package/lib/cjs/components/Sheets/Sheets.js +168 -16
  65. package/lib/cjs/components/Sheets/Sheets.js.map +1 -1
  66. package/lib/cjs/components/Sheets/index.js +9 -3
  67. package/lib/cjs/components/Sheets/index.js.map +1 -1
  68. package/lib/cjs/components/Sheets/interface/index.js +6 -1
  69. package/lib/cjs/components/Sheets/interface/index.js.map +1 -1
  70. package/lib/cjs/components/Sheets/styles.js +39 -11
  71. package/lib/cjs/components/Sheets/styles.js.map +1 -1
  72. package/lib/cjs/components/Silder/Silder.js +71 -0
  73. package/lib/cjs/components/Silder/Silder.js.map +1 -0
  74. package/lib/cjs/components/Silder/index.js +18 -0
  75. package/lib/cjs/components/Silder/index.js.map +1 -0
  76. package/lib/cjs/components/Silder/interface/index.js +9 -0
  77. package/lib/cjs/components/Silder/interface/index.js.map +1 -0
  78. package/lib/cjs/components/Silder/styles.js +29 -0
  79. package/lib/cjs/components/Silder/styles.js.map +1 -0
  80. package/lib/cjs/components/TabBar/TabBar.js +10 -10
  81. package/lib/cjs/components/TabBar/TabBar.js.map +1 -1
  82. package/lib/cjs/index.js +12 -2
  83. package/lib/cjs/index.js.map +1 -1
  84. package/lib/esm/_chunks/BJ2Kj1Vd.js +58 -0
  85. package/lib/esm/_chunks/BJ2Kj1Vd.js.map +1 -0
  86. package/lib/esm/_chunks/DHJk9lIr.js +19 -0
  87. package/lib/esm/_chunks/DHJk9lIr.js.map +1 -0
  88. package/lib/esm/_chunks/RRfNwNcs.js +17 -0
  89. package/lib/esm/_chunks/RRfNwNcs.js.map +1 -0
  90. package/lib/esm/components/ActionSheets/ActionSheets.js +95 -0
  91. package/lib/esm/components/ActionSheets/ActionSheets.js.map +1 -0
  92. package/lib/esm/components/ActionSheets/index.js +31 -0
  93. package/lib/esm/components/ActionSheets/index.js.map +1 -0
  94. package/lib/esm/components/ActionSheets/interface/index.js +2 -0
  95. package/lib/esm/components/ActionSheets/interface/index.js.map +1 -0
  96. package/lib/esm/components/ActionSheets/styles.js +55 -0
  97. package/lib/esm/components/ActionSheets/styles.js.map +1 -0
  98. package/lib/esm/components/AvatarGroup/AvatarGroup.js +10 -4
  99. package/lib/esm/components/AvatarGroup/AvatarGroup.js.map +1 -1
  100. package/lib/esm/components/AvatarGroup/index.js +17 -11
  101. package/lib/esm/components/AvatarGroup/index.js.map +1 -1
  102. package/lib/esm/components/ImagePreview/ImagePreview.js +11 -5
  103. package/lib/esm/components/ImagePreview/ImagePreview.js.map +1 -1
  104. package/lib/esm/components/ImagePreview/index.js +18 -12
  105. package/lib/esm/components/ImagePreview/index.js.map +1 -1
  106. package/lib/esm/components/List/ListItem/ListItem.js +11 -5
  107. package/lib/esm/components/List/ListItem/ListItem.js.map +1 -1
  108. package/lib/esm/components/List/index.js +16 -10
  109. package/lib/esm/components/List/index.js.map +1 -1
  110. package/lib/esm/components/Picker/Picker.js +6 -1
  111. package/lib/esm/components/Picker/Picker.js.map +1 -1
  112. package/lib/esm/components/Picker/index.js +6 -1
  113. package/lib/esm/components/Picker/index.js.map +1 -1
  114. package/lib/esm/components/Sheets/Sheets.js +170 -18
  115. package/lib/esm/components/Sheets/Sheets.js.map +1 -1
  116. package/lib/esm/components/Sheets/index.js +9 -3
  117. package/lib/esm/components/Sheets/index.js.map +1 -1
  118. package/lib/esm/components/Sheets/interface/index.js +1 -1
  119. package/lib/esm/components/Sheets/styles.js +39 -11
  120. package/lib/esm/components/Sheets/styles.js.map +1 -1
  121. package/lib/esm/components/Silder/Silder.js +67 -0
  122. package/lib/esm/components/Silder/Silder.js.map +1 -0
  123. package/lib/esm/components/Silder/index.js +12 -0
  124. package/lib/esm/components/Silder/index.js.map +1 -0
  125. package/lib/esm/components/Silder/interface/index.js +3 -0
  126. package/lib/esm/components/Silder/interface/index.js.map +1 -0
  127. package/lib/esm/components/Silder/styles.js +25 -0
  128. package/lib/esm/components/Silder/styles.js.map +1 -0
  129. package/lib/esm/components/TabBar/TabBar.js +10 -10
  130. package/lib/esm/components/TabBar/TabBar.js.map +1 -1
  131. package/lib/esm/index.js +8 -2
  132. package/lib/esm/index.js.map +1 -1
  133. package/lib/types/components/ActionSheets/ActionSheets.d.ts +10 -0
  134. package/lib/types/components/ActionSheets/demo/index.d.ts +2 -0
  135. package/lib/types/components/ActionSheets/index.d.ts +4 -0
  136. package/lib/types/components/ActionSheets/interface/index.d.ts +23 -0
  137. package/lib/types/components/ActionSheets/styles.d.ts +51 -0
  138. package/lib/types/components/ActionSheets/test/index.bench.d.ts +1 -0
  139. package/lib/types/components/ActionSheets/test/index.test.d.ts +1 -0
  140. package/lib/types/components/ActionSheets/test/paper.bench.d.ts +1 -0
  141. package/lib/types/components/FAB/test/paper.bench.d.ts +1 -0
  142. package/lib/types/components/Sheets/Sheets.d.ts +17 -1
  143. package/lib/types/components/Sheets/interface/index.d.ts +45 -0
  144. package/lib/types/components/Sheets/styles.d.ts +38 -9
  145. package/lib/types/components/Sheets/test/index.test.d.ts +1 -1
  146. package/lib/types/components/Silder/Silder.d.ts +13 -0
  147. package/lib/types/components/Silder/demo/index.d.ts +2 -0
  148. package/lib/types/components/Silder/index.d.ts +4 -0
  149. package/lib/types/components/Silder/interface/index.d.ts +19 -0
  150. package/lib/types/components/Silder/styles.d.ts +20 -0
  151. package/lib/types/components/Silder/test/index.bench.d.ts +1 -0
  152. package/lib/types/components/Silder/test/index.test.d.ts +1 -0
  153. package/lib/types/index.d.ts +2 -0
  154. package/package.json +2 -3
  155. package/src/components/ActionSheets/ActionSheets.tsx +66 -0
  156. package/src/components/ActionSheets/demo/index.tsx +65 -0
  157. package/src/components/ActionSheets/doc/index.mdx +24 -0
  158. package/src/components/ActionSheets/index.ts +5 -0
  159. package/src/components/ActionSheets/interface/index.ts +27 -0
  160. package/src/components/ActionSheets/styles.ts +54 -0
  161. package/src/components/ActionSheets/test/index.bench.tsx +13 -0
  162. package/src/components/ActionSheets/test/index.test.tsx +81 -0
  163. package/src/components/ActionSheets/test/paper.bench.tsx +17 -0
  164. package/src/components/Avatar/test/__snapshots__/index.test.tsx.snap +32 -0
  165. package/src/components/Avatar/test/paper.bench.tsx +1 -1
  166. package/src/components/Button/test/__snapshots__/index.test.tsx.snap +0 -10
  167. package/src/components/Divider/test/__snapshots__/index.test.tsx.snap +420 -6
  168. package/src/components/Divider/test/index.test.tsx +43 -35
  169. package/src/components/FAB/test/__snapshots__/index.test.tsx.snap +0 -2
  170. package/src/components/FAB/test/paper.bench.tsx +12 -0
  171. package/src/components/Picker/test/index.test.tsx +17 -25
  172. package/src/components/Progress/test/__snapshots__/index.test.tsx.snap +332 -3
  173. package/src/components/Progress/test/index.test.tsx +29 -19
  174. package/src/components/PullRefresh/test/index.bench.tsx +1 -1
  175. package/src/components/Sheets/Sheets.tsx +293 -20
  176. package/src/components/Sheets/demo/index.tsx +191 -14
  177. package/src/components/Sheets/doc/index.mdx +16 -5
  178. package/src/components/Sheets/interface/index.ts +50 -0
  179. package/src/components/Sheets/styles.ts +38 -10
  180. package/src/components/Sheets/test/index.test.tsx +71 -48
  181. package/src/components/Sheets/test/paper.bench.tsx +1 -1
  182. package/src/components/Silder/Silder.tsx +49 -0
  183. package/src/components/Silder/demo/index.tsx +53 -0
  184. package/src/components/Silder/doc/index.mdx +26 -0
  185. package/src/components/Silder/index.ts +5 -0
  186. package/src/components/Silder/interface/index.ts +20 -0
  187. package/src/components/Silder/styles.ts +24 -0
  188. package/src/components/Silder/test/index.bench.tsx +13 -0
  189. package/src/components/Silder/test/index.test.tsx +18 -0
  190. package/src/components/TabBar/TabBar.tsx +17 -17
  191. package/src/components/Toast/test/paper.bench.tsx +9 -5
  192. package/src/index.ts +2 -0
  193. package/lib/cjs/_chunks/DIhBCUjt.js +0 -17
  194. package/lib/cjs/_chunks/DIhBCUjt.js.map +0 -1
  195. package/lib/esm/_chunks/B3_9dzWY.js +0 -14
  196. package/lib/esm/_chunks/B3_9dzWY.js.map +0 -1
@@ -1,11 +1,7 @@
1
- import { alwaysColor } from "@xhs/reds-token-next";
2
1
  import { StyleSheet } from "react-native";
3
2
 
4
3
  const styles = StyleSheet.create({
5
- container: {
6
- width: "100%",
7
- height: "100%",
8
- backgroundColor: alwaysColor.MaskBg,
4
+ wrapper: {
9
5
  position: "absolute",
10
6
  bottom: 0,
11
7
  left: 0,
@@ -15,7 +11,6 @@ const styles = StyleSheet.create({
15
11
  mask: {
16
12
  width: "100%",
17
13
  height: "100%",
18
- backgroundColor: alwaysColor.MaskBg,
19
14
  position: "absolute",
20
15
  bottom: 0,
21
16
  left: 0,
@@ -23,14 +18,12 @@ const styles = StyleSheet.create({
23
18
  top: 0,
24
19
  },
25
20
  picker: {
21
+ borderTopLeftRadius: 12,
22
+ borderTopRightRadius: 12,
26
23
  position: "absolute",
27
24
  bottom: 0,
28
25
  left: 0,
29
26
  right: 0,
30
- paddingTop: 4,
31
- paddingBottom: 34,
32
- borderTopLeftRadius: 12,
33
- borderTopRightRadius: 12,
34
27
  },
35
28
  labelContainer: {
36
29
  display: "flex",
@@ -55,6 +48,41 @@ const styles = StyleSheet.create({
55
48
  fontSize: 16,
56
49
  fontWeight: "400",
57
50
  },
51
+ iconBg: {
52
+ width: 28,
53
+ height: 28,
54
+ borderRadius: 28,
55
+ display: "flex",
56
+ justifyContent: "center",
57
+ alignItems: "center",
58
+ },
59
+ dragableContainer: {
60
+ width: "100%",
61
+ height: 20,
62
+ display: "flex",
63
+ justifyContent: "center",
64
+ alignItems: "center",
65
+ },
66
+ dragable: {
67
+ width: 33,
68
+ height: 4,
69
+ borderRadius: 10,
70
+ },
71
+ block: {
72
+ width: 28,
73
+ height: 28,
74
+ },
75
+ actionContainer: {
76
+ display: "flex",
77
+ justifyContent: "space-between",
78
+ alignItems: "center",
79
+ flexDirection: "row",
80
+ width: "100%",
81
+ },
82
+ action: {
83
+ flex: 1,
84
+ marginHorizontal: 12,
85
+ },
58
86
  });
59
87
 
60
88
  export default styles;
@@ -1,59 +1,82 @@
1
1
  import React from "react";
2
- import { describe, it, expect, vi } from "vitest";
3
2
  import { render, fireEvent } from "@testing-library/react-native";
4
- import "@testing-library/react-native/extend-expect";
5
3
  import { Text } from "react-native";
4
+ import { vi, describe, it, expect } from "vitest";
6
5
  import Sheets from "../Sheets";
7
- import { PortalProvider } from "../../Portal";
8
-
9
- describe("Sheets", () => {
10
- it("renders correctly when visible is true", () => {
11
- const onCancel = vi.fn();
12
- const onConfirm = vi.fn();
13
- const label = "Test Label";
14
-
15
- const { getByText } = render(
16
- <PortalProvider>
17
- <Sheets visible={true} onCancel={onCancel} onConfirm={onConfirm} label={label}>
18
- <Text>Test Children</Text>
19
- </Sheets>
20
- </PortalProvider>,
21
- );
22
-
23
- expect(getByText("Test Label")).toBeTruthy();
6
+ import { SheetsMaskMode, SheetsType, SheetsActionType, SheetsIconType, SheetsSize } from "../interface";
7
+
8
+ describe("Sheets Component", () => {
9
+ const defaultProps = {
10
+ visible: true,
11
+ onCancel: vi.fn(),
12
+ onConfirm: vi.fn(),
13
+ children: <Text>Content</Text>,
14
+ label: "Test Label",
15
+ mask: true,
16
+ maskMode: SheetsMaskMode.dark,
17
+ cancelType: SheetsActionType.text,
18
+ closeType: SheetsActionType.icon,
19
+ cancelText: "Cancel",
20
+ closeText: "Close",
21
+ sheetsType: SheetsType.normal,
22
+ cancel: true,
23
+ close: true,
24
+ iconType: SheetsIconType.bg,
25
+ size: SheetsSize.auto,
26
+ };
27
+
28
+ it("should render correctly when visible", () => {
29
+ const { getByText } = render(<Sheets {...defaultProps} />);
30
+ expect(getByText("Content")).toBeTruthy();
31
+ });
32
+
33
+ it("should call onCancel when mask is clicked", () => {
34
+ const { getByTestId } = render(<Sheets {...defaultProps} />);
35
+ fireEvent.press(getByTestId("mask"));
36
+ expect(defaultProps.onCancel).toBeCalled();
24
37
  });
25
38
 
26
- it("calls onCancel and onConfirm on button press", () => {
27
- const onCancel = vi.fn();
28
- const onConfirm = vi.fn();
29
- const label = "Test Label";
30
-
31
- const { getByText } = render(
32
- <PortalProvider>
33
- <Sheets visible={true} onCancel={onCancel} onConfirm={onConfirm} label={label}>
34
- <Text>Test Children</Text>
35
- </Sheets>
36
- </PortalProvider>,
37
- );
38
-
39
- const cancelBtn = getByText("取消");
40
- fireEvent.press(cancelBtn);
41
- expect(onCancel).toHaveBeenCalledTimes(1);
42
-
43
- const confirmBtn = getByText("确定");
44
- fireEvent.press(confirmBtn);
45
- expect(onConfirm).toHaveBeenCalledTimes(1);
39
+ it("should call onConfirm when close is clicked", () => {
40
+ const { getByText } = render(<Sheets {...defaultProps} />);
41
+ fireEvent.press(getByText("Close"));
42
+ expect(defaultProps.onConfirm).toBeCalled();
46
43
  });
47
44
 
48
- it("does not render anything when visible is false", () => {
49
- const { queryByText } = render(
50
- <PortalProvider>
51
- <Sheets visible={false} onCancel={() => {}} onConfirm={() => {}} label={"Test Label"}>
52
- <Text>Test Children</Text>
53
- </Sheets>
54
- </PortalProvider>,
55
- );
45
+ it("should call onCancel when cancel is clicked", () => {
46
+ const { getByText } = render(<Sheets {...defaultProps} />);
47
+ fireEvent.press(getByText("Cancel"));
48
+ expect(defaultProps.onCancel).toBeCalled();
49
+ });
50
+
51
+ it("should handle layout changes correctly", () => {
52
+ const { getByText } = render(<Sheets {...defaultProps} />);
53
+ const content = getByText("Content");
54
+
55
+ // @ts-expect-error
56
+ fireEvent.layout(content, {
57
+ nativeEvent: {
58
+ layout: { height: 300 },
59
+ },
60
+ });
61
+
62
+ // 验证 Animated 的高度变化
63
+ // 由于Animated是异步的,可以使用Mock或Spy进行验证
64
+ });
65
+
66
+ it("should handle pan responder correctly", () => {
67
+ const { getByTestId } = render(<Sheets {...defaultProps} sheetsType={SheetsType.dragable} />);
68
+ const draggable = getByTestId("draggable");
69
+
70
+ fireEvent(draggable, "panResponderMove", {
71
+ nativeEvent: { contentOffset: { dy: -100 } },
72
+ });
73
+
74
+ // 验证 Animated 的高度变化
75
+ // 由于Animated是异步的,可以使用Mock或Spy进行验证
76
+ });
56
77
 
57
- expect(queryByText("Test Label")).toBeNull();
78
+ it("should hide when visible is false", () => {
79
+ const { queryByText } = render(<Sheets {...defaultProps} visible={false} />);
80
+ expect(queryByText("Content")).not.toBeTruthy();
58
81
  });
59
82
  });
@@ -6,7 +6,7 @@ import { Modal } from "react-native-paper";
6
6
  import { render, fireEvent } from "@testing-library/react-native";
7
7
  import { Text } from "react-native";
8
8
 
9
- describe("render", () => {
9
+ describe("paper render", () => {
10
10
  redsBench("base", async () => {
11
11
  render(
12
12
  <Modal visible={true}>
@@ -0,0 +1,49 @@
1
+ import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
2
+ import { View, TouchableWithoutFeedback, Animated, GestureResponderEvent } from "react-native";
3
+ import { RedsSilder, SilderDefaultProps } from "./interface/index";
4
+ import styles from "./styles";
5
+
6
+ const Silder = ({ value, defaultValue, onChange, onClick, trackOnColor, trackOffColor }: RedsSilder) => {
7
+ const isControlled = useRef(value !== undefined);
8
+ const [isOn, setIsOn] = useState(defaultValue);
9
+
10
+ const animatedValue = useRef(new Animated.Value(defaultValue ? 18 : 2)).current;
11
+ const thumbTranslateX = animatedValue.interpolate({ inputRange: [2, 18], outputRange: [2, 18] });
12
+
13
+ useEffect(() => {
14
+ onChange?.(!!isOn);
15
+ }, [isOn]);
16
+
17
+ useEffect(() => {
18
+ isControlled.current && setIsOn(value);
19
+ }, [value]);
20
+
21
+ const toggleSilder = useCallback((e: GestureResponderEvent) => {
22
+ onClick?.(e);
23
+ !isControlled.current && setIsOn((v) => !v);
24
+ }, []);
25
+
26
+ const dynamicStyles = useMemo(() => {
27
+ Animated.timing(animatedValue, {
28
+ toValue: isOn ? 18 : 2,
29
+ duration: 200,
30
+ useNativeDriver: true,
31
+ }).start();
32
+ return {
33
+ backgroundColor: isOn ? trackOnColor : trackOffColor,
34
+ transform: [{ translateX: thumbTranslateX }],
35
+ };
36
+ }, [isOn]);
37
+
38
+ return (
39
+ <TouchableWithoutFeedback onPress={(e) => toggleSilder(e)}>
40
+ <View style={[styles.SilderContainer, { backgroundColor: dynamicStyles.backgroundColor }]}>
41
+ <Animated.View style={[styles.thumb, { transform: dynamicStyles.transform }]}></Animated.View>
42
+ </View>
43
+ </TouchableWithoutFeedback>
44
+ );
45
+ };
46
+
47
+ Silder.defaultProps = SilderDefaultProps;
48
+
49
+ export default Silder;
@@ -0,0 +1,53 @@
1
+ import React, { useRef, useEffect, useState } from "react";
2
+ import { View, Text, StyleSheet, FlatList, ScrollView } from "react-native";
3
+ import { Silder } from "@xhs/reds-rn-next";
4
+
5
+ const styles = StyleSheet.create({
6
+ container: {
7
+ flex: 1,
8
+ justifyContent: "center",
9
+ paddingTop: 100,
10
+ paddingBottom: 100,
11
+ },
12
+ scrollView: {
13
+ backgroundColor: "pink",
14
+ },
15
+ root: {
16
+ flex: 1,
17
+ backgroundColor: "blue",
18
+ },
19
+ });
20
+ const Desc = ({ children = "" }) => {
21
+ return <Text>{children}</Text>;
22
+ };
23
+ const Br = (props: { height?: number }) => <View style={{ height: props.height || 20 }}></View>;
24
+
25
+ export default function App() {
26
+ const [value, setValue] = useState(false);
27
+ const [valueStr, setValueStr] = useState(value.toString());
28
+ const onClick = (e: any) => setValue((v) => !v);
29
+ const onChange = (v: boolean) => {
30
+ console.log(v);
31
+ setValueStr(v.toString());
32
+ };
33
+ return (
34
+ <View style={styles.container}>
35
+ <Desc>默认用法</Desc>
36
+ <Silder></Silder>
37
+ <Br />
38
+
39
+ <Desc>设置默认值</Desc>
40
+ <Silder defaultValue={true}></Silder>
41
+ <Br />
42
+
43
+ <Desc>修改开关颜色</Desc>
44
+ <Silder trackOnColor={"#1b8bcd"} trackOffColor={"#da36c9"}></Silder>
45
+ <Br />
46
+
47
+ <Desc>受控用法</Desc>
48
+ <Text>当前值:{valueStr}</Text>
49
+ <Silder value={value} onClick={onClick} onChange={onChange}></Silder>
50
+ <Br />
51
+ </View>
52
+ );
53
+ }
@@ -0,0 +1,26 @@
1
+ import BaseDemo from "!!raw-loader!../demo/index.tsx";
2
+
3
+ ## 演示
4
+
5
+ ### 基础用法
6
+
7
+ ::BaseDemo::
8
+
9
+ ## API
10
+
11
+ ### Props
12
+
13
+ | 属性 | 描述 | 类型 | 默认值 |
14
+ | ------------- | ---------------- | ------- | ------------------ |
15
+ | value | 当前的状态 | boolean | undefined |
16
+ | defaultValue | 默认状态 | boolean | false |
17
+ | disabled | 是否显示气泡 | boolean | false |
18
+ | trackOnColor | 开关开启时的颜色 | string | lightColor.Primary |
19
+ | trackOffColor | 开关关闭时的颜色 | string | lightColor.Fill2 |
20
+
21
+ ### Events
22
+
23
+ | 事件 | 描述 | 类型 | 默认值 |
24
+ | -------- | ------------------ | ------------------------------------- | ------ |
25
+ | onChange | 当值发生变化时触发 | (value: boolean) => any | |
26
+ | onClick | 被点击时触发 | (value: GestureResponderEvent) => any | |
@@ -0,0 +1,5 @@
1
+ import Silder from "./Silder";
2
+ import * as SilderType from "./interface";
3
+
4
+ export default Silder;
5
+ export { Silder, SilderType };
@@ -0,0 +1,20 @@
1
+ import { GestureResponderEvent } from "react-native";
2
+ import { lightColor } from "@xhs/reds-token-next";
3
+ export interface RedsSilder {
4
+ value?: boolean;
5
+ defaultValue?: boolean;
6
+ disabled?: boolean;
7
+ trackOnColor?: string;
8
+ trackOffColor?: string;
9
+ onChange?: (value: boolean) => any;
10
+ onClick?: (value: GestureResponderEvent) => any;
11
+ }
12
+
13
+ export interface RedsSilderEvent {}
14
+ export const SilderDefaultProps = {
15
+ value: undefined,
16
+ defaultValue: false,
17
+ disabled: false,
18
+ trackOnColor: lightColor.Primary,
19
+ trackOffColor: lightColor.Fill2,
20
+ };
@@ -0,0 +1,24 @@
1
+ import { alwaysColor } from "@xhs/reds-token-next";
2
+ import { StyleSheet } from "react-native";
3
+
4
+ const styles = StyleSheet.create({
5
+ SilderContainer: {
6
+ width: 40,
7
+ height: 24,
8
+ borderRadius: 15,
9
+ justifyContent: "center",
10
+ alignItems: "center",
11
+ },
12
+ thumb: {
13
+ width: 20,
14
+ height: 20,
15
+ borderRadius: 10,
16
+ backgroundColor: alwaysColor.White,
17
+ justifyContent: "center",
18
+ alignItems: "center",
19
+ position: "absolute",
20
+ left: 0,
21
+ },
22
+ });
23
+
24
+ export default styles;
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { describe } from "vitest";
3
+ // @ts-ignore
4
+ import { redsBench } from "~root/utils/redsBench";
5
+ import Silder from "..";
6
+ import { render, fireEvent } from "@testing-library/react-native";
7
+ import { Text } from "react-native";
8
+
9
+ describe("render", () => {
10
+ redsBench("base", async () => {
11
+ render(<Silder></Silder>);
12
+ });
13
+ });
@@ -0,0 +1,18 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { render, fireEvent, userEvent } from "@testing-library/react-native";
3
+ import "@testing-library/react-native/extend-expect";
4
+ import { Pressable, Text, View } from "react-native";
5
+ import Silder from "../index";
6
+
7
+ describe("Silder", () => {
8
+ it(":base", async () => {
9
+ let isOn = false;
10
+ const wrapper = render(<Silder onChange={(v) => (isOn = v)}></Silder>);
11
+ expect(wrapper.UNSAFE_root.props.defaultValue).toBe(false);
12
+ await fireEvent(wrapper.UNSAFE_root.children[0], "press");
13
+ expect(isOn).toBe(true);
14
+
15
+ await fireEvent(wrapper.UNSAFE_root.children[0], "press");
16
+ expect(isOn).toBe(false);
17
+ });
18
+ });
@@ -11,6 +11,23 @@ import Badge from "../Badge";
11
11
  const defaultIconSize = 20;
12
12
 
13
13
  const TabBar = (props: RedsTabBar) => {
14
+ /**
15
+ * 渲染的tab数据
16
+ */
17
+
18
+ const renderTabs = useMemo(() => {
19
+ if (props.customTabBar) {
20
+ /** 记录插入位置 */
21
+ const customIdx = Math.floor(props.list.length / 2);
22
+ /** 插入数据 */
23
+ return props.list.reduce((prev: DataType[], cur: DataType, index: number) => {
24
+ return (index === customIdx ? [...prev, props.customTabBar, cur] : [...prev, cur]) as DataType[];
25
+ }, [] as DataType[]);
26
+ } else {
27
+ return props.list;
28
+ }
29
+ }, [props.list, props.customTabBar]);
30
+
14
31
  /**
15
32
  * 计算文字class
16
33
  * @param item
@@ -49,23 +66,6 @@ const TabBar = (props: RedsTabBar) => {
49
66
  props?.onChange?.(item.key);
50
67
  };
51
68
 
52
- /**
53
- * 渲染的tab数据
54
- */
55
-
56
- const renderTabs = useMemo(() => {
57
- if (props.customTabBar) {
58
- /** 记录插入位置 */
59
- const customIdx = Math.floor(props.list.length / 2);
60
- /** 插入数据 */
61
- return props.list.reduce((prev: DataType[], cur: DataType, index: number) => {
62
- return (index === customIdx ? [...prev, props.customTabBar, cur] : [...prev, cur]) as DataType[];
63
- }, [] as DataType[]);
64
- } else {
65
- return props.list;
66
- }
67
- }, [props.list, props.customTabBar]);
68
-
69
69
  /**
70
70
  * 容器
71
71
  */
@@ -4,15 +4,19 @@ import { Text } from "react-native";
4
4
  // @ts-ignore
5
5
  import { redsBench } from "~root/utils/redsBench";
6
6
  import { render } from "@testing-library/react-native";
7
- import { Modal as PaperModal } from "react-native-paper";
7
+ import { Modal as PaperModal, Portal, PaperProvider } from "react-native-paper";
8
8
 
9
9
  describe("render", () => {
10
10
  redsBench("base", async () => {
11
11
  render(
12
- <PaperModal visible={true}>
13
- {" "}
14
- <Text>Example Modal. Click outside this area to dismiss.</Text>
15
- </PaperModal>,
12
+ <PaperProvider>
13
+ <Portal>
14
+ <PaperModal visible={true}>
15
+ {" "}
16
+ <Text>Example Modal. Click outside this area to dismiss.</Text>
17
+ </PaperModal>
18
+ </Portal>
19
+ </PaperProvider>,
16
20
  );
17
21
  });
18
22
  });
package/src/index.ts CHANGED
@@ -1,3 +1,5 @@
1
+ export * from "./components/ActionSheets";
2
+ export * from "./components/Silder";
1
3
  export * from "./components/Sheets";
2
4
  export * from "./components/PickerView";
3
5
  export * from "./components/Picker";
@@ -1,17 +0,0 @@
1
- 'use strict';
2
-
3
- var SheetsDefaultProps = {
4
- label: "",
5
- onCancel: function onCancel() {},
6
- onConfirm: function onConfirm() {},
7
- visible: false
8
- };
9
-
10
- var index = /*#__PURE__*/Object.freeze({
11
- __proto__: null,
12
- SheetsDefaultProps: SheetsDefaultProps
13
- });
14
-
15
- exports.SheetsDefaultProps = SheetsDefaultProps;
16
- exports.index = index;
17
- //# sourceMappingURL=DIhBCUjt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DIhBCUjt.js","sources":["../../../src/components/Sheets/interface/index.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nexport interface RedsSheets {\n label?: string;\n onCancel: () => any;\n onConfirm: () => any;\n visible: boolean;\n children: ReactNode;\n}\n\nexport interface RedsSheetsEvent {}\nexport const SheetsDefaultProps = {\n label: \"\",\n onCancel: () => {},\n onConfirm: () => {},\n visible: false,\n};\n"],"names":["SheetsDefaultProps","label","onCancel","onConfirm","visible"],"mappings":";;AAUO,IAAMA,kBAAqB,GAAA;AAChCC,EAAAA,KAAO,EAAA,EAAA;AACPC,EAAAA,UAAU,SAAVA,WAAgB,EAAC;AACjBC,EAAAA,WAAW,SAAXA,YAAiB,EAAC;AAClBC,EAAAA,OAAS,EAAA,KAAA;AACX;;;;;;;;;;"}
@@ -1,14 +0,0 @@
1
- var SheetsDefaultProps = {
2
- label: "",
3
- onCancel: function onCancel() {},
4
- onConfirm: function onConfirm() {},
5
- visible: false
6
- };
7
-
8
- var index = /*#__PURE__*/Object.freeze({
9
- __proto__: null,
10
- SheetsDefaultProps: SheetsDefaultProps
11
- });
12
-
13
- export { SheetsDefaultProps as S, index as i };
14
- //# sourceMappingURL=B3_9dzWY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"B3_9dzWY.js","sources":["../../../src/components/Sheets/interface/index.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nexport interface RedsSheets {\n label?: string;\n onCancel: () => any;\n onConfirm: () => any;\n visible: boolean;\n children: ReactNode;\n}\n\nexport interface RedsSheetsEvent {}\nexport const SheetsDefaultProps = {\n label: \"\",\n onCancel: () => {},\n onConfirm: () => {},\n visible: false,\n};\n"],"names":["SheetsDefaultProps","label","onCancel","onConfirm","visible"],"mappings":"AAUO,IAAMA,kBAAqB,GAAA;AAChCC,EAAAA,KAAO,EAAA,EAAA;AACPC,EAAAA,UAAU,SAAVA,WAAgB,EAAC;AACjBC,EAAAA,WAAW,SAAXA,YAAiB,EAAC;AAClBC,EAAAA,OAAS,EAAA,KAAA;AACX;;;;;;;;;"}