zkit-ui 1.0.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.
Files changed (267) hide show
  1. package/README.md +267 -0
  2. package/dist/ComponentLibProvider.d.ts +15 -0
  3. package/dist/ComponentLibProvider.d.ts.map +1 -0
  4. package/dist/ComponentLibProvider.js +18 -0
  5. package/dist/assets/animations/spinner.json +1 -0
  6. package/dist/assets/icons/check.svg +4 -0
  7. package/dist/assets/icons/toast/error.webp +0 -0
  8. package/dist/assets/icons/toast/success.webp +0 -0
  9. package/dist/assets/icons/toast/warning.webp +0 -0
  10. package/dist/config.d.ts +16 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +42 -0
  13. package/dist/i18n/I18nProvider.d.ts +11 -0
  14. package/dist/i18n/I18nProvider.d.ts.map +1 -0
  15. package/dist/i18n/I18nProvider.js +84 -0
  16. package/dist/i18n/locale.d.ts +7 -0
  17. package/dist/i18n/locale.d.ts.map +1 -0
  18. package/dist/i18n/locale.js +87 -0
  19. package/dist/i18n/locales/de.d.ts +51 -0
  20. package/dist/i18n/locales/de.d.ts.map +1 -0
  21. package/dist/i18n/locales/de.js +62 -0
  22. package/dist/i18n/locales/en-US.d.ts +51 -0
  23. package/dist/i18n/locales/en-US.d.ts.map +1 -0
  24. package/dist/i18n/locales/en-US.js +62 -0
  25. package/dist/i18n/locales/index.d.ts +9 -0
  26. package/dist/i18n/locales/index.d.ts.map +1 -0
  27. package/dist/i18n/locales/index.js +23 -0
  28. package/dist/i18n/locales/ja.d.ts +51 -0
  29. package/dist/i18n/locales/ja.d.ts.map +1 -0
  30. package/dist/i18n/locales/ja.js +62 -0
  31. package/dist/i18n/locales/zh-CN.d.ts +51 -0
  32. package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
  33. package/dist/i18n/locales/zh-CN.js +62 -0
  34. package/dist/i18n/locales/zh-TW.d.ts +51 -0
  35. package/dist/i18n/locales/zh-TW.d.ts.map +1 -0
  36. package/dist/i18n/locales/zh-TW.js +62 -0
  37. package/dist/i18n/types.d.ts +11 -0
  38. package/dist/i18n/types.d.ts.map +1 -0
  39. package/dist/i18n/types.js +2 -0
  40. package/dist/i18n/useI18n.d.ts +2 -0
  41. package/dist/i18n/useI18n.d.ts.map +1 -0
  42. package/dist/i18n/useI18n.js +41 -0
  43. package/dist/index.d.ts +57 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +90 -0
  46. package/dist/services/ActionDialogService/ActionDialog.d.ts +4 -0
  47. package/dist/services/ActionDialogService/ActionDialog.d.ts.map +1 -0
  48. package/dist/services/ActionDialogService/ActionDialog.js +531 -0
  49. package/dist/services/ActionDialogService/index.d.ts +4 -0
  50. package/dist/services/ActionDialogService/index.d.ts.map +1 -0
  51. package/dist/services/ActionDialogService/index.js +8 -0
  52. package/dist/services/ActionDialogService/service.d.ts +7 -0
  53. package/dist/services/ActionDialogService/service.d.ts.map +1 -0
  54. package/dist/services/ActionDialogService/service.js +309 -0
  55. package/dist/services/ActionDialogService/shared.d.ts +17 -0
  56. package/dist/services/ActionDialogService/shared.d.ts.map +1 -0
  57. package/dist/services/ActionDialogService/shared.js +167 -0
  58. package/dist/services/ActionDialogService/types.d.ts +160 -0
  59. package/dist/services/ActionDialogService/types.d.ts.map +1 -0
  60. package/dist/services/ActionDialogService/types.js +2 -0
  61. package/dist/services/CardToastService/index.d.ts +115 -0
  62. package/dist/services/CardToastService/index.d.ts.map +1 -0
  63. package/dist/services/CardToastService/index.js +899 -0
  64. package/dist/services/ImagePreviewService/index.d.ts +179 -0
  65. package/dist/services/ImagePreviewService/index.d.ts.map +1 -0
  66. package/dist/services/ImagePreviewService/index.js +1383 -0
  67. package/dist/services/LoadingService/index.d.ts +146 -0
  68. package/dist/services/LoadingService/index.d.ts.map +1 -0
  69. package/dist/services/LoadingService/index.js +827 -0
  70. package/dist/services/PermissionPurposeDialogService/index.d.ts +99 -0
  71. package/dist/services/PermissionPurposeDialogService/index.d.ts.map +1 -0
  72. package/dist/services/PermissionPurposeDialogService/index.js +360 -0
  73. package/dist/services/PickerService/index.d.ts +128 -0
  74. package/dist/services/PickerService/index.d.ts.map +1 -0
  75. package/dist/services/PickerService/index.js +250 -0
  76. package/dist/theme/ThemeProvider.d.ts +15 -0
  77. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  78. package/dist/theme/ThemeProvider.js +61 -0
  79. package/dist/theme/defaultTheme.d.ts +3 -0
  80. package/dist/theme/defaultTheme.d.ts.map +1 -0
  81. package/dist/theme/defaultTheme.js +28 -0
  82. package/dist/theme/mergeTheme.d.ts +3 -0
  83. package/dist/theme/mergeTheme.d.ts.map +1 -0
  84. package/dist/theme/mergeTheme.js +19 -0
  85. package/dist/theme/types.d.ts +17 -0
  86. package/dist/theme/types.d.ts.map +1 -0
  87. package/dist/theme/types.js +2 -0
  88. package/dist/theme/useTheme.d.ts +2 -0
  89. package/dist/theme/useTheme.d.ts.map +1 -0
  90. package/dist/theme/useTheme.js +46 -0
  91. package/dist/ui/Accordion/index.d.ts +99 -0
  92. package/dist/ui/Accordion/index.d.ts.map +1 -0
  93. package/dist/ui/Accordion/index.js +777 -0
  94. package/dist/ui/AddressCascader/index.d.ts +58 -0
  95. package/dist/ui/AddressCascader/index.d.ts.map +1 -0
  96. package/dist/ui/AddressCascader/index.js +710 -0
  97. package/dist/ui/BetweenTime/index.d.ts +82 -0
  98. package/dist/ui/BetweenTime/index.d.ts.map +1 -0
  99. package/dist/ui/BetweenTime/index.js +702 -0
  100. package/dist/ui/Button/index.d.ts +93 -0
  101. package/dist/ui/Button/index.d.ts.map +1 -0
  102. package/dist/ui/Button/index.js +832 -0
  103. package/dist/ui/Checkbox/index.d.ts +103 -0
  104. package/dist/ui/Checkbox/index.d.ts.map +1 -0
  105. package/dist/ui/Checkbox/index.js +694 -0
  106. package/dist/ui/DatePicker/index.d.ts +5 -0
  107. package/dist/ui/DatePicker/index.d.ts.map +1 -0
  108. package/dist/ui/DatePicker/index.js +157 -0
  109. package/dist/ui/DatePicker/types.d.ts +99 -0
  110. package/dist/ui/DatePicker/types.d.ts.map +1 -0
  111. package/dist/ui/DatePicker/types.js +2 -0
  112. package/dist/ui/DatePicker/utils.d.ts +32 -0
  113. package/dist/ui/DatePicker/utils.d.ts.map +1 -0
  114. package/dist/ui/DatePicker/utils.js +316 -0
  115. package/dist/ui/LinkedScroll/index.d.ts +78 -0
  116. package/dist/ui/LinkedScroll/index.d.ts.map +1 -0
  117. package/dist/ui/LinkedScroll/index.js +470 -0
  118. package/dist/ui/LoadingSpinner/index.d.ts +8 -0
  119. package/dist/ui/LoadingSpinner/index.d.ts.map +1 -0
  120. package/dist/ui/LoadingSpinner/index.js +122 -0
  121. package/dist/ui/Picker/actionBar.d.ts +14 -0
  122. package/dist/ui/Picker/actionBar.d.ts.map +1 -0
  123. package/dist/ui/Picker/actionBar.js +28 -0
  124. package/dist/ui/Picker/index.d.ts +5 -0
  125. package/dist/ui/Picker/index.d.ts.map +1 -0
  126. package/dist/ui/Picker/index.js +412 -0
  127. package/dist/ui/Picker/types.d.ts +80 -0
  128. package/dist/ui/Picker/types.d.ts.map +1 -0
  129. package/dist/ui/Picker/types.js +2 -0
  130. package/dist/ui/Picker/utils.d.ts +27 -0
  131. package/dist/ui/Picker/utils.d.ts.map +1 -0
  132. package/dist/ui/Picker/utils.js +182 -0
  133. package/dist/ui/Radio/index.d.ts +95 -0
  134. package/dist/ui/Radio/index.d.ts.map +1 -0
  135. package/dist/ui/Radio/index.js +633 -0
  136. package/dist/ui/Sheet/index.d.ts +12 -0
  137. package/dist/ui/Sheet/index.d.ts.map +1 -0
  138. package/dist/ui/Sheet/index.js +832 -0
  139. package/dist/ui/Sheet/nativeBottom.d.ts +52 -0
  140. package/dist/ui/Sheet/nativeBottom.d.ts.map +1 -0
  141. package/dist/ui/Sheet/nativeBottom.js +442 -0
  142. package/dist/ui/Sheet/nativeBottom.web.d.ts +18 -0
  143. package/dist/ui/Sheet/nativeBottom.web.d.ts.map +1 -0
  144. package/dist/ui/Sheet/nativeBottom.web.js +46 -0
  145. package/dist/ui/Sheet/slots.d.ts +5 -0
  146. package/dist/ui/Sheet/slots.d.ts.map +1 -0
  147. package/dist/ui/Sheet/slots.js +40 -0
  148. package/dist/ui/Sheet/types.d.ts +131 -0
  149. package/dist/ui/Sheet/types.d.ts.map +1 -0
  150. package/dist/ui/Sheet/types.js +2 -0
  151. package/dist/ui/SliderCaptcha/index.d.ts +57 -0
  152. package/dist/ui/SliderCaptcha/index.d.ts.map +1 -0
  153. package/dist/ui/SliderCaptcha/index.js +586 -0
  154. package/dist/ui/Switch/index.d.ts +72 -0
  155. package/dist/ui/Switch/index.d.ts.map +1 -0
  156. package/dist/ui/Switch/index.js +671 -0
  157. package/dist/ui/Text/index.d.ts +41 -0
  158. package/dist/ui/Text/index.d.ts.map +1 -0
  159. package/dist/ui/Text/index.js +325 -0
  160. package/dist/ui/TextInput/TextInputPrimitive.d.ts +8 -0
  161. package/dist/ui/TextInput/TextInputPrimitive.d.ts.map +1 -0
  162. package/dist/ui/TextInput/TextInputPrimitive.js +54 -0
  163. package/dist/ui/TextInput/index.d.ts +89 -0
  164. package/dist/ui/TextInput/index.d.ts.map +1 -0
  165. package/dist/ui/TextInput/index.js +545 -0
  166. package/dist/ui/WheelColumn/ZKitWheelPickerNativeComponent.d.ts +39 -0
  167. package/dist/ui/WheelColumn/ZKitWheelPickerNativeComponent.d.ts.map +1 -0
  168. package/dist/ui/WheelColumn/ZKitWheelPickerNativeComponent.js +60 -0
  169. package/dist/ui/WheelColumn/constants.d.ts +2 -0
  170. package/dist/ui/WheelColumn/constants.d.ts.map +1 -0
  171. package/dist/ui/WheelColumn/constants.js +4 -0
  172. package/dist/ui/WheelColumn/index.d.ts +59 -0
  173. package/dist/ui/WheelColumn/index.d.ts.map +1 -0
  174. package/dist/ui/WheelColumn/index.js +547 -0
  175. package/ios/ZKitWheelPicker.h +18 -0
  176. package/ios/ZKitWheelPicker.mm +230 -0
  177. package/ios/ZKitWheelPickerLabel.h +10 -0
  178. package/ios/ZKitWheelPickerLabel.mm +31 -0
  179. package/ios/ZKitWheelPickerManager.h +5 -0
  180. package/ios/ZKitWheelPickerManager.mm +53 -0
  181. package/package.json +75 -0
  182. package/react-native.config.js +10 -0
  183. package/src/ComponentLibProvider.tsx +56 -0
  184. package/src/assets/animations/spinner.json +1 -0
  185. package/src/assets/icons/check.svg +4 -0
  186. package/src/assets/icons/toast/error.webp +0 -0
  187. package/src/assets/icons/toast/success.webp +0 -0
  188. package/src/assets/icons/toast/warning.webp +0 -0
  189. package/src/config.ts +65 -0
  190. package/src/i18n/I18nProvider.tsx +69 -0
  191. package/src/i18n/locale.ts +108 -0
  192. package/src/i18n/locales/de.ts +67 -0
  193. package/src/i18n/locales/en-US.ts +67 -0
  194. package/src/i18n/locales/index.ts +19 -0
  195. package/src/i18n/locales/ja.ts +67 -0
  196. package/src/i18n/locales/zh-CN.ts +67 -0
  197. package/src/i18n/locales/zh-TW.ts +67 -0
  198. package/src/i18n/types.ts +21 -0
  199. package/src/i18n/useI18n.ts +7 -0
  200. package/src/index.ts +395 -0
  201. package/src/services/ActionDialogService/ActionDialog.tsx +756 -0
  202. package/src/services/ActionDialogService/README.md +146 -0
  203. package/src/services/ActionDialogService/index.tsx +39 -0
  204. package/src/services/ActionDialogService/service.tsx +355 -0
  205. package/src/services/ActionDialogService/shared.ts +204 -0
  206. package/src/services/ActionDialogService/types.ts +197 -0
  207. package/src/services/CardToastService/README.md +128 -0
  208. package/src/services/CardToastService/index.tsx +1284 -0
  209. package/src/services/ImagePreviewService/README.md +67 -0
  210. package/src/services/ImagePreviewService/index.tsx +2148 -0
  211. package/src/services/LoadingService/README.md +128 -0
  212. package/src/services/LoadingService/index.tsx +1113 -0
  213. package/src/services/PermissionPurposeDialogService/README.md +80 -0
  214. package/src/services/PermissionPurposeDialogService/index.tsx +449 -0
  215. package/src/services/PickerService/README.md +154 -0
  216. package/src/services/PickerService/index.tsx +410 -0
  217. package/src/theme/ThemeProvider.tsx +40 -0
  218. package/src/theme/defaultTheme.ts +30 -0
  219. package/src/theme/mergeTheme.ts +16 -0
  220. package/src/theme/types.ts +36 -0
  221. package/src/theme/useTheme.ts +10 -0
  222. package/src/types/svg.d.ts +9 -0
  223. package/src/types/vant-area-data.d.ts +19 -0
  224. package/src/ui/Accordion/README.md +67 -0
  225. package/src/ui/Accordion/index.tsx +1221 -0
  226. package/src/ui/AddressCascader/README.md +144 -0
  227. package/src/ui/AddressCascader/index.tsx +1084 -0
  228. package/src/ui/BetweenTime/README.md +490 -0
  229. package/src/ui/BetweenTime/index.tsx +1001 -0
  230. package/src/ui/Button/README.md +186 -0
  231. package/src/ui/Button/index.tsx +1356 -0
  232. package/src/ui/Checkbox/README.md +211 -0
  233. package/src/ui/Checkbox/index.tsx +1231 -0
  234. package/src/ui/DatePicker/README.md +117 -0
  235. package/src/ui/DatePicker/index.tsx +295 -0
  236. package/src/ui/DatePicker/types.ts +115 -0
  237. package/src/ui/DatePicker/utils.ts +405 -0
  238. package/src/ui/LinkedScroll/README.md +55 -0
  239. package/src/ui/LinkedScroll/index.tsx +809 -0
  240. package/src/ui/LoadingSpinner/index.tsx +104 -0
  241. package/src/ui/Picker/README.md +190 -0
  242. package/src/ui/Picker/actionBar.tsx +70 -0
  243. package/src/ui/Picker/index.tsx +694 -0
  244. package/src/ui/Picker/types.ts +94 -0
  245. package/src/ui/Picker/utils.ts +239 -0
  246. package/src/ui/Radio/README.md +207 -0
  247. package/src/ui/Radio/index.tsx +1117 -0
  248. package/src/ui/Sheet/README.md +82 -0
  249. package/src/ui/Sheet/index.tsx +1163 -0
  250. package/src/ui/Sheet/nativeBottom.tsx +683 -0
  251. package/src/ui/Sheet/nativeBottom.web.tsx +40 -0
  252. package/src/ui/Sheet/slots.tsx +75 -0
  253. package/src/ui/Sheet/types.ts +195 -0
  254. package/src/ui/SliderCaptcha/README.md +61 -0
  255. package/src/ui/SliderCaptcha/index.tsx +816 -0
  256. package/src/ui/Switch/README.md +143 -0
  257. package/src/ui/Switch/index.tsx +1092 -0
  258. package/src/ui/Text/README.md +157 -0
  259. package/src/ui/Text/index.tsx +450 -0
  260. package/src/ui/TextInput/README.md +197 -0
  261. package/src/ui/TextInput/TextInputPrimitive.tsx +44 -0
  262. package/src/ui/TextInput/index.tsx +942 -0
  263. package/src/ui/WheelColumn/README.md +104 -0
  264. package/src/ui/WheelColumn/ZKitWheelPickerNativeComponent.tsx +68 -0
  265. package/src/ui/WheelColumn/constants.ts +1 -0
  266. package/src/ui/WheelColumn/index.tsx +826 -0
  267. package/zkit-ui.podspec +19 -0
