@cloudtower/eagle 0.34.25 → 0.35.2

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.
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import { UploadWrapper } from "./LocalUpload.style";
3
+ import type { LocalUploadProps } from "./LocalUpload.type";
4
+ import { UploadButton, UploadDescription, UploadDragger, UploadFileInfo, UploadFileList, UploadLabel } from "./LocalUpload.widget";
5
+ type UploadComponents = {
6
+ Wrapper: typeof UploadWrapper;
7
+ Label: typeof UploadLabel;
8
+ Description: typeof UploadDescription;
9
+ Button: typeof UploadButton;
10
+ Dragger: typeof UploadDragger;
11
+ FileList: typeof UploadFileList;
12
+ FileInfo: typeof UploadFileInfo;
13
+ };
14
+ export declare const LocalUpload: React.ForwardRefExoticComponent<LocalUploadProps & React.RefAttributes<HTMLDivElement>> & UploadComponents;
15
+ export {};
@@ -0,0 +1,32 @@
1
+ import type { LocalUploadButtonProps, LocalUploadDraggerProps, LocalUploadFile } from "./LocalUpload.type";
2
+ /**
3
+ * Custom hook to handle file validation automatically.
4
+ * When files with status "need-validate" are detected, it validates them
5
+ * and updates their status based on the validation result.
6
+ *
7
+ * @param options - Configuration options
8
+ * @param options.fileList - Current file list
9
+ * @param options.setFileList - Function to update file list
10
+ * @param options.validate - Validation function
11
+ * @param options.createNewFile - Whether to create a new File object when updating (for immutability)
12
+ */
13
+ export declare const useFileValidation: ({ fileList, setFileList, validate, createNewFile, }: {
14
+ fileList: LocalUploadFile[];
15
+ setFileList: (files: LocalUploadFile[]) => void;
16
+ validate?: LocalUploadDraggerProps["validate"] | LocalUploadButtonProps["validate"];
17
+ createNewFile?: boolean | undefined;
18
+ }) => void;
19
+ /**
20
+ * Custom hook to clear error message when file count changes and is within the max count limit.
21
+ * This hook tracks file count changes using a ref to avoid unnecessary updates.
22
+ *
23
+ * @param options - Configuration options
24
+ * @param options.fileList - Current file list
25
+ * @param options.maxCount - Maximum allowed file count
26
+ * @param options.setError - Function to set error message
27
+ */
28
+ export declare const useFileCountErrorClear: ({ fileList, maxCount, setError, }: {
29
+ fileList: LocalUploadFile[];
30
+ maxCount: number;
31
+ setError: (error: string) => void;
32
+ }) => void;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ export declare const UploadWrapper: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & Record<never, unknown>>;
3
+ export declare const FileInfoWrapperStyle: import("@linaria/core").LinariaClassName;
@@ -0,0 +1,175 @@
1
+ /// <reference types="react" />
2
+ import { AntdRcFile, AntdUploadProps } from "../../antd";
3
+ /**
4
+ * 上传文件对象
5
+ * 继承自 Antd 的 RcFile,并添加额外的状态和错误信息
6
+ */
7
+ export interface LocalUploadFile extends AntdRcFile {
8
+ /** 文件唯一标识 */
9
+ uid: string;
10
+ /** 文件大小(字节) */
11
+ size: number;
12
+ /** 文件名 */
13
+ name: string;
14
+ /** 文件类型 */
15
+ type: string;
16
+ /** 备用文件名 */
17
+ fileName?: string | undefined;
18
+ /** 文件状态 */
19
+ fileStatus: "error" | "success" | "need-validate" | "validating";
20
+ /** 自定义数据 */
21
+ data?: any;
22
+ /** 错误信息 */
23
+ error?: string | null;
24
+ }
25
+ /**
26
+ * 文件接受类型
27
+ * 限制只能是以 . 开头的文件扩展名
28
+ */
29
+ export type LocalUploadAccept = `.${string}`;
30
+ /**
31
+ * 上传按钮属性
32
+ */
33
+ export type LocalUploadButtonProps = Pick<AntdUploadProps, "accept" | "multiple" | "disabled"> & {
34
+ /** 自定义类名 */
35
+ className?: string;
36
+ /** 是否隐藏图标 */
37
+ hideIcon?: boolean;
38
+ /** 文件列表 */
39
+ fileList: LocalUploadFile[];
40
+ /** 设置文件列表 */
41
+ setFileList: (files: LocalUploadFile[]) => void;
42
+ /** 最大文件数量 */
43
+ maxCount?: number;
44
+ /**
45
+ * 文件验证函数
46
+ * @param file 当前文件
47
+ * @param files 文件列表
48
+ * @returns 返回包含错误信息或自定义数据的 Promise
49
+ */
50
+ validate?: (file: LocalUploadFile, files?: LocalUploadFile[]) => Promise<{
51
+ error?: string;
52
+ data?: any;
53
+ }>;
54
+ };
55
+ /**
56
+ * 拖拽上传属性
57
+ */
58
+ export type LocalUploadDraggerProps = Pick<AntdUploadProps, "accept" | "multiple" | "disabled"> & {
59
+ /** 自定义类名 */
60
+ className?: string;
61
+ /** 文件列表 */
62
+ fileList: LocalUploadFile[];
63
+ /** 设置文件列表 */
64
+ setFileList: (files: LocalUploadFile[]) => void;
65
+ /** 最大文件数量 */
66
+ maxCount?: number;
67
+ /**
68
+ * 文件验证函数
69
+ * @param file 当前文件
70
+ * @param files 文件列表
71
+ * @returns 返回包含错误信息或自定义数据的 Promise
72
+ */
73
+ validate?: (file: LocalUploadFile, files?: LocalUploadFile[]) => Promise<{
74
+ error?: string;
75
+ data?: any;
76
+ }>;
77
+ };
78
+ /**
79
+ * 文件列表属性
80
+ */
81
+ export type LocalUploadFileListProps = {
82
+ /** 自定义类名 */
83
+ className?: string;
84
+ /** 文件列表 */
85
+ fileList: LocalUploadFile[];
86
+ /** 列表展示类型 */
87
+ type?: "list" | "info";
88
+ /** 移除文件回调 */
89
+ removeFile: (id: string) => void;
90
+ /** 是否禁用移除操作 */
91
+ disableRemove?: boolean;
92
+ /** 文件移除事件回调 */
93
+ onRemove?: (file: LocalUploadFile) => void;
94
+ };
95
+ /**
96
+ * 文件信息展示属性
97
+ */
98
+ export type LocalUploadFileInfoProps = {
99
+ /** 文件对象 */
100
+ file: {
101
+ /** 文件状态 */
102
+ fileStatus?: "error" | "success" | "need-validate" | "validating";
103
+ /** 文件名 */
104
+ name: string;
105
+ /** 备用文件名 */
106
+ fileName?: string;
107
+ /** 文件大小 */
108
+ size?: number;
109
+ /** 文件唯一标识 */
110
+ uid?: string;
111
+ /** 错误信息 */
112
+ error?: string | null;
113
+ };
114
+ /** 移除文件回调 */
115
+ removeFile: (id: string) => void;
116
+ /** 是否禁用 */
117
+ disabled?: boolean;
118
+ /** 文件移除事件回调 */
119
+ onRemove?: (file: LocalUploadFile) => void;
120
+ };
121
+ /**
122
+ * Upload 组件属性
123
+ */
124
+ export type LocalUploadProps = {
125
+ /** 自定义类名 */
126
+ className?: string;
127
+ /** 标签 */
128
+ label?: React.ReactNode;
129
+ /** 描述文本 */
130
+ description?: React.ReactNode;
131
+ /** 额外信息 */
132
+ info?: React.ReactNode;
133
+ /** 上传类型:按钮或拖拽 */
134
+ type?: "button" | "dragger";
135
+ /** 列表展示类型 */
136
+ listType?: "list" | "info";
137
+ /** 是否支持多选 */
138
+ multiple?: boolean;
139
+ /** 接受的文件类型 */
140
+ accept?: LocalUploadAccept;
141
+ /** 是否禁用 */
142
+ disabled?: boolean;
143
+ /** 最大文件数量 */
144
+ maxCount?: number;
145
+ /** 文件列表 */
146
+ fileList: LocalUploadFile[];
147
+ /** 设置文件列表 */
148
+ setFileList: (files: LocalUploadFile[]) => void;
149
+ /** 是否禁用文件列表的移除功能 */
150
+ disableRemoveList?: boolean;
151
+ /**
152
+ * 文件验证函数
153
+ * @param file 当前文件
154
+ * @param files 文件列表
155
+ * @returns 返回包含错误信息或自定义数据的 Promise
156
+ *
157
+ * @example
158
+ * ```ts
159
+ * const validate = async (file: LocalUploadFile) => {
160
+ * if (file.size > 5 * 1024 * 1024) {
161
+ * return { error: "文件大小不能超过 5MB" };
162
+ * }
163
+ * return { data: { validated: true } };
164
+ * };
165
+ * ```
166
+ */
167
+ validate?: (file: LocalUploadFile, files?: LocalUploadFile[]) => Promise<{
168
+ error?: string;
169
+ data?: any;
170
+ }>;
171
+ /** 按钮属性 */
172
+ buttonProps?: Pick<LocalUploadButtonProps, "className" | "hideIcon">;
173
+ /** 文件移除事件回调 */
174
+ onRemove?: (file: LocalUploadFile) => void;
175
+ };
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import type { LocalUploadButtonProps, LocalUploadDraggerProps, LocalUploadFile, LocalUploadFileInfoProps, LocalUploadFileListProps } from "./LocalUpload.type";
3
+ export declare const UploadLabel: React.FC<{
4
+ className?: string;
5
+ children?: React.ReactNode;
6
+ }>;
7
+ export declare const UploadDescription: React.FC<{
8
+ className?: string;
9
+ children?: React.ReactNode;
10
+ }>;
11
+ export declare const UploadButton: React.FC<LocalUploadButtonProps & {
12
+ children?: React.ReactNode;
13
+ }>;
14
+ export declare const UploadDragger: React.FC<LocalUploadDraggerProps & {
15
+ children?: React.ReactNode;
16
+ }>;
17
+ export declare const UploadFileInfo: React.FC<LocalUploadFileInfoProps>;
18
+ export declare const FileListItem: React.FC<{
19
+ file: LocalUploadFile;
20
+ removeFile: (id: string) => void;
21
+ onRemove?: (file: LocalUploadFile) => void;
22
+ }>;
23
+ export declare const UploadFileList: React.FC<LocalUploadFileListProps>;
@@ -0,0 +1,2 @@
1
+ export * from "./LocalUpload";
2
+ export * from "./LocalUpload.type";
@@ -50,6 +50,7 @@ export * from "./Legend";
50
50
  export * from "./LineChart";
