@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.
- package/CHANGELOG.md +24 -0
- package/dist/commonjs/components/base/carousel/carousel-indicator.js +56 -0
- package/dist/commonjs/components/base/carousel/carousel-slides.js +140 -0
- package/dist/commonjs/components/base/carousel/carousel.js +114 -122
- package/dist/commonjs/components/base/carousel/hooks/index.js +0 -14
- package/dist/commonjs/components/base/carousel/hooks/use-carousel-index.js +16 -13
- package/dist/commonjs/components/base/carousel/hooks/use-carousel-lifecycle.js +6 -2
- package/dist/commonjs/components/base/carousel/hooks/use-carousel-pan-responder.js +40 -12
- package/dist/commonjs/components/base/carousel/hooks/use-carousel-position.js +6 -2
- package/dist/commonjs/components/base/carousel/index.js +1 -15
- package/dist/commonjs/components/base/carousel/style/index.js +12 -0
- package/dist/commonjs/components/base/date-picker/date-picker.js +56 -44
- package/dist/commonjs/components/base/date-picker/date-range-picker.js +142 -50
- package/dist/commonjs/components/base/date-picker/style/index.js +15 -0
- package/dist/commonjs/components/base/date-picker-view/date-picker-view.js +19 -53
- package/dist/commonjs/components/base/date-picker-view/index.js +0 -22
- package/dist/commonjs/components/base/index.js +30 -8
- package/dist/commonjs/components/base/picker/index.js +26 -4
- package/dist/commonjs/components/base/picker/picker-content.js +60 -0
- package/dist/commonjs/components/base/picker/picker-context.js +9 -0
- package/dist/commonjs/components/base/picker/picker-field.js +37 -0
- package/dist/commonjs/components/base/picker/picker.js +22 -96
- package/dist/commonjs/components/base/picker/style/index.js +1 -3
- package/dist/commonjs/components/base/picker-backup/base-picker-container.js +50 -0
- package/dist/commonjs/components/base/picker-backup/index.js +27 -0
- package/dist/commonjs/components/base/picker-backup/picker-backup.js +75 -0
- package/dist/commonjs/components/base/picker-backup/picker-copy.js +106 -0
- package/dist/commonjs/components/base/{picker → picker-backup}/picker-trigger.js +5 -5
- package/dist/commonjs/components/base/picker-backup/style/index.js +19 -0
- package/dist/commonjs/components/base/picker-backup/utils.js +53 -0
- package/dist/commonjs/components/base/picker-view/picker-view-column.js +15 -0
- package/dist/commonjs/components/base/picker-view/picker-view.js +4 -4
- package/dist/commonjs/components/base/tag/index.js +20 -0
- package/dist/commonjs/components/base/tag/style/index.js +89 -0
- package/dist/commonjs/components/base/tag/tag-context.js +12 -0
- package/dist/commonjs/components/base/tag/tag-group.js +35 -0
- package/dist/commonjs/components/base/tag/tag.js +47 -0
- package/dist/commonjs/components/base/tag/types.js +5 -0
- package/dist/module/components/base/carousel/carousel-indicator.js +51 -0
- package/dist/module/components/base/carousel/carousel-slides.js +135 -0
- package/dist/module/components/base/carousel/carousel.js +116 -124
- package/dist/module/components/base/carousel/hooks/index.js +0 -2
- package/dist/module/components/base/carousel/hooks/use-carousel-index.js +15 -11
- package/dist/module/components/base/carousel/hooks/use-carousel-lifecycle.js +6 -2
- package/dist/module/components/base/carousel/hooks/use-carousel-pan-responder.js +40 -11
- package/dist/module/components/base/carousel/hooks/use-carousel-position.js +5 -1
- package/dist/module/components/base/carousel/index.js +1 -5
- package/dist/module/components/base/carousel/style/index.js +12 -0
- package/dist/module/components/base/date-picker/date-picker.js +60 -48
- package/dist/module/components/base/date-picker/date-range-picker.js +146 -54
- package/dist/module/components/base/date-picker/style/index.js +11 -0
- package/dist/module/components/base/date-picker-view/date-picker-view.js +23 -57
- package/dist/module/components/base/date-picker-view/index.js +1 -3
- package/dist/module/components/base/index.js +2 -0
- package/dist/module/components/base/picker/index.js +9 -1
- package/dist/module/components/base/picker/picker-content.js +54 -0
- package/dist/module/components/base/picker/picker-context.js +4 -0
- package/dist/module/components/base/picker/picker-field.js +32 -0
- package/dist/module/components/base/picker/picker.js +25 -99
- package/dist/module/components/base/picker/style/index.js +1 -3
- package/dist/module/components/base/picker-backup/base-picker-container.js +44 -0
- package/dist/module/components/base/picker-backup/index.js +4 -0
- package/dist/module/components/base/picker-backup/picker-backup.js +69 -0
- package/dist/module/components/base/picker-backup/picker-copy.js +101 -0
- package/dist/module/components/base/{picker → picker-backup}/picker-trigger.js +2 -2
- package/dist/module/components/base/picker-backup/style/index.js +15 -0
- package/dist/module/components/base/picker-backup/utils.js +48 -0
- package/dist/module/components/base/picker-view/picker-view-column.js +15 -0
- package/dist/module/components/base/picker-view/picker-view.js +4 -4
- package/dist/module/components/base/tag/index.js +5 -0
- package/dist/module/components/base/tag/style/index.js +85 -0
- package/dist/module/components/base/tag/tag-context.js +8 -0
- package/dist/module/components/base/tag/tag-group.js +29 -0
- package/dist/module/components/base/tag/tag.js +41 -0
- package/dist/module/components/base/tag/types.js +3 -0
- package/dist/typescript/components/base/carousel/carousel-indicator.d.ts +42 -0
- package/dist/typescript/components/base/carousel/carousel-indicator.d.ts.map +1 -0
- package/dist/typescript/components/base/carousel/carousel-slides.d.ts +49 -0
- package/dist/typescript/components/base/carousel/carousel-slides.d.ts.map +1 -0
- package/dist/typescript/components/base/carousel/carousel.d.ts +16 -11
- package/dist/typescript/components/base/carousel/carousel.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/hooks/index.d.ts +0 -2
- package/dist/typescript/components/base/carousel/hooks/index.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/hooks/use-carousel-index.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/hooks/use-carousel-lifecycle.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/hooks/use-carousel-pan-responder.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/hooks/use-carousel-position.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/index.d.ts +1 -4
- package/dist/typescript/components/base/carousel/index.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/style/index.d.ts +12 -0
- package/dist/typescript/components/base/carousel/style/index.d.ts.map +1 -1
- package/dist/typescript/components/base/carousel/types.d.ts +8 -17
- package/dist/typescript/components/base/carousel/types.d.ts.map +1 -1
- package/dist/typescript/components/base/date-picker/date-picker.d.ts +4 -2
- package/dist/typescript/components/base/date-picker/date-picker.d.ts.map +1 -1
- package/dist/typescript/components/base/date-picker/date-range-picker.d.ts +12 -3
- package/dist/typescript/components/base/date-picker/date-range-picker.d.ts.map +1 -1
- package/dist/typescript/components/base/date-picker/style/index.d.ts +9 -0
- package/dist/typescript/components/base/date-picker/style/index.d.ts.map +1 -0
- package/dist/typescript/components/base/date-picker-view/date-picker-view.d.ts +1 -6
- package/dist/typescript/components/base/date-picker-view/date-picker-view.d.ts.map +1 -1
- package/dist/typescript/components/base/date-picker-view/index.d.ts +0 -2
- package/dist/typescript/components/base/date-picker-view/index.d.ts.map +1 -1
- package/dist/typescript/components/base/date-picker-view/types.d.ts +1 -1
- package/dist/typescript/components/base/index.d.ts +2 -0
- package/dist/typescript/components/base/index.d.ts.map +1 -1
- package/dist/typescript/components/base/picker/index.d.ts +7 -1
- package/dist/typescript/components/base/picker/index.d.ts.map +1 -1
- package/dist/typescript/components/base/picker/picker-content.d.ts +15 -0
- package/dist/typescript/components/base/picker/picker-content.d.ts.map +1 -0
- package/dist/typescript/components/base/picker/picker-context.d.ts +18 -0
- package/dist/typescript/components/base/picker/picker-context.d.ts.map +1 -0
- package/dist/typescript/components/base/picker/picker-field.d.ts +10 -0
- package/dist/typescript/components/base/picker/picker-field.d.ts.map +1 -0
- package/dist/typescript/components/base/picker/picker.d.ts +13 -11
- package/dist/typescript/components/base/picker/picker.d.ts.map +1 -1
- package/dist/typescript/components/base/picker/style/index.d.ts +0 -2
- package/dist/typescript/components/base/picker/style/index.d.ts.map +1 -1
- package/dist/typescript/components/base/picker-backup/base-picker-container.d.ts +15 -0
- package/dist/typescript/components/base/picker-backup/base-picker-container.d.ts.map +1 -0
- package/dist/typescript/components/base/picker-backup/index.d.ts +3 -0
- package/dist/typescript/components/base/picker-backup/index.d.ts.map +1 -0
- package/dist/typescript/components/base/picker-backup/picker-backup.d.ts +26 -0
- package/dist/typescript/components/base/picker-backup/picker-backup.d.ts.map +1 -0
- package/dist/typescript/components/base/picker-backup/picker-copy.d.ts +13 -0
- package/dist/typescript/components/base/picker-backup/picker-copy.d.ts.map +1 -0
- package/dist/typescript/components/base/picker-backup/picker-trigger.d.ts.map +1 -0
- package/dist/typescript/components/base/picker-backup/style/index.d.ts +13 -0
- package/dist/typescript/components/base/picker-backup/style/index.d.ts.map +1 -0
- package/dist/typescript/components/base/picker-backup/utils.d.ts +8 -0
- package/dist/typescript/components/base/picker-backup/utils.d.ts.map +1 -0
- package/dist/typescript/components/base/picker-view/picker-view-column.d.ts.map +1 -1
- package/dist/typescript/components/base/picker-view/utils/picker.d.ts +3 -3
- package/dist/typescript/components/base/picker-view/utils/picker.d.ts.map +1 -1
- package/dist/typescript/components/base/tag/index.d.ts +5 -0
- package/dist/typescript/components/base/tag/index.d.ts.map +1 -0
- package/dist/typescript/components/base/tag/style/index.d.ts +61 -0
- package/dist/typescript/components/base/tag/style/index.d.ts.map +1 -0
- package/dist/typescript/components/base/tag/tag-context.d.ts +3 -0
- package/dist/typescript/components/base/tag/tag-context.d.ts.map +1 -0
- package/dist/typescript/components/base/tag/tag-group.d.ts +4 -0
- package/dist/typescript/components/base/tag/tag-group.d.ts.map +1 -0
- package/dist/typescript/components/base/tag/tag.d.ts +4 -0
- package/dist/typescript/components/base/tag/tag.d.ts.map +1 -0
- package/dist/typescript/components/base/tag/types.d.ts +48 -0
- package/dist/typescript/components/base/tag/types.d.ts.map +1 -0
- package/package.json +12 -4
- package/src/components/base/carousel/carousel-indicator.tsx +80 -0
- package/src/components/base/carousel/carousel-slides.tsx +177 -0
- package/src/components/base/carousel/carousel.tsx +108 -118
- package/src/components/base/carousel/hooks/index.ts +0 -2
- package/src/components/base/carousel/hooks/use-carousel-index.ts +13 -9
- package/src/components/base/carousel/hooks/use-carousel-lifecycle.ts +4 -3
- package/src/components/base/carousel/hooks/use-carousel-pan-responder.ts +40 -16
- package/src/components/base/carousel/hooks/use-carousel-position.ts +4 -1
- package/src/components/base/carousel/index.ts +1 -3
- package/src/components/base/carousel/style/index.ts +12 -0
- package/src/components/base/carousel/types.ts +8 -21
- package/src/components/base/date-picker/date-picker.tsx +64 -61
- package/src/components/base/date-picker/date-range-picker.tsx +178 -70
- package/src/components/base/date-picker/style/index.ts +10 -0
- package/src/components/base/date-picker-view/date-picker-view.tsx +21 -68
- package/src/components/base/date-picker-view/index.ts +0 -2
- package/src/components/base/date-picker-view/types.ts +1 -1
- package/src/components/base/index.ts +2 -0
- package/src/components/base/picker/index.ts +11 -1
- package/src/components/base/picker/picker-content.tsx +75 -0
- package/src/components/base/picker/picker-context.ts +19 -0
- package/src/components/base/picker/picker-field.tsx +50 -0
- package/src/components/base/picker/picker.tsx +38 -114
- package/src/components/base/picker/style/index.ts +0 -2
- package/src/components/base/picker-backup/base-picker-container.tsx +55 -0
- package/src/components/base/picker-backup/index.ts +2 -0
- package/src/components/base/picker-backup/picker-backup.tsx +110 -0
- package/src/components/base/picker-backup/picker-copy.tsx +125 -0
- package/src/components/base/{picker → picker-backup}/picker-trigger.tsx +2 -2
- package/src/components/base/picker-backup/style/index.ts +14 -0
- package/src/components/base/picker-backup/utils.ts +62 -0
- package/src/components/base/picker-view/picker-view-column.tsx +20 -0
- package/src/components/base/picker-view/picker-view.tsx +4 -4
- package/src/components/base/picker-view/utils/picker.ts +3 -5
- package/src/components/base/tag/index.ts +5 -0
- package/src/components/base/tag/style/index.tsx +84 -0
- package/src/components/base/tag/tag-context.ts +9 -0
- package/src/components/base/tag/tag-group.tsx +31 -0
- package/src/components/base/tag/tag.tsx +50 -0
- package/src/components/base/tag/types.ts +71 -0
- package/dist/commonjs/components/base/carousel/carousel-item.js +0 -45
- package/dist/commonjs/components/base/carousel/constants.js +0 -25
- package/dist/commonjs/components/base/carousel/hooks/use-carousel-indicator.js +0 -63
- package/dist/commonjs/components/base/carousel/hooks/use-carousel-slides.js +0 -95
- package/dist/commonjs/components/base/carousel/utils.js +0 -63
- package/dist/commonjs/components/base/date-picker-view/date-range-picker-view.js +0 -145
- package/dist/commonjs/components/base/date-picker-view/date-time-picker.js +0 -39
- package/dist/module/components/base/carousel/carousel-item.js +0 -40
- package/dist/module/components/base/carousel/constants.js +0 -21
- package/dist/module/components/base/carousel/hooks/use-carousel-indicator.js +0 -58
- package/dist/module/components/base/carousel/hooks/use-carousel-slides.js +0 -90
- package/dist/module/components/base/carousel/utils.js +0 -55
- package/dist/module/components/base/date-picker-view/date-range-picker-view.js +0 -138
- package/dist/module/components/base/date-picker-view/date-time-picker.js +0 -34
- package/dist/typescript/components/base/carousel/carousel-item.d.ts +0 -26
- package/dist/typescript/components/base/carousel/carousel-item.d.ts.map +0 -1
- package/dist/typescript/components/base/carousel/constants.d.ts +0 -17
- package/dist/typescript/components/base/carousel/constants.d.ts.map +0 -1
- package/dist/typescript/components/base/carousel/hooks/use-carousel-indicator.d.ts +0 -37
- package/dist/typescript/components/base/carousel/hooks/use-carousel-indicator.d.ts.map +0 -1
- package/dist/typescript/components/base/carousel/hooks/use-carousel-slides.d.ts +0 -51
- package/dist/typescript/components/base/carousel/hooks/use-carousel-slides.d.ts.map +0 -1
- package/dist/typescript/components/base/carousel/utils.d.ts +0 -25
- package/dist/typescript/components/base/carousel/utils.d.ts.map +0 -1
- package/dist/typescript/components/base/date-picker-view/date-range-picker-view.d.ts +0 -26
- package/dist/typescript/components/base/date-picker-view/date-range-picker-view.d.ts.map +0 -1
- package/dist/typescript/components/base/date-picker-view/date-time-picker.d.ts +0 -3
- package/dist/typescript/components/base/date-picker-view/date-time-picker.d.ts.map +0 -1
- package/dist/typescript/components/base/picker/picker-trigger.d.ts.map +0 -1
- package/src/components/base/carousel/carousel-item.tsx +0 -35
- package/src/components/base/carousel/constants.ts +0 -19
- package/src/components/base/carousel/hooks/use-carousel-indicator.tsx +0 -84
- package/src/components/base/carousel/hooks/use-carousel-slides.tsx +0 -131
- package/src/components/base/carousel/utils.ts +0 -55
- package/src/components/base/date-picker-view/date-range-picker-view.tsx +0 -191
- package/src/components/base/date-picker-view/date-time-picker.tsx +0 -34
- /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
|
-
|
|
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
|
|
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:
|
|
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,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,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;
|