@seakoi/native-ui 1.1.2 → 1.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.
Files changed (224) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/commonjs/components/base/carousel/carousel-indicator.js +56 -0
  3. package/dist/commonjs/components/base/carousel/carousel-slides.js +140 -0
  4. package/dist/commonjs/components/base/carousel/carousel.js +114 -122
  5. package/dist/commonjs/components/base/carousel/hooks/index.js +0 -14
  6. package/dist/commonjs/components/base/carousel/hooks/use-carousel-index.js +16 -13
  7. package/dist/commonjs/components/base/carousel/hooks/use-carousel-lifecycle.js +6 -2
  8. package/dist/commonjs/components/base/carousel/hooks/use-carousel-pan-responder.js +40 -12
  9. package/dist/commonjs/components/base/carousel/hooks/use-carousel-position.js +6 -2
  10. package/dist/commonjs/components/base/carousel/index.js +1 -15
  11. package/dist/commonjs/components/base/carousel/style/index.js +12 -0
  12. package/dist/commonjs/components/base/date-picker/date-picker.js +56 -44
  13. package/dist/commonjs/components/base/date-picker/date-range-picker.js +142 -50
  14. package/dist/commonjs/components/base/date-picker/style/index.js +15 -0
  15. package/dist/commonjs/components/base/date-picker-view/date-picker-view.js +19 -53
  16. package/dist/commonjs/components/base/date-picker-view/index.js +0 -22
  17. package/dist/commonjs/components/base/index.js +30 -8
  18. package/dist/commonjs/components/base/picker/index.js +26 -4
  19. package/dist/commonjs/components/base/picker/picker-content.js +60 -0
  20. package/dist/commonjs/components/base/picker/picker-context.js +9 -0
  21. package/dist/commonjs/components/base/picker/picker-field.js +37 -0
  22. package/dist/commonjs/components/base/picker/picker.js +22 -96
  23. package/dist/commonjs/components/base/picker/style/index.js +1 -3
  24. package/dist/commonjs/components/base/picker-backup/base-picker-container.js +50 -0
  25. package/dist/commonjs/components/base/picker-backup/index.js +27 -0
  26. package/dist/commonjs/components/base/picker-backup/picker-backup.js +75 -0
  27. package/dist/commonjs/components/base/picker-backup/picker-copy.js +106 -0
  28. package/dist/commonjs/components/base/{picker → picker-backup}/picker-trigger.js +5 -5
  29. package/dist/commonjs/components/base/picker-backup/style/index.js +19 -0
  30. package/dist/commonjs/components/base/picker-backup/utils.js +53 -0
  31. package/dist/commonjs/components/base/picker-view/picker-view-column.js +15 -0
  32. package/dist/commonjs/components/base/picker-view/picker-view.js +4 -4
  33. package/dist/commonjs/components/base/tag/index.js +20 -0
  34. package/dist/commonjs/components/base/tag/style/index.js +89 -0
  35. package/dist/commonjs/components/base/tag/tag-context.js +12 -0
  36. package/dist/commonjs/components/base/tag/tag-group.js +35 -0
  37. package/dist/commonjs/components/base/tag/tag.js +47 -0
  38. package/dist/commonjs/components/base/tag/types.js +5 -0
  39. package/dist/module/components/base/carousel/carousel-indicator.js +51 -0
  40. package/dist/module/components/base/carousel/carousel-slides.js +135 -0
  41. package/dist/module/components/base/carousel/carousel.js +116 -124
  42. package/dist/module/components/base/carousel/hooks/index.js +0 -2
  43. package/dist/module/components/base/carousel/hooks/use-carousel-index.js +15 -11
  44. package/dist/module/components/base/carousel/hooks/use-carousel-lifecycle.js +6 -2
  45. package/dist/module/components/base/carousel/hooks/use-carousel-pan-responder.js +40 -11
  46. package/dist/module/components/base/carousel/hooks/use-carousel-position.js +5 -1
  47. package/dist/module/components/base/carousel/index.js +1 -5
  48. package/dist/module/components/base/carousel/style/index.js +12 -0
  49. package/dist/module/components/base/date-picker/date-picker.js +60 -48
  50. package/dist/module/components/base/date-picker/date-range-picker.js +146 -54
  51. package/dist/module/components/base/date-picker/style/index.js +11 -0
  52. package/dist/module/components/base/date-picker-view/date-picker-view.js +23 -57
  53. package/dist/module/components/base/date-picker-view/index.js +1 -3
  54. package/dist/module/components/base/index.js +2 -0
  55. package/dist/module/components/base/picker/index.js +9 -1
  56. package/dist/module/components/base/picker/picker-content.js +54 -0
  57. package/dist/module/components/base/picker/picker-context.js +4 -0
  58. package/dist/module/components/base/picker/picker-field.js +32 -0
  59. package/dist/module/components/base/picker/picker.js +25 -99
  60. package/dist/module/components/base/picker/style/index.js +1 -3
  61. package/dist/module/components/base/picker-backup/base-picker-container.js +44 -0
  62. package/dist/module/components/base/picker-backup/index.js +4 -0
  63. package/dist/module/components/base/picker-backup/picker-backup.js +69 -0
  64. package/dist/module/components/base/picker-backup/picker-copy.js +101 -0
  65. package/dist/module/components/base/{picker → picker-backup}/picker-trigger.js +2 -2
  66. package/dist/module/components/base/picker-backup/style/index.js +15 -0
  67. package/dist/module/components/base/picker-backup/utils.js +48 -0
  68. package/dist/module/components/base/picker-view/picker-view-column.js +15 -0
  69. package/dist/module/components/base/picker-view/picker-view.js +4 -4
  70. package/dist/module/components/base/tag/index.js +5 -0
  71. package/dist/module/components/base/tag/style/index.js +85 -0
  72. package/dist/module/components/base/tag/tag-context.js +8 -0
  73. package/dist/module/components/base/tag/tag-group.js +29 -0
  74. package/dist/module/components/base/tag/tag.js +41 -0
  75. package/dist/module/components/base/tag/types.js +3 -0
  76. package/dist/typescript/components/base/carousel/carousel-indicator.d.ts +42 -0
  77. package/dist/typescript/components/base/carousel/carousel-indicator.d.ts.map +1 -0
  78. package/dist/typescript/components/base/carousel/carousel-slides.d.ts +49 -0
  79. package/dist/typescript/components/base/carousel/carousel-slides.d.ts.map +1 -0
  80. package/dist/typescript/components/base/carousel/carousel.d.ts +16 -11
  81. package/dist/typescript/components/base/carousel/carousel.d.ts.map +1 -1
  82. package/dist/typescript/components/base/carousel/hooks/index.d.ts +0 -2
  83. package/dist/typescript/components/base/carousel/hooks/index.d.ts.map +1 -1
  84. package/dist/typescript/components/base/carousel/hooks/use-carousel-index.d.ts.map +1 -1
  85. package/dist/typescript/components/base/carousel/hooks/use-carousel-lifecycle.d.ts.map +1 -1
  86. package/dist/typescript/components/base/carousel/hooks/use-carousel-pan-responder.d.ts.map +1 -1
  87. package/dist/typescript/components/base/carousel/hooks/use-carousel-position.d.ts.map +1 -1
  88. package/dist/typescript/components/base/carousel/index.d.ts +1 -4
  89. package/dist/typescript/components/base/carousel/index.d.ts.map +1 -1
  90. package/dist/typescript/components/base/carousel/style/index.d.ts +12 -0
  91. package/dist/typescript/components/base/carousel/style/index.d.ts.map +1 -1
  92. package/dist/typescript/components/base/carousel/types.d.ts +8 -17
  93. package/dist/typescript/components/base/carousel/types.d.ts.map +1 -1
  94. package/dist/typescript/components/base/date-picker/date-picker.d.ts +4 -2
  95. package/dist/typescript/components/base/date-picker/date-picker.d.ts.map +1 -1
  96. package/dist/typescript/components/base/date-picker/date-range-picker.d.ts +12 -3
  97. package/dist/typescript/components/base/date-picker/date-range-picker.d.ts.map +1 -1
  98. package/dist/typescript/components/base/date-picker/style/index.d.ts +9 -0
  99. package/dist/typescript/components/base/date-picker/style/index.d.ts.map +1 -0
  100. package/dist/typescript/components/base/date-picker-view/date-picker-view.d.ts +1 -6
  101. package/dist/typescript/components/base/date-picker-view/date-picker-view.d.ts.map +1 -1
  102. package/dist/typescript/components/base/date-picker-view/index.d.ts +0 -2
  103. package/dist/typescript/components/base/date-picker-view/index.d.ts.map +1 -1
  104. package/dist/typescript/components/base/date-picker-view/types.d.ts +1 -1
  105. package/dist/typescript/components/base/index.d.ts +2 -0
  106. package/dist/typescript/components/base/index.d.ts.map +1 -1
  107. package/dist/typescript/components/base/picker/index.d.ts +7 -1
  108. package/dist/typescript/components/base/picker/index.d.ts.map +1 -1
  109. package/dist/typescript/components/base/picker/picker-content.d.ts +15 -0
  110. package/dist/typescript/components/base/picker/picker-content.d.ts.map +1 -0
  111. package/dist/typescript/components/base/picker/picker-context.d.ts +18 -0
  112. package/dist/typescript/components/base/picker/picker-context.d.ts.map +1 -0
  113. package/dist/typescript/components/base/picker/picker-field.d.ts +10 -0
  114. package/dist/typescript/components/base/picker/picker-field.d.ts.map +1 -0
  115. package/dist/typescript/components/base/picker/picker.d.ts +13 -11
  116. package/dist/typescript/components/base/picker/picker.d.ts.map +1 -1
  117. package/dist/typescript/components/base/picker/style/index.d.ts +0 -2
  118. package/dist/typescript/components/base/picker/style/index.d.ts.map +1 -1
  119. package/dist/typescript/components/base/picker-backup/base-picker-container.d.ts +15 -0
  120. package/dist/typescript/components/base/picker-backup/base-picker-container.d.ts.map +1 -0
  121. package/dist/typescript/components/base/picker-backup/index.d.ts +3 -0
  122. package/dist/typescript/components/base/picker-backup/index.d.ts.map +1 -0
  123. package/dist/typescript/components/base/picker-backup/picker-backup.d.ts +26 -0
  124. package/dist/typescript/components/base/picker-backup/picker-backup.d.ts.map +1 -0
  125. package/dist/typescript/components/base/picker-backup/picker-copy.d.ts +13 -0
  126. package/dist/typescript/components/base/picker-backup/picker-copy.d.ts.map +1 -0
  127. package/dist/typescript/components/base/picker-backup/picker-trigger.d.ts.map +1 -0
  128. package/dist/typescript/components/base/picker-backup/style/index.d.ts +13 -0
  129. package/dist/typescript/components/base/picker-backup/style/index.d.ts.map +1 -0
  130. package/dist/typescript/components/base/picker-backup/utils.d.ts +8 -0
  131. package/dist/typescript/components/base/picker-backup/utils.d.ts.map +1 -0
  132. package/dist/typescript/components/base/picker-view/picker-view-column.d.ts.map +1 -1
  133. package/dist/typescript/components/base/picker-view/utils/picker.d.ts +3 -3
  134. package/dist/typescript/components/base/picker-view/utils/picker.d.ts.map +1 -1
  135. package/dist/typescript/components/base/tag/index.d.ts +5 -0
  136. package/dist/typescript/components/base/tag/index.d.ts.map +1 -0
  137. package/dist/typescript/components/base/tag/style/index.d.ts +61 -0
  138. package/dist/typescript/components/base/tag/style/index.d.ts.map +1 -0
  139. package/dist/typescript/components/base/tag/tag-context.d.ts +3 -0
  140. package/dist/typescript/components/base/tag/tag-context.d.ts.map +1 -0
  141. package/dist/typescript/components/base/tag/tag-group.d.ts +4 -0
  142. package/dist/typescript/components/base/tag/tag-group.d.ts.map +1 -0
  143. package/dist/typescript/components/base/tag/tag.d.ts +4 -0
  144. package/dist/typescript/components/base/tag/tag.d.ts.map +1 -0
  145. package/dist/typescript/components/base/tag/types.d.ts +48 -0
  146. package/dist/typescript/components/base/tag/types.d.ts.map +1 -0
  147. package/package.json +12 -4
  148. package/src/components/base/carousel/carousel-indicator.tsx +80 -0
  149. package/src/components/base/carousel/carousel-slides.tsx +177 -0
  150. package/src/components/base/carousel/carousel.tsx +108 -118
  151. package/src/components/base/carousel/hooks/index.ts +0 -2
  152. package/src/components/base/carousel/hooks/use-carousel-index.ts +13 -9
  153. package/src/components/base/carousel/hooks/use-carousel-lifecycle.ts +4 -3
  154. package/src/components/base/carousel/hooks/use-carousel-pan-responder.ts +40 -16
  155. package/src/components/base/carousel/hooks/use-carousel-position.ts +4 -1
  156. package/src/components/base/carousel/index.ts +1 -3
  157. package/src/components/base/carousel/style/index.ts +12 -0
  158. package/src/components/base/carousel/types.ts +8 -21
  159. package/src/components/base/date-picker/date-picker.tsx +64 -61
  160. package/src/components/base/date-picker/date-range-picker.tsx +178 -70
  161. package/src/components/base/date-picker/style/index.ts +10 -0
  162. package/src/components/base/date-picker-view/date-picker-view.tsx +21 -68
  163. package/src/components/base/date-picker-view/index.ts +0 -2
  164. package/src/components/base/date-picker-view/types.ts +1 -1
  165. package/src/components/base/index.ts +2 -0
  166. package/src/components/base/picker/index.ts +11 -1
  167. package/src/components/base/picker/picker-content.tsx +75 -0
  168. package/src/components/base/picker/picker-context.ts +19 -0
  169. package/src/components/base/picker/picker-field.tsx +50 -0
  170. package/src/components/base/picker/picker.tsx +38 -114
  171. package/src/components/base/picker/style/index.ts +0 -2
  172. package/src/components/base/picker-backup/base-picker-container.tsx +55 -0
  173. package/src/components/base/picker-backup/index.ts +2 -0
  174. package/src/components/base/picker-backup/picker-backup.tsx +110 -0
  175. package/src/components/base/picker-backup/picker-copy.tsx +125 -0
  176. package/src/components/base/{picker → picker-backup}/picker-trigger.tsx +2 -2
  177. package/src/components/base/picker-backup/style/index.ts +14 -0
  178. package/src/components/base/picker-backup/utils.ts +62 -0
  179. package/src/components/base/picker-view/picker-view-column.tsx +20 -0
  180. package/src/components/base/picker-view/picker-view.tsx +4 -4
  181. package/src/components/base/picker-view/utils/picker.ts +3 -5
  182. package/src/components/base/tag/index.ts +5 -0
  183. package/src/components/base/tag/style/index.tsx +84 -0
  184. package/src/components/base/tag/tag-context.ts +9 -0
  185. package/src/components/base/tag/tag-group.tsx +31 -0
  186. package/src/components/base/tag/tag.tsx +50 -0
  187. package/src/components/base/tag/types.ts +71 -0
  188. package/dist/commonjs/components/base/carousel/carousel-item.js +0 -45
  189. package/dist/commonjs/components/base/carousel/constants.js +0 -25
  190. package/dist/commonjs/components/base/carousel/hooks/use-carousel-indicator.js +0 -63
  191. package/dist/commonjs/components/base/carousel/hooks/use-carousel-slides.js +0 -95
  192. package/dist/commonjs/components/base/carousel/utils.js +0 -63
  193. package/dist/commonjs/components/base/date-picker-view/date-range-picker-view.js +0 -145
  194. package/dist/commonjs/components/base/date-picker-view/date-time-picker.js +0 -39
  195. package/dist/module/components/base/carousel/carousel-item.js +0 -40
  196. package/dist/module/components/base/carousel/constants.js +0 -21
  197. package/dist/module/components/base/carousel/hooks/use-carousel-indicator.js +0 -58
  198. package/dist/module/components/base/carousel/hooks/use-carousel-slides.js +0 -90
  199. package/dist/module/components/base/carousel/utils.js +0 -55
  200. package/dist/module/components/base/date-picker-view/date-range-picker-view.js +0 -138
  201. package/dist/module/components/base/date-picker-view/date-time-picker.js +0 -34
  202. package/dist/typescript/components/base/carousel/carousel-item.d.ts +0 -26
  203. package/dist/typescript/components/base/carousel/carousel-item.d.ts.map +0 -1
  204. package/dist/typescript/components/base/carousel/constants.d.ts +0 -17
  205. package/dist/typescript/components/base/carousel/constants.d.ts.map +0 -1
  206. package/dist/typescript/components/base/carousel/hooks/use-carousel-indicator.d.ts +0 -37
  207. package/dist/typescript/components/base/carousel/hooks/use-carousel-indicator.d.ts.map +0 -1
  208. package/dist/typescript/components/base/carousel/hooks/use-carousel-slides.d.ts +0 -51
  209. package/dist/typescript/components/base/carousel/hooks/use-carousel-slides.d.ts.map +0 -1
  210. package/dist/typescript/components/base/carousel/utils.d.ts +0 -25
  211. package/dist/typescript/components/base/carousel/utils.d.ts.map +0 -1
  212. package/dist/typescript/components/base/date-picker-view/date-range-picker-view.d.ts +0 -26
  213. package/dist/typescript/components/base/date-picker-view/date-range-picker-view.d.ts.map +0 -1
  214. package/dist/typescript/components/base/date-picker-view/date-time-picker.d.ts +0 -3
  215. package/dist/typescript/components/base/date-picker-view/date-time-picker.d.ts.map +0 -1
  216. package/dist/typescript/components/base/picker/picker-trigger.d.ts.map +0 -1
  217. package/src/components/base/carousel/carousel-item.tsx +0 -35
  218. package/src/components/base/carousel/constants.ts +0 -19
  219. package/src/components/base/carousel/hooks/use-carousel-indicator.tsx +0 -84
  220. package/src/components/base/carousel/hooks/use-carousel-slides.tsx +0 -131
  221. package/src/components/base/carousel/utils.ts +0 -55
  222. package/src/components/base/date-picker-view/date-range-picker-view.tsx +0 -191
  223. package/src/components/base/date-picker-view/date-time-picker.tsx +0 -34
  224. /package/dist/typescript/components/base/{picker → picker-backup}/picker-trigger.d.ts +0 -0