@@ -0,0 +1,490 @@
1
+ # BetweenTime
2
+
3
+ BetweenTime 是一个高性能的时间区间选择器组件:
4
+
5
+ - 基于 `react-native-reanimated` 实现流畅的弹窗动画和滚轮交互
6
+ - 支持年/月/日/时/分/秒多级精度选择
7
+ - 内置快捷时间选择(今天、本周、本月等)
8
+ - 双端统一的滚轮选择器体验(iOS/Android)
9
+ - 支持受控和非受控两种使用模式
10
+
11
+ ## 基础用法
12
+
13
+ ```tsx
14
+ import { BetweenTime } from 'zkit-ui';
15
+ import { Text } from 'react-native';
16
+
17
+ export function Demo() {
18
+ const [value, setValue] = React.useState<string[]>([]);
19
+
20
+ return (
21
+ <BetweenTime
22
+ value={value}
23
+ onValueChange={setValue}
24
+ >
25
+ <Text>{value.length ? value.join(' 至 ') : '请选择时间范围'}</Text>
26
+ </BetweenTime>
27
+ );
28
+ }
29
+ ```
30
+
31
+ ## 精度控制:type
32
+
33
+ ```tsx
34
+ import { BetweenTime } from 'zkit-ui';
35
+
36
+ export function Demo() {
37
+ return (
38
+ <>
39
+ {/* 只选年份 */}
40
+ <BetweenTime type="year">
41
+ <Text>选择年份</Text>
42
+ </BetweenTime>
43
+
44
+ {/* 选择到月份 */}
45
+ <BetweenTime type="month">
46
+ <Text>选择月份</Text>
47
+ </BetweenTime>
48
+
49
+ {/* 选择到日期(默认) */}
50
+ <BetweenTime type="day">
51
+ <Text>选择日期</Text>
52
+ </BetweenTime>
53
+
54
+ {/* 选择到小时 */}
55
+ <BetweenTime type="hour">
56
+ <Text>选择小时</Text>
57
+ </BetweenTime>
58
+
59
+ {/* 选择到分钟 */}
60
+ <BetweenTime type="minute">
61
+ <Text>选择分钟</Text>
62
+ </BetweenTime>
63
+
64
+ {/* 选择到秒 */}
65
+ <BetweenTime type="second">
66
+ <Text>选择秒</Text>
67
+ </BetweenTime>
68
+ </>
69
+ );
70
+ }
71
+ ```
72
+
73
+ 说明:
74
+
75
+ - `type` 决定滚轮列数和输出格式精度
76
+ - `year`:1 列(年)
77
+ - `month`:2 列(年、月)
78
+ - `day`:3 列(年、月、日)- 默认值
79
+ - `hour`:4 列(年、月、日、时)
80
+ - `minute`:5 列(年、月、日、时、分)
81
+ - `second`:6 列(年、月、日、时、分、秒)
82
+
83
+ ## 时间范围限制:start / end
84
+
85
+ ```tsx
86
+ import { BetweenTime } from 'zkit-ui';
87
+
88
+ export function Demo() {
89
+ return (
90
+ <BetweenTime
91
+ start="2020-01-01"
92
+ end="2025-12-31"
93
+ >
94
+ <Text>限制 2020-2025 年</Text>
95
+ </BetweenTime>
96
+ );
97
+ }
98
+ ```
99
+
100
+ 说明:
101
+
102
+ - `start`:可选时间的最小值(标准时间格式字符串)
103
+ - `end`:可选时间的最大值(标准时间格式字符串)
104
+ - 支持的格式:`YYYY`、`YYYY-MM`、`YYYY-MM-DD`、`YYYY-MM-DD HH`、`YYYY-MM-DD HH:mm`、`YYYY-MM-DD HH:mm:ss`
105
+
106
+ ## 快捷选择:quickDate
107
+
108
+ ```tsx
109
+ import { BetweenTime } from 'zkit-ui';
110
+
111
+ export function Demo() {
112
+ return (
113
+ <BetweenTime
114
+ quickDate={['d', 'w', 'm', 'y', 'q', '7', '30']}
115
+ >
116
+ <Text>带快捷选择</Text>
117
+ </BetweenTime>
118
+ );
119
+ }
120
+ ```
121
+
122
+ 说明:
123
+
124
+ - `d`:今天
125
+ - `w`:本周
126
+ - `m`:本月
127
+ - `y`:本年
128
+ - `q`:本季度
129
+ - 数字字符串(如 `'7'`、`'30'`):最近 N 天
130
+
131
+ ## 自定义格式:format
132
+
133
+ ```tsx
134
+ import { BetweenTime } from 'zkit-ui';
135
+
136
+ export function Demo() {
137
+ return (
138
+ <>
139
+ {/* 默认格式 */}
140
+ <BetweenTime format="YYYY-MM-DD">
141
+ <Text>2024-01-01 至 2024-12-31</Text>
142
+ </BetweenTime>
143
+
144
+ {/* 中文格式 */}
145
+ <BetweenTime format="YYYY年MM月DD日">
146
+ <Text>2024年01月01日 至 2024年12月31日</Text>
147
+ </BetweenTime>
148
+
149
+ {/* 带时间格式 */}
150
+ <BetweenTime type="minute" format="YYYY-MM-DD HH:mm">
151
+ <Text>2024-01-01 08:00 至 2024-01-01 18:00</Text>
152
+ </BetweenTime>
153
+ </>
154
+ );
155
+ }
156
+ ```
157
+
158
+ 说明:
159
+
160
+ - `format` 用于格式化 `modelStr` 的输出以及弹窗内的时间显示
161
+ - 支持 dayjs 的所有格式化 token
162
+
163
+ ## 受控模式
164
+
165
+ ```tsx
166
+ import { BetweenTime } from 'zkit-ui';
167
+
168
+ export function Demo() {
169
+ const [value, setValue] = React.useState<string[]>(['2024-01-01', '2024-12-31']);
170
+ const [open, setOpen] = React.useState(false);
171
+
172
+ return (
173
+ <>
174
+ <BetweenTime
175
+ value={value}
176
+ onValueChange={setValue}
177
+ open={open}
178
+ onOpenChange={setOpen}
179
+ onConfirm={({ value }) => console.log('确认:', value)}
180
+ onCancel={() => console.log('取消')}
181
+ >
182
+ <Text>{value.length ? value.join(' 至 ') : '请选择'}</Text>
183
+ </BetweenTime>
184
+
185
+ {/* 外部控制打开 */}
186
+ <Button onPress={() => setOpen(true)}>打开选择器</Button>
187
+ </>
188
+ );
189
+ }
190
+ ```
191
+
192
+ ## 非受控模式
193
+
194
+ ```tsx
195
+ import { BetweenTime } from 'zkit-ui';
196
+
197
+ export function Demo() {
198
+ return (
199
+ <BetweenTime
200
+ defaultValue={['2024-01-01', '2024-12-31']}
201
+ onConfirm={({ value }) => console.log('确认:', value)}
202
+ >
203
+ <Text>点击选择时间</Text>
204
+ </BetweenTime>
205
+ );
206
+ }
207
+ ```
208
+
209
+ ## 懒加载:lazyContent
210
+
211
+ ```tsx
212
+ import { BetweenTime } from 'zkit-ui';
213
+
214
+ export function Demo() {
215
+ return (
216
+ // lazyContent 默认为 true,无需显式设置
217
+ <BetweenTime>
218
+ <Text>默认懒加载</Text>
219
+ </BetweenTime>
220
+ );
221
+ }
222
+ ```
223
+
224
+ 说明:
225
+
226
+ - `lazyContent` 默认为 `true`,滚轮内容会在弹窗动画完成后才挂载
227
+ - 可以避免弹窗打开时的卡顿,提升动画流畅度
228
+ - 如需立即渲染,可设置 `lazyContent={false}`
229
+
230
+ ## 自定义弹窗高度:drawerSize
231
+
232
+ ```tsx
233
+ import { BetweenTime } from 'zkit-ui';
234
+ import { wp } from 'zkit-tools';
235
+
236
+ export function Demo() {
237
+ return (
238
+ <BetweenTime drawerSize={wp(500)}>
239
+ <Text>自定义高度</Text>
240
+ </BetweenTime>
241
+ );
242
+ }
243
+ ```
244
+
245
+ ## 自定义单位名称:cellUnits
246
+
247
+ ```tsx
248
+ import { BetweenTime } from 'zkit-ui';
249
+
250
+ export function Demo() {
251
+ return (
252
+ <BetweenTime
253
+ type="day"
254
+ cellUnits={['Year', 'Month', 'Day']}
255
+ >
256
+ <Text>英文单位</Text>
257
+ </BetweenTime>
258
+ );
259
+ }
260
+ ```
261
+
262
+ 说明:
263
+
264
+ - 默认值:`['年', '月', '日', '时', '分', '秒']`
265
+ - 数组长度应与 `type` 对应的列数一致
266
+
267
+ ## 禁用状态:disabled
268
+
269
+ ```tsx
270
+ import { BetweenTime } from 'zkit-ui';
271
+
272
+ export function Demo() {
273
+ return (
274
+ <BetweenTime disabled>
275
+ <Text>禁用状态</Text>
276
+ </BetweenTime>
277
+ );
278
+ }
279
+ ```
280
+
281
+ ## 格式同步到值:formatSyncValue
282
+
283
+ ```tsx
284
+ import { BetweenTime } from 'zkit-ui';
285
+
286
+ export function Demo() {
287
+ const [value, setValue] = React.useState<string[]>([]);
288
+
289
+ return (
290
+ <BetweenTime
291
+ value={value}
292
+ onValueChange={setValue}
293
+ format="YYYY年MM月DD日"
294
+ formatSyncValue
295
+ >
296
+ <Text>格式同步到值</Text>
297
+ </BetweenTime>
298
+ );
299
+ // value 将是 ['2024年01月01日', '2024年12月31日'] 而不是 ['2024-01-01', '2024-12-31']
300
+ }
301
+ ```
302
+
303
+ 说明:
304
+
305
+ - 默认情况下,`modelValue` 输出标准格式(如 `YYYY-MM-DD`)
306
+ - 开启 `formatSyncValue` 后,`modelValue` 会使用 `format` 指定的格式
307
+ - 注意:开启后必须保证 `format` 输出仍是可解析的时间格式
308
+
309
+ ---
310
+
311
+ ## Props(完整清单)
312
+
313
+ ### 值相关
314
+
315
+ #### value
316
+
317
+ - **类型**:`string[]`
318
+ - **说明**:当前选中的时间区间值(受控模式)
319
+ - **示例**:`['2024-01-01', '2024-12-31']`
320
+
321
+ #### defaultValue
322
+
323
+ - **类型**:`string[]`
324
+ - **说明**:默认时间区间值(非受控模式)
325
+ - **示例**:`['2024-01-01', '2024-12-31']`
326
+
327
+ #### onValueChange
328
+
329
+ - **类型**:`(next: string[]) => void`
330
+ - **说明**:时间值变化时的回调函数
331
+
332
+ ### 弹窗控制
333
+
334
+ #### open
335
+
336
+ - **类型**:`boolean`
337
+ - **说明**:弹窗显示状态(受控模式)
338
+
339
+ #### defaultOpen
340
+
341
+ - **类型**:`boolean`
342
+ - **默认值**:`false`
343
+ - **说明**:默认弹窗显示状态(非受控模式)
344
+
345
+ #### onOpenChange
346
+
347
+ - **类型**:`(next: boolean) => void`
348
+ - **说明**:弹窗状态变化时的回调函数
349
+
350
+ #### title
351
+
352
+ - **类型**:`string`
353
+ - **默认值**:`'请选择时间'`
354
+ - **说明**:弹窗顶部标题
355
+
356
+ #### drawerSize
357
+
358
+ - **类型**:`string | number`
359
+ - **说明**:弹窗高度(数字或可解析为数字的字符串)
360
+ - **示例**:`500`、`'500'`
361
+
362
+ #### lazyContent
363
+
364
+ - **类型**:`boolean`
365
+ - **默认值**:`true`
366
+ - **说明**:是否懒加载弹窗内容(避免复杂内容影响开启动画)
367
+
368
+ ### 时间配置
369
+
370
+ #### type
371
+
372
+ - **类型**:`'year' | 'month' | 'day' | 'hour' | 'minute' | 'second'`
373
+ - **默认值**:`'day'`
374
+ - **说明**:时间精度级别,决定滚轮列数和输出格式
375
+ - **对应列数**:
376
+ - `year`:1 列
377
+ - `month`:2 列
378
+ - `day`:3 列
379
+ - `hour`:4 列
380
+ - `minute`:5 列
381
+ - `second`:6 列
382
+
383
+ #### start
384
+
385
+ - **类型**:`string`
386
+ - **说明**:可选时间范围的最小值(标准时间格式)
387
+ - **示例**:`'2020-01-01'`、`'2020-01-01 00:00:00'`
388
+
389
+ #### end
390
+
391
+ - **类型**:`string`
392
+ - **说明**:可选时间范围的最大值(标准时间格式)
393
+ - **示例**:`'2025-12-31'`、`'2025-12-31 23:59:59'`
394
+
395
+ #### format
396
+
397
+ - **类型**:`string`
398
+ - **默认值**:`'YYYY-MM-DD'`
399
+ - **说明**:时间格式化模板(用于 `modelStr` 输出和弹窗内显示)
400
+ - **示例**:`'YYYY-MM-DD'`、`'YYYY年MM月DD日'`、`'YYYY-MM-DD HH:mm:ss'`
401
+
402
+ #### formatSyncValue
403
+
404
+ - **类型**:`boolean`
405
+ - **默认值**:`false`
406
+ - **说明**:是否将 `format` 格式化后的值同步到 `modelValue`
407
+ - **注意**:开启后必须保证 `format` 输出仍是可解析的标准时间格式
408
+
409
+ #### cellUnits
410
+
411
+ - **类型**:`string[]`
412
+ - **默认值**:`['年', '月', '日', '时', '分', '秒']`
413
+ - **说明**:滚轮列头的单位名称
414
+
415
+ #### quickDate
416
+
417
+ - **类型**:`string[]`
418
+ - **说明**:快捷时间选择按钮配置
419
+ - **可选值**:
420
+ - `'d'`:今天
421
+ - `'w'`:本周
422
+ - `'m'`:本月
423
+ - `'y'`:本年
424
+ - `'q'`:本季度
425
+ - 数字字符串(如 `'7'`):最近 N 天
426
+ - **示例**:`['d', 'w', 'm', '7', '30']`
427
+
428
+ ### 状态
429
+
430
+ #### disabled
431
+
432
+ - **类型**:`boolean`
433
+ - **默认值**:`false`
434
+ - **说明**:禁用打开弹窗
435
+
436
+ ### 回调函数
437
+
438
+ #### onConfirm
439
+
440
+ - **类型**:`(payload: { value: string[] }) => void`
441
+ - **说明**:点击确认按钮时的回调
442
+ - **参数**:`payload.value` 为选中的时间区间数组
443
+
444
+ #### onCancel
445
+
446
+ - **类型**:`() => void`
447
+ - **说明**:点击取消按钮或遮罩关闭时的回调
448
+
449
+ ### 触发器
450
+
451
+ #### children
452
+
453
+ - **类型**:`React.ReactNode`
454
+ - **说明**:触发打开选择器的子节点
455
+ - **行为**:
456
+ - 如果 `children` 是带有 `onPress` 的组件,会自动合并点击事件
457
+ - 否则会包裹在 `Pressable` 中
458
+
459
+ ---
460
+
461
+ ## 标准时间格式
462
+
463
+ 组件内部支持以下标准输入格式:
464
+
465
+ | 格式 | 示例 |
466
+ |------|------|
467
+ | `YYYY` | `2024` |
468
+ | `YYYY-M` | `2024-1` |
469
+ | `YYYY-MM` | `2024-01` |
470
+ | `YYYY-M-D` | `2024-1-1` |
471
+ | `YYYY-MM-DD` | `2024-01-01` |
472
+ | `YYYY-MM-DDHH` | `2024-01-0108` |
473
+ | `YYYY-MM-DD HH` | `2024-01-01 08` |
474
+ | `YYYY-MM-DDHH:mm` | `2024-01-0108:30` |
475
+ | `YYYY-MM-DD HH:mm` | `2024-01-01 08:30` |
476
+ | `YYYY-MM-DDHH:mm:ss` | `2024-01-0108:30:00` |
477
+ | `YYYY-MM-DD HH:mm:ss` | `2024-01-01 08:30:00` |
478
+
479
+ ---
480
+
481
+ ## 性能优化说明
482
+
483
+ BetweenTime 组件已针对性能进行了以下优化:
484
+
485
+ 1. **延迟挂载**:使用 `InteractionManager.runAfterInteractions` 延迟挂载滚轮内容,避免弹窗动画卡顿
486
+ 2. **渐变遮罩**:使用静态 `LinearGradient` 替代逐项动画,减少动画计算开销
487
+ 3. **ScrollView 替代 FlatList**:对于数量有限的选项,直接渲染比虚拟化更高效
488
+ 4. **数据缓存**:缓存常用的选项数组,避免重复创建
489
+
490
+ 建议在低端设备上开启 `lazyContent` 以获得最佳体验。