51
51
  export * from "./Link";
52
52
  export * from "./Loading";
53
+ export * from "./LocalUpload";
53
54
  export * from "./MediumDialog";
54
55
  export * from "./message";
55
56
  export * from "./message-group";
@@ -0,0 +1,74 @@
1
+ import { LocalUpload } from "../../../src/core/LocalUpload";
2
+ import { Meta, StoryObj } from "@storybook/react";
3
+ /**
4
+ * LocalUpload 组件用于本地文件上传,支持按钮上传和拖拽上传两种方式。
5
+ *
6
+ * ## 功能特点
7
+ * - 支持单文件和多文件上传
8
+ * - 支持拖拽上传
9
+ * - 支持文件验证
10
+ * - 支持上传进度展示
11
+ * - 支持错误提示
12
+ */
13
+ declare const meta: Meta<typeof LocalUpload>;
14
+ export default meta;
15
+ type Story = StoryObj<typeof LocalUpload>;
16
+ /**
17
+ * 基础的拖拽上传示例
18
+ * 点击或拖拽文件到上传区域即可上传
19
+ */
20
+ export declare const BasicDragger: Story;
21
+ /**
22
+ * 单文件拖拽上传
23
+ * 只允许选择一个文件,选择新文件会替换旧文件
24
+ */
25
+ export declare const SingleFileDragger: Story;
26
+ /**
27
+ * 按钮上传示例
28
+ * 使用按钮触发文件选择对话框
29
+ */
30
+ export declare const ButtonUpload: Story;
31
+ /**
32
+ * 限制文件数量
33
+ * 最多只能上传指定数量的文件
34
+ */
35
+ export declare const MaxCountUpload: Story;
36
+ /**
37
+ * 带文件类型限制的上传
38
+ * 只允许上传指定类型的文件
39
+ */
40
+ export declare const AcceptTypeUpload: Story;
41
+ /**
42
+ * 带文件验证的上传
43
+ * 可以自定义文件验证逻辑,验证失败会显示错误信息
44
+ */
45
+ export declare const ValidatedUpload: Story;
46
+ /**
47
+ * 禁用状态
48
+ * 禁用后无法进行文件上传操作
49
+ */
50
+ export declare const DisabledUpload: Story;
51
+ /**
52
+ * 预填充文件
53
+ */
54
+ export declare const WithPrefilledFiles: Story;
55
+ /**
56
+ * List 类型文件列表
57
+ * 使用标准列表展示文件,包含文件名、文件大小、文件状态等信息
58
+ */
59
+ export declare const ListTypeList: Story;
60
+ /**
61
+ * Info 类型文件列表
62
+ * 以 Info 形式展示文件信息,包含文件名、文件大小、文件状态等信息
63
+ */
64
+ export declare const InfoListType: Story;
65
+ /**
66
+ * 自定义按钮样式
67
+ * 可以隐藏图标或添加自定义类名
68
+ */
69
+ export declare const CustomButtonStyle: Story;
70
+ /**
71
+ * 文件移除回调
72
+ * 监听文件移除事件
73
+ */
74
+ export declare const WithRemoveCallback: Story;