@@ -55,8 +55,8 @@ export const PickerView: React.FC<PickerViewProps> = ({
55
55
  }, [dataType, columns, value]);
56
56
 
57
57
  // 保存 columnDefaultValues 到 ref,供 handleChange 使用
58
- const columnDefaultValuesRef = useRef<PickerValue[]>(columnDefaultValues);
59
- columnDefaultValuesRef.current = columnDefaultValues;
58
+ // const columnDefaultValuesRef = useRef<PickerValue[]>(columnDefaultValues);
59
+ // columnDefaultValuesRef.current = columnDefaultValues;
60
60
 
61
61
  /** 获取容器实际高度 */
62
62
  const handleLayout = useCallback((event: LayoutChangeEvent) => {
@@ -88,7 +88,7 @@ export const PickerView: React.FC<PickerViewProps> = ({
88
88
  case 'multiple': {
89
89
  const newValues = [...value];
90
90
 
91
- columnDefaultValuesRef.current.forEach((item, i) => {
91
+ columnDefaultValues.forEach((item, i) => {
92
92
  if (isNil(newValues[i])) {
93
93
  newValues[i] = item;
94
94
  }
@@ -168,7 +168,7 @@ export const PickerView: React.FC<PickerViewProps> = ({
168
168
 
169
169
  if (!isControlled && !isNoDefaultValue) {
170
170
  if (dataType === 'multiple') {
171
- return columnDefaultValuesRef.current[index];
171
+ return columnDefaultValues[index];
172
172
  }
173
173
 
174
174
  // 真的没有就默认第一个选项
@@ -4,7 +4,6 @@ import type {
4
4
  PickerOptionCascade,
5
5
  PickerOptionType,
6
6
  PickerValue,
7
- PickerViewProps,
8
7
  } from '../types';
9
8
 
10
9
  export const getVisibleItemCount = (n: number) => {
@@ -161,7 +160,7 @@ export const findDefaultValue = (value: PickerValue, options: PickerOption[]) =>
161
160
  */
162
161
  export const findOptionsByValue = (
163
162
  value: PickerValue[],
164
- columns: PickerViewProps['columns'],
163
+ columns: Column[],
165
164
  ): PickerOption[] => {
166
165
  if (!value?.length) return [];
167
166
 
@@ -192,6 +191,7 @@ export const findOptionsByValue = (
192
191
  default: {
193
192
  const options = columns as PickerOption[];
194
193
  const option = options.find(item => item.value === value[0]);
194
+
195
195
  return option ? [option] : [];
196
196
  }
197
197
  }
@@ -200,9 +200,7 @@ export const findOptionsByValue = (
200
200
  /**
201
201
  * 获取 columns 的默认值(每列的第一个选项)
202
202
  */
203
- export const getDefaultValues = (
204
- columns: PickerViewProps['columns'],
205
- ): PickerValue[] => {
203
+ export const getDefaultValues = (columns: Column[]): PickerValue[] => {
206
204
  const dataType = getDataType(columns);
207
205
 
208
206
  switch (dataType) {
@@ -0,0 +1,5 @@
1
+ import { Tag } from './tag';
2
+ export * from './tag';
3
+ export type * from './types';
4
+
5
+ export default Tag;
@@ -0,0 +1,84 @@
1
+ import { createThemedStyles } from '#native-provider';
2
+
3
+ export const useTagStyles = createThemedStyles((theme, props) => {
4
+ const { themeColor = 'primary' } = props;
5
+ const BASE_COLOR_MAP = {
6
+ primary: {
7
+ baseColor: theme.palette.brand7,
8
+ lightColor: theme.palette.brand1,
9
+ },
10
+ danger: {
11
+ baseColor: theme.palette.error6,
12
+ lightColor: theme.palette.error1,
13
+ },
14
+ default: {
15
+ baseColor: theme.palette.gray6,
16
+ lightColor: theme.palette.gray2,
17
+ },
18
+ };
19
+ const Color = BASE_COLOR_MAP[themeColor];
20
+
21
+ return {
22
+ tag: {},
23
+ large: {
24
+ paddingHorizontal: 8,
25
+ paddingVertical: 4,
26
+ borderRadius: 4,
27
+ },
28
+ medium: {
29
+ paddingHorizontal: 6,
30
+ paddingVertical: 2,
31
+ borderRadius: 2,
32
+ },
33
+ small: {
34
+ paddingHorizontal: 4,
35
+ paddingVertical: 1.5,
36
+ borderRadius: 1.5,
37
+ },
38
+ disabled: {
39
+ opacity: 0.5,
40
+ },
41
+ 'font-small': {
42
+ fontSize: 10,
43
+ },
44
+ 'font-medium': {
45
+ fontSize: 12,
46
+ },
47
+ 'font-large': {
48
+ fontSize: 14,
49
+ },
50
+ filled: {
51
+ backgroundColor: Color.lightColor,
52
+ },
53
+ 'text-filled': {
54
+ color: Color.baseColor,
55
+ },
56
+ outlined: {
57
+ borderColor: Color.baseColor,
58
+ borderWidth: 0.5,
59
+ },
60
+ 'text-outlined': {
61
+ color: Color.baseColor,
62
+ },
63
+ solid: {
64
+ backgroundColor: Color.baseColor,
65
+ },
66
+ 'text-solid': {
67
+ color: '#fff',
68
+ },
69
+ };
70
+ });
71
+
72
+ export const useTagGroupStyles = createThemedStyles(() => {
73
+ return {
74
+ container: {
75
+ flexDirection: 'row',
76
+ alignItems: 'center',
77
+ flexWrap: 'wrap',
78
+ },
79
+ vertical: {
80
+ flexDirection: 'column',
81
+ alignItems: 'stretch',
82
+ },
83
+ };
84
+ });
@@ -0,0 +1,9 @@
1
+ import { createContext } from 'react';
2
+
3
+ import type { TagContextValue } from './types';
4
+
5
+ export const TagContext = createContext<TagContextValue>({
6
+ size: 'medium',
7
+ disabled: false,
8
+ });
9
+ TagContext.displayName = 'TagContext';
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+
4
+ import { useTagGroupStyles } from './style';
5
+ import { TagContext } from './tag-context';
6
+ import type { TagGroupProps } from './types';
7
+
8
+ export const TagGroup: React.FC<TagGroupProps> = ({
9
+ children,
10
+ direction = 'horizontal',
11
+ gap = 16,
12
+ style,
13
+ size,
14
+ disabled,
15
+ }) => {
16
+ const groupStyles = useTagGroupStyles();
17
+ return (
18
+ <TagContext.Provider value={{ size, disabled }}>
19
+ <View
20
+ style={[
21
+ groupStyles.container,
22
+ direction === 'vertical' && groupStyles.vertical,
23
+ gap > 0 && { gap },
24
+ style,
25
+ ]}
26
+ >
27
+ {children}
28
+ </View>
29
+ </TagContext.Provider>
30
+ );
31
+ };
@@ -0,0 +1,50 @@
1
+ import React, { use, useMemo } from 'react';
2
+ import { Pressable } from 'react-native';
3
+
4
+ import { Text } from '#components/base';
5
+
6
+ import { useTagStyles } from './style';
7
+ import { TagContext } from './tag-context';
8
+ import { type TagProps } from './types';
9
+ export const Tag: React.FC<TagProps> = ({
10
+ text,
11
+ variant = 'solid',
12
+ style,
13
+ theme = 'primary',
14
+ disabled: customDisabled,
15
+ size,
16
+ child,
17
+ textStyle,
18
+ onPress,
19
+ }) => {
20
+ const context = use(TagContext);
21
+ const mergedDisabled = customDisabled ?? context.disabled ?? false;
22
+ const mergedSize = size ?? context.size ?? 'medium';
23
+ const styles = useTagStyles({ variant, themeColor: theme, mergedSize });
24
+ const tagStyle = useMemo(() => {
25
+ return [styles.tag, styles[variant], styles[mergedSize], style];
26
+ }, [mergedSize, style, variant, styles]);
27
+
28
+ const tagNode: React.ReactNode = (
29
+ <Pressable
30
+ style={tagStyle}
31
+ onPress={mergedDisabled ? undefined : onPress}
32
+ disabled={mergedDisabled}
33
+ >
34
+ {child ? (
35
+ child
36
+ ) : (
37
+ <Text
38
+ style={[
39
+ styles[`text-${variant}`],
40
+ styles[`font-${mergedSize}`],
41
+ textStyle,
42
+ ]}
43
+ >
44
+ {text}
45
+ </Text>
46
+ )}
47
+ </Pressable>
48
+ );
49
+ return tagNode;
50
+ };
@@ -0,0 +1,71 @@
1
+ import type { PropsWithChildren } from 'react';
2
+ import type {
3
+ GestureResponderEvent,
4
+ StyleProp,
5
+ TextStyle,
6
+ ViewStyle,
7
+ } from 'react-native';
8
+
9
+ import type { AnyObject } from '#shared/utils/types';
10
+
11
+ export interface TagProps {
12
+ /** 标签文本 */
13
+ text?: string;
14
+
15
+ /** 标签主题色 */
16
+ color?: string;
17
+
18
+ /** 结构形态 */
19
+ variant?: 'filled' | 'solid' | 'outlined';
20
+
21
+ /** 标签样式 */
22
+ style?: StyleProp<ViewStyle>;
23
+
24
+ /** 标签内容样式 */
25
+ textStyle?: StyleProp<TextStyle>;
26
+
27
+ /** 标签主题色 */
28
+ theme?: 'primary' | 'default' | 'danger';
29
+
30
+ /** 标签尺寸 */
31
+ size?: 'small' | 'medium' | 'large';
32
+
33
+ /** 标签是否可关闭 */
34
+ closable?: boolean;
35
+
36
+ /** 标签图标 */
37
+ icon?: React.ReactElement<AnyObject>;
38
+
39
+ /** 标签内容 */
40
+ child?: React.ReactNode;
41
+
42
+ /** 标签跳转链接 */
43
+ href?: string;
44
+
45
+ /** 标签是否禁用 */
46
+ disabled?: boolean;
47
+
48
+ /** 标签跳转链接目标 */
49
+ target?: '_blank' | '_self' | '_parent' | '_top';
50
+
51
+ /** 标签点击 事件 */
52
+ onPress?: (event: GestureResponderEvent) => void;
53
+ }
54
+
55
+ export interface TagGroupProps extends PropsWithChildren, TagContextValue {
56
+ /** 容器样式 */
57
+ style?: StyleProp<ViewStyle>;
58
+
59
+ /** 容器样式 */
60
+ gap?: number;
61
+
62
+ /** 容器样式 */
63
+ direction?: 'horizontal' | 'vertical';
64
+ }
65
+
66
+ export interface TagContextValue {
67
+ /** 按钮标签的尺寸 */
68
+ size?: 'small' | 'medium' | 'large';
69
+ /** 按钮标签的禁用状态 */
70
+ disabled?: boolean;
71
+ }
@@ -1,45 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.CarouselItem = void 0;
7
- var _reactNative = require("react-native");
8
- var _jsxRuntime = require("react/jsx-runtime");
9
- const FULL_SIZE_STYLE = {
10
- height: '100%',
11
- width: '100%'
12
- };
13
-
14
- /**
15
- * 轮播项组件
16
- *
17
- * 用于包裹轮播图中的每一项内容,自动填充父容器的宽高。
18
- *
19
- * @example
20
- * ```tsx
21
- * <Carousel>
22
- * <Carousel.Item>
23
- * <Image source={image1} />
24
- * </Carousel.Item>
25
- * <Carousel.Item>
26
- * <Image source={image2} />
27
- * </Carousel.Item>
28
- * </Carousel>
29
- * ```
30
- *
31
- * @param props - 组件属性
32
- * @param props.children - 轮播项内容
33
- * @param props.style - 容器样式
34
- * @returns 轮播项组件
35
- */
36
- const CarouselItem = ({
37
- children,
38
- style
39
- }) => {
40
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
41
- style: [FULL_SIZE_STYLE, style],
42
- children: children
43
- });
44
- };
45
- exports.CarouselItem = CarouselItem;
@@ -1,25 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.VELOCITY_PROJECTION_FACTOR = exports.RUBBERBAND_DAMPING = exports.GESTURE_MIN_DISTANCE = exports.CAROUSEL_ANIMATION_DURATION = void 0;
7
- /**
8
- * 轮播图动画时长(毫秒)
9
- */
10
- const CAROUSEL_ANIMATION_DURATION = exports.CAROUSEL_ANIMATION_DURATION = 300;
11
-
12
- /**
13
- * 橡皮筋效果阻尼系数
14
- */
15
- const RUBBERBAND_DAMPING = exports.RUBBERBAND_DAMPING = 0.35;
16
-
17
- /**
18
- * 手势识别最小移动距离(像素)
19
- */
20
- const GESTURE_MIN_DISTANCE = exports.GESTURE_MIN_DISTANCE = 5;
21
-
22
- /**
23
- * 速度投影系数(用于计算惯性滑动距离)
24
- */
25
- const VELOCITY_PROJECTION_FACTOR = exports.VELOCITY_PROJECTION_FACTOR = 2000;
@@ -1,63 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useCarouselIndicator = void 0;
7
- var _ahooks = require("ahooks");
8
- var _reactNative = require("react-native");
9
- var _jsxRuntime = require("react/jsx-runtime");
10
- /**
11
- * 轮播图指示器渲染 Hook
12
- *
13
- * 负责渲染轮播图底部的指示器(小圆点),支持自定义指示器或使用默认样式。
14
- * 当轮播项总数小于等于 1 时,不显示指示器。
15
- *
16
- * @param params - Hook 参数配置
17
- * @param params.indicator - 指示器配置(false 表示不显示,函数表示自定义渲染)
18
- * @param params.indicatorProps - 指示器属性配置(颜色、样式)
19
- * @param params.total - 轮播项总数
20
- * @param params.current - 当前激活的索引
21
- * @param params.activeColor - 激活状态的指示器颜色
22
- * @param params.inactiveColor - 非激活状态的指示器颜色
23
- * @param params.styles - 指示器样式对象
24
- *
25
- * @returns Hook 返回值
26
- * @returns renderIndicator - 渲染指示器的方法,返回 ReactNode 或 null
27
- */
28
- const useCarouselIndicator = params => {
29
- const {
30
- indicator,
31
- indicatorProps,
32
- total,
33
- current,
34
- activeColor,
35
- inactiveColor,
36
- styles
37
- } = params;
38
- const renderIndicator = (0, _ahooks.useMemoizedFn)(() => {
39
- if (indicator === false) return null;
40
- if (total <= 1) return null;
41
- if (typeof indicator === 'function') {
42
- return indicator(total, current);
43
- }
44
- const dotActiveColor = indicatorProps?.color ?? activeColor;
45
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
46
- style: _reactNative.StyleSheet.flatten([styles.indicatorContainer, indicatorProps?.style]),
47
- children: Array.from({
48
- length: total
49
- }, (_, i) => {
50
- const isActive = i === current;
51
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
52
- style: _reactNative.StyleSheet.flatten([styles.indicatorDot, {
53
- backgroundColor: isActive ? dotActiveColor : inactiveColor
54
- }, isActive && styles.indicatorDotActive])
55
- }, i);
56
- })
57
- });
58
- });
59
- return {
60
- renderIndicator
61
- };
62
- };
63
- exports.useCarouselIndicator = useCarouselIndicator;
@@ -1,95 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useCarouselSlides = void 0;
7
- var _ahooks = require("ahooks");
8
- var _lodashEs = require("lodash-es");
9
- var _react = require("react");
10
- var _reactNative = require("react-native");
11
- var _utils = require("../utils.js");
12
- var _jsxRuntime = require("react/jsx-runtime");
13
- /**
14
- * 轮播图滑块渲染 Hook
15
- *
16
- * 负责渲染轮播图的滑块内容,支持静态子组件和 render prop 两种方式。
17
- * 实现虚拟渲染优化,仅渲染可见范围内的滑块,并处理循环播放时的克隆逻辑。
18
- * 为虚拟渲染添加前后占位空间,确保滚动位置正确。
19
- *
20
- * @param params - Hook 参数配置
21
- * @param params.children - 轮播项内容(静态子组件或 render prop 函数)
22
- * @param params.total - 轮播项总数
23
- * @param params.virtualRange - 虚拟渲染范围(start、end、isVirtual)
24
- * @param params.loopEnabled - 是否启用循环播放
25
- * @param params.clonesBefore - 循环播放时前置克隆节点数量
26
- * @param params.slideWrapperStyle - 滑块包装器样式
27
- * @param params.spacerStyles - 虚拟渲染占位空间样式
28
- * @param params.slideStyles - 滑块样式对象
29
- *
30
- * @returns Hook 返回值
31
- * @returns staticSlides - 静态滑块数组(仅在非 render prop 模式下有值)
32
- * @returns renderSlides - 渲染滑块的方法,返回 ReactNode 或 null
33
- */
34
- const useCarouselSlides = params => {
35
- const {
36
- children,
37
- total,
38
- virtualRange,
39
- loopEnabled,
40
- clonesBefore,
41
- slideWrapperStyle,
42
- spacerStyles,
43
- slideStyles
44
- } = params;
45
- const staticSlides = (0, _react.useMemo)(() => {
46
- if ((0, _utils.isRenderPropChildren)(children)) return [];
47
- return (0, _utils.normalizeChildren)(children, total);
48
- }, [children, total]);
49
- const getIndexFromExtIndex = (0, _ahooks.useMemoizedFn)(extIndex => {
50
- if (!loopEnabled) return (0, _lodashEs.clamp)(extIndex, 0, total - 1);
51
- if (extIndex < clonesBefore) {
52
- return ((extIndex - clonesBefore) % total + total) % total;
53
- }
54
- if (extIndex >= clonesBefore + total) {
55
- return (extIndex - clonesBefore - total) % total;
56
- }
57
- return extIndex - clonesBefore;
58
- });
59
- const renderSlides = (0, _ahooks.useMemoizedFn)(() => {
60
- if (!virtualRange) return null;
61
- const {
62
- start,
63
- end,
64
- isVirtual
65
- } = virtualRange;
66
- const getElementForExtIndex = extIndex => {
67
- const logicalIndex = loopEnabled ? getIndexFromExtIndex(extIndex) : (0, _lodashEs.clamp)(extIndex, 0, total - 1);
68
- if ((0, _utils.isRenderPropChildren)(children)) return children(logicalIndex);
69
- return staticSlides[logicalIndex];
70
- };
71
- const slideElements = [];
72
- for (let extIndex = start; extIndex <= end; extIndex += 1) {
73
- const element = getElementForExtIndex(extIndex);
74
- if (!element) continue;
75
- slideElements.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
76
- style: [slideStyles.slide, slideWrapperStyle],
77
- children: element
78
- }, extIndex));
79
- }
80
- const leadSpacer = isVirtual && spacerStyles && spacerStyles.leadingSize > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
81
- style: spacerStyles.leading
82
- }) : null;
83
- const trailSpacer = isVirtual && spacerStyles && spacerStyles.trailingSize > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
84
- style: spacerStyles.trailing
85
- }) : null;
86
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
87
- children: [leadSpacer, slideElements, trailSpacer]
88
- });
89
- });
90
- return {
91
- staticSlides,
92
- renderSlides
93
- };
94
- };
95
- exports.useCarouselSlides = useCarouselSlides;
@@ -1,63 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.normalizeChildren = exports.isRenderPropChildren = exports.getDefaultTotal = exports.getBoundaryIndexRange = void 0;
7
- var _react = require("react");
8
- const isRenderPropChildren = children => {
9
- return typeof children === 'function';
10
- };
11
- exports.isRenderPropChildren = isRenderPropChildren;
12
- const normalizeChildren = (children, total) => {
13
- if (!children) return [];
14
- if (isRenderPropChildren(children)) {
15
- return Array.from({
16
- length: total
17
- }, (_, i) => children(i));
18
- }
19
- return _react.Children.toArray(children);
20
- };
21
- exports.normalizeChildren = normalizeChildren;
22
- const getDefaultTotal = children => {
23
- if (!children) return 0;
24
- if (isRenderPropChildren(children)) return 0;
25
- return Array.isArray(children) ? children.length : 1;
26
- };
27
-
28
- /**
29
- * 计算轮播边界索引范围
30
- *
31
- * @param params - 参数配置
32
- * @param params.total - 轮播项总数
33
- * @param params.slideSize - 单个滑块所占百分比 (0-100)
34
- * @param params.trackOffset - 轨道偏移百分比 (0-100)
35
- * @param params.stuckAtBoundary - 是否在边界处卡住
36
- * @returns 边界索引范围 { min, max }
37
- */
38
- exports.getDefaultTotal = getDefaultTotal;
39
- const getBoundaryIndexRange = params => {
40
- const {
41
- total,
42
- slideSize,
43
- trackOffset,
44
- stuckAtBoundary
45
- } = params;
46
- if (total <= 0) return {
47
- min: 0,
48
- max: 0
49
- };
50
- if (!stuckAtBoundary) return {
51
- min: 0,
52
- max: total - 1
53
- };
54
- const slideRatio = slideSize / 100;
55
- const offsetRatio = trackOffset / 100;
56
- const min = 0 + offsetRatio / (slideRatio || 1);
57
- const max = total - 1 - (1 - slideRatio - offsetRatio) / (slideRatio || 1);
58
- return {
59
- min,
60
- max
61
- };
62
- };
63
- exports.getBoundaryIndexRange = getBoundaryIndexRange;