@meta-1/design 0.0.188 → 0.0.190
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meta-1/design",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.190",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"easykit",
|
|
6
6
|
"design",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"@radix-ui/react-scroll-area": "1.2.1",
|
|
41
41
|
"@radix-ui/react-select": "2.1.2",
|
|
42
42
|
"@radix-ui/react-separator": "1.1.0",
|
|
43
|
+
"@radix-ui/react-slider": "^1.3.6",
|
|
43
44
|
"@radix-ui/react-slot": "1.1.0",
|
|
44
45
|
"@radix-ui/react-switch": "1.1.1",
|
|
45
46
|
"@radix-ui/react-tabs": "1.1.1",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import * as SliderPrimitive from "@radix-ui/react-slider"
|
|
3
|
+
|
|
4
|
+
import { cn } from "@meta-1/design/lib/utils"
|
|
5
|
+
|
|
6
|
+
const Slider = React.forwardRef<
|
|
7
|
+
React.ElementRef<typeof SliderPrimitive.Root>,
|
|
8
|
+
React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>
|
|
9
|
+
>(({ className, ...props }, ref) => (
|
|
10
|
+
<SliderPrimitive.Root
|
|
11
|
+
ref={ref}
|
|
12
|
+
className={cn(
|
|
13
|
+
"relative flex w-full touch-none select-none items-center",
|
|
14
|
+
className
|
|
15
|
+
)}
|
|
16
|
+
{...props}
|
|
17
|
+
>
|
|
18
|
+
<SliderPrimitive.Track className="relative h-2 w-full grow overflow-hidden rounded-full bg-secondary">
|
|
19
|
+
<SliderPrimitive.Range className="absolute h-full bg-primary" />
|
|
20
|
+
</SliderPrimitive.Track>
|
|
21
|
+
<SliderPrimitive.Thumb className="block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" />
|
|
22
|
+
</SliderPrimitive.Root>
|
|
23
|
+
))
|
|
24
|
+
Slider.displayName = SliderPrimitive.Root.displayName
|
|
25
|
+
|
|
26
|
+
export { Slider }
|
|
@@ -24,6 +24,7 @@ export type UploaderProps = PropsWithChildren<{
|
|
|
24
24
|
data?: unknown;
|
|
25
25
|
showButton?: boolean;
|
|
26
26
|
uploadHandle?: (props: HandleProps) => void;
|
|
27
|
+
autoUpload?: boolean;
|
|
27
28
|
}> &
|
|
28
29
|
DropzoneOptions;
|
|
29
30
|
|
|
@@ -47,6 +48,7 @@ export const Uploader = forwardRef<HTMLDivElement, UploaderProps>((props, forwar
|
|
|
47
48
|
children,
|
|
48
49
|
uploadHandle = defaultUploadHandle,
|
|
49
50
|
maxFiles,
|
|
51
|
+
autoUpload = false,
|
|
50
52
|
...rest
|
|
51
53
|
} = props;
|
|
52
54
|
const elementRef = forwardedRef;
|
|
@@ -75,6 +77,42 @@ export const Uploader = forwardRef<HTMLDivElement, UploaderProps>((props, forwar
|
|
|
75
77
|
filesRef.current = files;
|
|
76
78
|
}, [files]);
|
|
77
79
|
|
|
80
|
+
const onUpload = useCallback(() => {
|
|
81
|
+
const updateFile = (file: UploadFile, status: "uploading" | "done" | "error") => {
|
|
82
|
+
const idx = filesRef.current.findIndex((f) => (f as UploadFile).uid === file.uid);
|
|
83
|
+
if (idx !== -1) {
|
|
84
|
+
file.status = status;
|
|
85
|
+
filesRef.current[idx] = {
|
|
86
|
+
...filesRef.current[idx],
|
|
87
|
+
...file,
|
|
88
|
+
name: filesRef.current[idx].name,
|
|
89
|
+
size: filesRef.current[idx].size,
|
|
90
|
+
type: filesRef.current[idx].type,
|
|
91
|
+
};
|
|
92
|
+
setFiles([...filesRef.current]);
|
|
93
|
+
onChange?.([...filesRef.current] as UploadFile[]);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
for (const f of filesRef.current) {
|
|
97
|
+
const file = f as UploadFile;
|
|
98
|
+
if (file.status === "init") {
|
|
99
|
+
file.status = "uploading";
|
|
100
|
+
file.progress = 0;
|
|
101
|
+
uploadHandle({
|
|
102
|
+
file,
|
|
103
|
+
action,
|
|
104
|
+
headers,
|
|
105
|
+
data,
|
|
106
|
+
onProgress: (file) => updateFile(file, "uploading"),
|
|
107
|
+
onSuccess: (file) => updateFile(file, "done"),
|
|
108
|
+
onError: (file) => updateFile(file, "error"),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
setFiles([...filesRef.current]);
|
|
113
|
+
onChange?.([...filesRef.current] as UploadFile[]);
|
|
114
|
+
}, [action, headers, data, uploadHandle, onChange]);
|
|
115
|
+
|
|
78
116
|
const { getRootProps, getInputProps } = useDropzone({
|
|
79
117
|
...rest,
|
|
80
118
|
maxFiles,
|
|
@@ -112,8 +150,18 @@ export const Uploader = forwardRef<HTMLDivElement, UploaderProps>((props, forwar
|
|
|
112
150
|
return uploadFile;
|
|
113
151
|
}),
|
|
114
152
|
];
|
|
153
|
+
|
|
154
|
+
// 立即更新 filesRef,确保 onUpload 能获取到最新文件列表
|
|
155
|
+
filesRef.current = newFiles;
|
|
115
156
|
setFiles(newFiles);
|
|
116
157
|
onChange?.(newFiles as UploadFile[]);
|
|
158
|
+
|
|
159
|
+
if (autoUpload) {
|
|
160
|
+
// 如果启用自动上传,延迟执行上传
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
onUpload();
|
|
163
|
+
}, 0);
|
|
164
|
+
}
|
|
117
165
|
},
|
|
118
166
|
onDropRejected(fileRejections) {
|
|
119
167
|
// 收集所有文件名和错误信息
|
|
@@ -124,42 +172,6 @@ export const Uploader = forwardRef<HTMLDivElement, UploaderProps>((props, forwar
|
|
|
124
172
|
},
|
|
125
173
|
});
|
|
126
174
|
|
|
127
|
-
const onUpload = useCallback(() => {
|
|
128
|
-
const updateFile = (file: UploadFile, status: "uploading" | "done" | "error") => {
|
|
129
|
-
const idx = filesRef.current.findIndex((f) => (f as UploadFile).uid === file.uid);
|
|
130
|
-
if (idx !== -1) {
|
|
131
|
-
file.status = status;
|
|
132
|
-
filesRef.current[idx] = {
|
|
133
|
-
...filesRef.current[idx],
|
|
134
|
-
...file,
|
|
135
|
-
name: filesRef.current[idx].name,
|
|
136
|
-
size: filesRef.current[idx].size,
|
|
137
|
-
type: filesRef.current[idx].type,
|
|
138
|
-
};
|
|
139
|
-
setFiles([...filesRef.current]);
|
|
140
|
-
onChange?.([...filesRef.current] as UploadFile[]);
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
for (const f of filesRef.current) {
|
|
144
|
-
const file = f as UploadFile;
|
|
145
|
-
if (file.status === "init") {
|
|
146
|
-
file.status = "uploading";
|
|
147
|
-
file.progress = 0;
|
|
148
|
-
uploadHandle({
|
|
149
|
-
file,
|
|
150
|
-
action,
|
|
151
|
-
headers,
|
|
152
|
-
data,
|
|
153
|
-
onProgress: (file) => updateFile(file, "uploading"),
|
|
154
|
-
onSuccess: (file) => updateFile(file, "done"),
|
|
155
|
-
onError: (file) => updateFile(file, "error"),
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
setFiles([...filesRef.current]);
|
|
160
|
-
onChange?.([...filesRef.current] as UploadFile[]);
|
|
161
|
-
}, [action, headers, data, uploadHandle, onChange]);
|
|
162
|
-
|
|
163
175
|
const renderFile = (file: UploadFile) => {
|
|
164
176
|
return (
|
|
165
177
|
<div className={cn("flex items-center justify-center border-b", "last:border-none")} key={file.uid}>
|
package/src/index.ts
CHANGED