x-next 1.5.0 → 1.7.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 (171) hide show
  1. package/AI_USAGE.md +57 -4
  2. package/CHANGELOG.md +72 -0
  3. package/dist/_utils/color.d.ts +53 -0
  4. package/dist/components/color-picker/ColorPicker.d.ts +239 -0
  5. package/dist/components/color-picker/gradient-slider.d.ts +52 -0
  6. package/dist/components/color-picker/index.d.ts +238 -0
  7. package/dist/components/color-picker/panel.d.ts +721 -0
  8. package/dist/components/color-picker/sv-panel.d.ts +48 -0
  9. package/dist/components/date-picker/DatePicker.vue.d.ts +3 -3
  10. package/dist/components/date-picker/index.d.ts +6 -6
  11. package/dist/components/draggable/Draggable.d.ts +1 -1
  12. package/dist/components/draggable/index.d.ts +2 -2
  13. package/dist/components/drawer/index.d.ts +6 -6
  14. package/dist/components/drawer/src/Drawer.vue.d.ts +3 -3
  15. package/dist/components/dropdown/Dropdown.vue.d.ts +34 -4
  16. package/dist/components/dropdown/DropdownButton.vue.d.ts +35 -5
  17. package/dist/components/dropdown/DropdownSubmenu.vue.d.ts +34 -4
  18. package/dist/components/dropdown/dropdown-panel.vue.d.ts +30 -0
  19. package/dist/components/dropdown/index.d.ts +209 -29
  20. package/dist/components/form/FormItem.vue.d.ts +12 -12
  21. package/dist/components/form/form-item-label.vue.d.ts +3 -3
  22. package/dist/components/form/index.d.ts +24 -24
  23. package/dist/components/form-select/Select.d.ts +3 -3
  24. package/dist/components/form-select/SelectDropdown.vue.d.ts +30 -0
  25. package/dist/components/form-select/index.d.ts +66 -6
  26. package/dist/components/form-slider/Slider.vue.d.ts +3 -3
  27. package/dist/components/form-slider/index.d.ts +6 -6
  28. package/dist/components/form-slider/slider-button.vue.d.ts +3 -3
  29. package/dist/components/grid/Row.vue.d.ts +3 -3
  30. package/dist/components/grid/index.d.ts +9 -9
  31. package/dist/components/heatmap/Heatmap.d.ts +311 -0
  32. package/dist/components/heatmap/helpers/matrix.d.ts +58 -0
  33. package/dist/components/heatmap/index.d.ts +372 -0
  34. package/dist/components/heatmap/interface.d.ts +57 -0
  35. package/dist/components/image/Image.vue.d.ts +125 -17
  36. package/dist/components/image/ImagePreview.vue.d.ts +97 -7
  37. package/dist/components/image/ImagePreviewAction.d.ts +3 -3
  38. package/dist/components/image/ImagePreviewGroup.vue.d.ts +100 -7
  39. package/dist/components/image/hooks/use-image-drag.d.ts +2 -2
  40. package/dist/components/image/index.d.ts +712 -124
  41. package/dist/components/image/interface.d.ts +9 -1
  42. package/dist/components/image/preview-toolbar.vue.d.ts +3 -3
  43. package/dist/components/index.d.ts +3 -0
  44. package/dist/components/menu/sub-menu-pop.vue.d.ts +3 -3
  45. package/dist/components/network/Network.vue.d.ts +1 -1
  46. package/dist/components/network/index.d.ts +3 -3
  47. package/dist/components/network/utils.d.ts +2 -0
  48. package/dist/components/pagination/page-item-ellipsis.vue.d.ts +9 -0
  49. package/dist/components/pagination/page-jumper.vue.d.ts +6 -0
  50. package/dist/components/pagination/page-options.vue.d.ts +6 -6
  51. package/dist/components/popconfirm/src/popup.vue.d.ts +3 -3
  52. package/dist/components/popover/Popover.d.ts +1 -1
  53. package/dist/components/popover/index.d.ts +3 -3
  54. package/dist/components/popup/Popup.d.ts +1 -1
  55. package/dist/components/popup/index.d.ts +3 -3
  56. package/dist/components/skeleton/SkeletonShape.vue.d.ts +3 -3
  57. package/dist/components/skeleton/index.d.ts +6 -6
  58. package/dist/components/space/Space.d.ts +1 -1
  59. package/dist/components/space/index.d.ts +3 -3
  60. package/dist/components/spin/Spin.d.ts +38 -0
  61. package/dist/components/spin/index.d.ts +30 -0
  62. package/dist/components/table/Table.d.ts +1 -1
  63. package/dist/components/table/index.d.ts +3 -3
  64. package/dist/components/tabs/Tabs.d.ts +1 -1
  65. package/dist/components/tabs/index.d.ts +3 -3
  66. package/dist/components/time-picker/TimePicker.vue.d.ts +3 -3
  67. package/dist/components/time-picker/index.d.ts +6 -6
  68. package/dist/components/tooltip/Tooltip.vue.d.ts +1 -1
  69. package/dist/components/tooltip/index.d.ts +3 -3
  70. package/dist/components/trigger/Trigger.d.ts +1 -1
  71. package/dist/components/trigger/index.d.ts +3 -3
  72. package/dist/components/upload/Upload.d.ts +372 -0
  73. package/dist/components/upload/context.d.ts +28 -0
  74. package/dist/components/upload/index.d.ts +656 -0
  75. package/dist/components/upload/interface.d.ts +110 -0
  76. package/dist/components/upload/props.d.ts +321 -0
  77. package/dist/components/upload/upload-list-item.d.ts +15 -0
  78. package/dist/components/upload/upload-list.d.ts +11 -0
  79. package/dist/components/upload/upload-picture-item.d.ts +20 -0
  80. package/dist/components/upload/upload-trigger.d.ts +8 -0
  81. package/dist/components/upload/utils.d.ts +48 -0
  82. package/dist/components/watermark/Watermark.d.ts +1 -1
  83. package/dist/components/watermark/index.d.ts +3 -3
  84. package/dist/es/_styles/palette-aliases.js +10 -4
  85. package/dist/es/_utils/color.js +73 -0
  86. package/dist/es/components/button/Button.js +2 -2
  87. package/dist/es/components/color-picker/ColorPicker.js +239 -0
  88. package/dist/es/components/color-picker/gradient-slider.js +79 -0
  89. package/dist/es/components/color-picker/index.js +8 -0
  90. package/dist/es/components/color-picker/panel.js +307 -0
  91. package/dist/es/components/color-picker/sv-panel.js +99 -0
  92. package/dist/es/components/dropdown/dropdown-panel.vue.js +17 -17
  93. package/dist/es/components/form-input/Input.js +7 -7
  94. package/dist/es/components/form-input/InputPassword.vue2.js +2 -2
  95. package/dist/es/components/form-input/InputSearch.js +2 -2
  96. package/dist/es/components/form-input-number/InputNumber.js +12 -12
  97. package/dist/es/components/heatmap/Heatmap.js +334 -0
  98. package/dist/es/components/heatmap/helpers/matrix.js +106 -0
  99. package/dist/es/components/heatmap/index.js +8 -0
  100. package/dist/es/components/image/Image.vue.js +55 -45
  101. package/dist/es/components/image/Image.vue2.js +113 -92
  102. package/dist/es/components/image/ImagePreview.vue.js +66 -53
  103. package/dist/es/components/image/ImagePreview.vue2.js +219 -171
  104. package/dist/es/components/image/ImagePreviewAction.js +12 -15
  105. package/dist/es/components/image/ImagePreviewGroup.vue.js +21 -20
  106. package/dist/es/components/image/ImagePreviewGroup.vue2.js +45 -39
  107. package/dist/es/components/image/hooks/use-image-drag.js +16 -14
  108. package/dist/es/components/index.js +123 -117
  109. package/dist/es/components/menu/sub-menu-pop.vue2.js +12 -12
  110. package/dist/es/components/network/Network.vue2.js +72 -72
  111. package/dist/es/components/network/utils.js +44 -35
  112. package/dist/es/components/pagination/Pagination.js +113 -104
  113. package/dist/es/components/pagination/page-item-ellipsis.vue.js +13 -12
  114. package/dist/es/components/pagination/page-item-ellipsis.vue2.js +19 -15
  115. package/dist/es/components/pagination/page-jumper.vue.js +13 -12
  116. package/dist/es/components/pagination/page-jumper.vue2.js +7 -4
  117. package/dist/es/components/pagination/page-options.vue.js +4 -3
  118. package/dist/es/components/pagination/page-options.vue2.js +17 -15
  119. package/dist/es/components/skeleton/Skeleton.vue.js +11 -9
  120. package/dist/es/components/skeleton/SkeletonLine.vue.js +9 -8
  121. package/dist/es/components/skeleton/SkeletonShape.vue.js +8 -7
  122. package/dist/es/components/spin/Spin.js +124 -60
  123. package/dist/es/components/table/Table.js +3 -1
  124. package/dist/es/components/trigger/Trigger.js +19 -19
  125. package/dist/es/components/upload/Upload.js +420 -0
  126. package/dist/es/components/upload/context.js +4 -0
  127. package/dist/es/components/upload/index.js +8 -0
  128. package/dist/es/components/upload/props.js +321 -0
  129. package/dist/es/components/upload/upload-list-item.js +138 -0
  130. package/dist/es/components/upload/upload-list.js +48 -0
  131. package/dist/es/components/upload/upload-picture-item.js +109 -0
  132. package/dist/es/components/upload/upload-trigger.js +89 -0
  133. package/dist/es/components/upload/utils.js +195 -0
  134. package/dist/es/icons/_self/empty-better.js +25 -8
  135. package/dist/es/icons/_self/upload-icons.js +103 -0
  136. package/dist/es/index.js +168 -162
  137. package/dist/es/locale/en-US.js +39 -1
  138. package/dist/es/locale/zh-CN.js +39 -1
  139. package/dist/es/style.css +1 -1
  140. package/dist/icons/_self/upload-icons.d.ts +523 -0
  141. package/dist/index.cjs +4 -4
  142. package/dist/index.umd.js +4 -4
  143. package/dist/locale/interface.d.ts +60 -0
  144. package/dist/style/base.css +1 -1
  145. package/dist/style/button.css +1 -1
  146. package/dist/style/color-picker.css +1 -0
  147. package/dist/style/color-picker.js +2 -0
  148. package/dist/style/date-picker.css +1 -1
  149. package/dist/style/empty.css +1 -1
  150. package/dist/style/form-checkbox.css +1 -1
  151. package/dist/style/form-input-tag.css +1 -1
  152. package/dist/style/form-input.css +1 -1
  153. package/dist/style/form-radio.css +1 -1
  154. package/dist/style/form-textarea.css +1 -1
  155. package/dist/style/form.css +1 -1
  156. package/dist/style/heatmap.css +1 -0
  157. package/dist/style/heatmap.js +2 -0
  158. package/dist/style/image.css +1 -1
  159. package/dist/style/menu.css +1 -1
  160. package/dist/style/pagination.css +1 -1
  161. package/dist/style/skeleton.css +1 -1
  162. package/dist/style/spin.css +1 -1
  163. package/dist/style/steps.css +1 -1
  164. package/dist/style/table.css +1 -1
  165. package/dist/style/upload.css +1 -0
  166. package/dist/style/upload.js +2 -0
  167. package/dist/style.css +1 -1
  168. package/dist/types.d.ts +3 -0
  169. package/package.json +1 -1
  170. package/volar.d.ts +3 -0
  171. package/dist/es/_hooks/use-popup-overflow-hidden.js +0 -29
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Upload 公开类型。
3
+ *
4
+ * 状态模型沿用 init / uploading / done / error 四态:外部传入且无 status 的
5
+ * 历史文件按 done 处理,cancel 回到 init 便于直接重试(不同于 Arco 的 error)。
6
+ */
7
+ export type UploadStatus = 'init' | 'uploading' | 'done' | 'error';
8
+ export type UploadListType = 'text' | 'picture' | 'picture-card';
9
+ export type UploadRequestMethod = 'post' | 'put' | 'patch';
10
+ /** 文件被拒绝的原因:类型 / 数量 / 前置钩子 / 目录读取失败 */
11
+ export type UploadRejectReason = 'accept' | 'limit' | 'beforeUpload' | 'read';
12
+ export interface UploadFile<T = unknown> {
13
+ /** 文件唯一标识;外部列表未提供时组件会自动生成并保持稳定 */
14
+ uid: string;
15
+ name: string;
16
+ size?: number;
17
+ type?: string;
18
+ lastModified?: number;
19
+ /** 默认 done;上传中 uploading;失败 error;待上传 init */
20
+ status?: UploadStatus;
21
+ /** 上传进度,0 ~ 1(与 x-next Progress 组件一致) */
22
+ percent?: number;
23
+ /** 文件地址;上传成功后可由 responseUrlKey 从响应中提取 */
24
+ url?: string;
25
+ /** 缩略图地址;图片文件加入列表时自动生成本地预览地址 */
26
+ thumbUrl?: string;
27
+ /** 上传接口响应体 */
28
+ response?: T;
29
+ /** 上传失败的错误对象 */
30
+ error?: unknown;
31
+ /** 原始 File 对象;外部历史文件通常没有 */
32
+ file?: File;
33
+ }
34
+ export type UploadBeforeUploadResult = void | boolean | File | Blob | string;
35
+ /**
36
+ * 上传前置钩子。
37
+ *
38
+ * - 返回 false / Promise<false>:不加入列表
39
+ * - 返回 File / Blob / string:替换原始文件后上传
40
+ * - 抛错或 reject:按拒绝处理并触发 reject 事件
41
+ */
42
+ export type UploadBeforeUpload = (file: File, fileList: File[]) => UploadBeforeUploadResult | Promise<UploadBeforeUploadResult>;
43
+ export type UploadBeforeRemove = (file: UploadFile) => boolean | void | Promise<boolean | void>;
44
+ /** 上传地址;传函数时按文件动态解析,支持异步 */
45
+ export type UploadAction = string | ((file: File) => string | Promise<string>);
46
+ /** 附加表单字段;传函数时按文件动态解析 */
47
+ export type UploadData = Record<string, unknown> | ((file: UploadFile) => Record<string, unknown> | Promise<Record<string, unknown>>);
48
+ /** 文件字段名;默认 file */
49
+ export type UploadName = string | ((file: UploadFile) => string);
50
+ /** 从响应体中提取文件地址的字段名或解析函数;字符串支持 `data.url` 形式的路径 */
51
+ export type UploadResponseUrlKey = string | ((file: UploadFile, response?: unknown) => string | undefined);
52
+ export interface UploadRequestOption {
53
+ action: string;
54
+ method: UploadRequestMethod;
55
+ /** 文件字段名 */
56
+ name: string;
57
+ /** 原始文件对象 */
58
+ file: File;
59
+ /** 列表项,可读取 uid / 业务附加字段 */
60
+ fileItem: UploadFile;
61
+ data?: Record<string, unknown>;
62
+ headers?: Record<string, string>;
63
+ withCredentials: boolean;
64
+ /** 超时毫秒数,0 表示不超时 */
65
+ timeout: number;
66
+ /**
67
+ * 每次尝试独立的中止信号;取消上传、移除文件或组件卸载时触发 abort。
68
+ * 可直接透传给 fetch / axios 的 signal;环境不支持 AbortController 时为 undefined。
69
+ */
70
+ signal?: AbortSignal;
71
+ /** 进度回调,percent 为 0 ~ 1 */
72
+ onProgress: (percent: number, event?: ProgressEvent) => void;
73
+ onSuccess: (response?: unknown) => void;
74
+ onError: (error?: unknown) => void;
75
+ }
76
+ export interface UploadRequest {
77
+ abort?: () => void;
78
+ }
79
+ /**
80
+ * 自定义上传请求。
81
+ *
82
+ * 三种收尾方式,按所需控制力度选择:
83
+ * - 返回 Promise:resolve 即成功(结果写入 `file.response`),reject 即失败,
84
+ * 适合直接调用业务已有的上传方法(axios / fetch / flyio 均可);
85
+ * - 返回 `{ abort }`:自行调用 `onProgress` / `onSuccess` / `onError`,
86
+ * 组件在取消、移除、卸载时调用 `abort`;
87
+ * - 返回 undefined:完全手动回调,取消时仅失效后续回调。
88
+ */
89
+ export type UploadCustomRequest = (option: UploadRequestOption) => UploadRequest | Promise<unknown> | void;
90
+ export interface UploadChangeInfo {
91
+ file: UploadFile;
92
+ fileList: UploadFile[];
93
+ }
94
+ export interface UploadProgressInfo extends UploadChangeInfo {
95
+ percent: number;
96
+ event?: ProgressEvent;
97
+ }
98
+ export interface UploadExceedInfo {
99
+ /** 因超出 limit 被拒绝的文件 */
100
+ files: File[];
101
+ fileList: UploadFile[];
102
+ }
103
+ export interface UploadRejectInfo {
104
+ files: File[];
105
+ reason: UploadRejectReason;
106
+ }
107
+ export interface UploadShowUploadButton {
108
+ /** 已达 limit 时仍显示上传入口,选中文件后触发 exceed 事件 */
109
+ showOnExceedLimit?: boolean;
110
+ }
@@ -0,0 +1,321 @@
1
+ import { ExtractPropTypes, PropType } from 'vue';
2
+ import { UploadAction, UploadBeforeRemove, UploadBeforeUpload, UploadCustomRequest, UploadData, UploadFile, UploadListType, UploadName, UploadRequestMethod, UploadResponseUrlKey, UploadShowUploadButton } from './interface';
3
+ export declare const uploadProps: {
4
+ /**
5
+ * @zh 文件列表,支持 v-model:file-list 受控
6
+ * @en File list, controlled by v-model:file-list
7
+ * @vModel
8
+ */
9
+ fileList: {
10
+ type: PropType<UploadFile[]>;
11
+ default: undefined;
12
+ };
13
+ /**
14
+ * @zh 非受控模式下的初始文件列表
15
+ * @en Initial file list in uncontrolled mode
16
+ * @defaultValue []
17
+ */
18
+ defaultFileList: {
19
+ type: PropType<UploadFile[]>;
20
+ default: () => never[];
21
+ };
22
+ /**
23
+ * @zh 上传地址,传函数时按文件动态解析并支持异步
24
+ * @en Upload URL; a function is resolved per file and may be async
25
+ */
26
+ action: {
27
+ type: PropType<UploadAction>;
28
+ default: undefined;
29
+ };
30
+ /**
31
+ * @zh 上传请求方法
32
+ * @en Upload request method
33
+ * @values 'post', 'put', 'patch'
34
+ * @defaultValue 'post'
35
+ */
36
+ method: {
37
+ type: PropType<UploadRequestMethod>;
38
+ default: string;
39
+ };
40
+ /**
41
+ * @zh 请求头
42
+ * @en Request headers
43
+ */
44
+ headers: {
45
+ type: PropType<Record<string, string>>;
46
+ default: undefined;
47
+ };
48
+ /**
49
+ * @zh 附加表单字段,传函数时按文件动态解析
50
+ * @en Extra form fields; a function is resolved per file
51
+ */
52
+ data: {
53
+ type: PropType<UploadData>;
54
+ default: undefined;
55
+ };
56
+ /**
57
+ * @zh 文件字段名,传函数时按文件动态解析
58
+ * @en File field name; a function is resolved per file
59
+ * @defaultValue 'file'
60
+ */
61
+ name: {
62
+ type: PropType<UploadName>;
63
+ default: string;
64
+ };
65
+ /**
66
+ * @zh 是否携带 Cookie
67
+ * @en Whether to send cookies
68
+ * @defaultValue false
69
+ */
70
+ withCredentials: {
71
+ type: BooleanConstructor;
72
+ default: boolean;
73
+ };
74
+ /**
75
+ * @zh 请求超时毫秒数,0 表示不超时
76
+ * @en Request timeout in milliseconds; 0 disables the timeout
77
+ * @defaultValue 0
78
+ */
79
+ timeout: {
80
+ type: NumberConstructor;
81
+ default: number;
82
+ };
83
+ /**
84
+ * @zh 自定义上传请求;返回 Promise 时自动接管状态与结果,返回 `{ abort }` 时手动回调
85
+ * @en Custom upload request; a returned Promise drives the state automatically, an `{ abort }` handle keeps manual control
86
+ */
87
+ customRequest: {
88
+ type: PropType<UploadCustomRequest>;
89
+ default: undefined;
90
+ };
91
+ /**
92
+ * @zh 接受的文件类型,同原生 accept
93
+ * @en Accepted file types, same as the native accept attribute
94
+ */
95
+ accept: {
96
+ type: StringConstructor;
97
+ default: undefined;
98
+ };
99
+ /**
100
+ * @zh 是否允许选择多个文件
101
+ * @en Whether multiple files can be selected
102
+ * @defaultValue false
103
+ */
104
+ multiple: {
105
+ type: BooleanConstructor;
106
+ default: boolean;
107
+ };
108
+ /**
109
+ * @zh 是否支持选择文件夹(含拖拽目录递归)
110
+ * @en Whether directory selection is enabled, including recursive drop traversal
111
+ * @defaultValue false
112
+ */
113
+ directory: {
114
+ type: BooleanConstructor;
115
+ default: boolean;
116
+ };
117
+ /**
118
+ * @zh 移动端捕获来源,透传给原生 input
119
+ * @en Capture source passed to the native input on mobile
120
+ * @values true, 'user', 'environment'
121
+ */
122
+ capture: {
123
+ type: PropType<boolean | "user" | "environment">;
124
+ default: undefined;
125
+ };
126
+ /**
127
+ * @zh 是否支持聚焦后粘贴文件(如截图后 Ctrl / Cmd + V)
128
+ * @en Whether pasting files is enabled while focused, e.g. a screenshot with Ctrl / Cmd + V
129
+ * @defaultValue false
130
+ */
131
+ paste: {
132
+ type: BooleanConstructor;
133
+ default: boolean;
134
+ };
135
+ /**
136
+ * @zh 是否渲染为拖拽上传区域
137
+ * @en Whether to render a drag and drop area
138
+ * @defaultValue false
139
+ */
140
+ draggable: {
141
+ type: BooleanConstructor;
142
+ default: boolean;
143
+ };
144
+ /**
145
+ * @zh 是否禁用
146
+ * @en Whether the upload is disabled
147
+ * @defaultValue false
148
+ */
149
+ disabled: {
150
+ type: BooleanConstructor;
151
+ default: undefined;
152
+ };
153
+ /**
154
+ * @zh 是否选择后立即上传;关闭后需调用 submit 或点击开始上传
155
+ * @en Whether to upload immediately after selection; disable it to call submit manually
156
+ * @defaultValue true
157
+ */
158
+ autoUpload: {
159
+ type: BooleanConstructor;
160
+ default: boolean;
161
+ };
162
+ /**
163
+ * @zh 最大文件数量,0 表示不限;超出部分触发 exceed 事件
164
+ * @en Maximum number of files, 0 means unlimited; extra files trigger the exceed event
165
+ * @defaultValue 0
166
+ */
167
+ limit: {
168
+ type: NumberConstructor;
169
+ default: number;
170
+ };
171
+ /**
172
+ * @zh 上传前置钩子,可拦截或替换文件
173
+ * @en Pre-upload hook that can intercept or replace files
174
+ */
175
+ beforeUpload: {
176
+ type: PropType<UploadBeforeUpload>;
177
+ default: undefined;
178
+ };
179
+ /**
180
+ * @zh 移除前置钩子,返回 false 或 reject 可阻止移除
181
+ * @en Pre-remove hook; returning false or rejecting prevents removal
182
+ */
183
+ beforeRemove: {
184
+ type: PropType<UploadBeforeRemove>;
185
+ default: undefined;
186
+ };
187
+ /**
188
+ * @zh 列表展示形态
189
+ * @en List display type
190
+ * @values 'text', 'picture', 'picture-card'
191
+ * @defaultValue 'text'
192
+ */
193
+ listType: {
194
+ type: PropType<UploadListType>;
195
+ default: string;
196
+ };
197
+ /**
198
+ * @zh 提示文案,拖拽区和图片卡中显示
199
+ * @en Tip text shown in the dragger and picture card
200
+ */
201
+ tip: {
202
+ type: StringConstructor;
203
+ default: undefined;
204
+ };
205
+ /**
206
+ * @zh 是否展示文件列表
207
+ * @en Whether to show the file list
208
+ * @defaultValue true
209
+ */
210
+ showFileList: {
211
+ type: BooleanConstructor;
212
+ default: boolean;
213
+ };
214
+ /**
215
+ * @zh 是否展示上传入口;对象形式可配置达到 limit 后仍显示
216
+ * @en Whether to show the upload trigger; the object form keeps it visible on limit
217
+ * @defaultValue true
218
+ */
219
+ showUploadButton: {
220
+ type: PropType<boolean | UploadShowUploadButton>;
221
+ default: boolean;
222
+ };
223
+ /**
224
+ * @zh 是否展示移除按钮
225
+ * @en Whether to show the remove button
226
+ * @defaultValue true
227
+ */
228
+ showRemoveButton: {
229
+ type: BooleanConstructor;
230
+ default: boolean;
231
+ };
232
+ /**
233
+ * @zh 是否展示重试 / 开始上传按钮
234
+ * @en Whether to show retry / start buttons
235
+ * @defaultValue true
236
+ */
237
+ showRetryButton: {
238
+ type: BooleanConstructor;
239
+ default: boolean;
240
+ };
241
+ /**
242
+ * @zh 是否展示取消上传按钮
243
+ * @en Whether to show the cancel button
244
+ * @defaultValue true
245
+ */
246
+ showCancelButton: {
247
+ type: BooleanConstructor;
248
+ default: boolean;
249
+ };
250
+ /**
251
+ * @zh 是否展示预览按钮
252
+ * @en Whether to show the preview button
253
+ * @defaultValue true
254
+ */
255
+ showPreviewButton: {
256
+ type: BooleanConstructor;
257
+ default: boolean;
258
+ };
259
+ /**
260
+ * @zh 是否展示下载按钮
261
+ * @en Whether to show the download button
262
+ * @defaultValue false
263
+ */
264
+ showDownloadButton: {
265
+ type: BooleanConstructor;
266
+ default: boolean;
267
+ };
268
+ /**
269
+ * @zh 链接是否带 download 属性,点击直接下载
270
+ * @en Whether links carry the download attribute
271
+ * @defaultValue false
272
+ */
273
+ download: {
274
+ type: BooleanConstructor;
275
+ default: boolean;
276
+ };
277
+ /**
278
+ * @zh 有地址时是否渲染为链接
279
+ * @en Whether to render files with a URL as links
280
+ * @defaultValue true
281
+ */
282
+ showLink: {
283
+ type: BooleanConstructor;
284
+ default: boolean;
285
+ };
286
+ /**
287
+ * @zh 内置图片预览,点击图片用 ImagePreview 打开
288
+ * @en Built-in image preview using ImagePreview on click
289
+ * @defaultValue false
290
+ */
291
+ imagePreview: {
292
+ type: BooleanConstructor;
293
+ default: boolean;
294
+ };
295
+ /**
296
+ * @zh 缩略图的原生 loading 策略
297
+ * @en Native loading strategy for thumbnails
298
+ * @values 'eager', 'lazy'
299
+ */
300
+ imageLoading: {
301
+ type: PropType<"eager" | "lazy">;
302
+ default: undefined;
303
+ };
304
+ /**
305
+ * @zh 上传成功后从响应中提取 url 的字段名(支持 `data.url` 嵌套路径)或解析函数
306
+ * @en Field name (nested paths like `data.url` supported) or resolver extracting the file URL from the response
307
+ */
308
+ responseUrlKey: {
309
+ type: PropType<UploadResponseUrlKey>;
310
+ default: undefined;
311
+ };
312
+ /**
313
+ * @zh 上传入口的无障碍名称
314
+ * @en Accessible name of the upload trigger
315
+ */
316
+ ariaLabel: {
317
+ type: StringConstructor;
318
+ default: undefined;
319
+ };
320
+ };
321
+ export type UploadProps = ExtractPropTypes<typeof uploadProps>;
@@ -0,0 +1,15 @@
1
+ import { PropType } from 'vue';
2
+ import { UploadFile } from './interface';
3
+ /** 列表项:文本 / 图片两种行内形态共用,图片卡由 upload-picture-item 承担 */
4
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
5
+ file: {
6
+ type: PropType<UploadFile>;
7
+ required: true;
8
+ };
9
+ }>, () => VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
10
+ file: {
11
+ type: PropType<UploadFile>;
12
+ required: true;
13
+ };
14
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
15
+ export default _default;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 文件列表。
3
+ *
4
+ * - text / picture:入口在上,列表在下
5
+ * - picture-card:卡片瓦片与入口并排折行,tip 渲染在入口卡片下方
6
+ *
7
+ * 列表项走 upload-item 插槽替换时保留容器结构,业务只替换内容即可,
8
+ * 不必重做布局。
9
+ */
10
+ declare const _default: import('vue').DefineComponent<{}, () => any, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
11
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import { PropType } from 'vue';
2
+ import { UploadFile } from './interface';
3
+ /**
4
+ * 图片卡列表项。
5
+ *
6
+ * 状态分层:上传中显示圆形进度并禁用操作;失败态瓦片内显示错误图标,
7
+ * 悬浮遮罩提供重试 / 移除;完成态悬浮遮罩提供预览 / 下载 / 移除。
8
+ */
9
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
10
+ file: {
11
+ type: PropType<UploadFile>;
12
+ required: true;
13
+ };
14
+ }>, () => VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
15
+ file: {
16
+ type: PropType<UploadFile>;
17
+ required: true;
18
+ };
19
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
20
+ export default _default;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 上传入口:隐藏 input + 可点击 / 可聚焦 / 可拖拽的触发区。
3
+ *
4
+ * 触发区始终带 role="button" 与 tabindex,Enter / Space 可唤起文件选择,
5
+ * 拖拽模式额外绑定拖入高亮与释放上传。
6
+ */
7
+ declare const _default: import('vue').DefineComponent<{}, () => VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
8
+ export default _default;
@@ -0,0 +1,48 @@
1
+ import { UploadFile, UploadRequest, UploadRequestOption } from './interface';
2
+ /** 生成列表项 uid,同时刻多次调用也能保持唯一 */
3
+ export declare const genUid: () => string;
4
+ export declare const normalizeMime: (mime?: string) => string;
5
+ export declare const getExtension: (name: string) => string;
6
+ /** 按原生 accept 规则校验文件,用于选择与拖拽两条路径 */
7
+ export declare const matchAccept: (file: File, accept?: string) => boolean;
8
+ export declare const isImageMime: (mime?: string) => boolean;
9
+ /** 判断 File 是否为图片:优先 MIME,缺失时按扩展名 */
10
+ export declare const isImageFile: (file: File) => boolean;
11
+ /** 判断列表项是否可作为图片预览 */
12
+ export declare const isImageItem: (item: UploadFile) => boolean;
13
+ /**
14
+ * 规范化外部file列表项:补 uid 与默认状态。
15
+ * 用 WeakMap 缓存生成的 uid,保证同一对象多次渲染标识稳定。
16
+ */
17
+ export declare const normalizeFile: (item: UploadFile) => UploadFile;
18
+ export declare const normalizeFileList: (list?: UploadFile[]) => UploadFile[];
19
+ export declare const createThumbUrl: (file: File) => string | undefined;
20
+ /** 只回收组件自己创建的 blob 地址,外部传入的地址不动 */
21
+ export declare const revokeThumbUrl: (url?: string) => void;
22
+ /**
23
+ * 判断 customRequest 的返回值是否为 Promise。
24
+ *
25
+ * 用 thenable 判定而不是 `instanceof Promise` / `isPromise`:
26
+ * axios、flyio、async 函数与跨 iframe 的 Promise 都能命中,
27
+ * 同时兼容自定义 thenable。
28
+ */
29
+ export declare const isPromiseLike: (value: unknown) => value is PromiseLike<unknown>;
30
+ /** 取出 Promise / 请求句柄上挂载的 abort 方法 */
31
+ export declare const resolveAbortHandle: (value: unknown) => (() => void) | undefined;
32
+ /**
33
+ * Promise 模式下 resolve 值的归一化。
34
+ *
35
+ * 业务方法直接返回 fetch 的 Response 时:`!ok` 按失败处理,JSON / text 解析后
36
+ * 写入 file.response(与内置 XHR 的 parseResponse 行为一致),二进制等其它类型
37
+ * 保留 Response 本体;axios / flyio 等已解析的响应原样返回。
38
+ */
39
+ export declare const normalizePromiseResponse: (value: unknown) => Promise<unknown>;
40
+ /** 内置 XHR 上传,customRequest 未提供时使用 */
41
+ export declare const uploadRequest: (option: UploadRequestOption) => UploadRequest;
42
+ /**
43
+ * 从拖拽数据中收集文件。
44
+ * directory 模式下递归读取目录,并补 webkitRelativePath,便于展示相对路径。
45
+ */
46
+ export declare const collectDropFiles: (dataTransfer: DataTransfer) => Promise<File[]>;
47
+ /** 从粘贴板数据中取文件 */
48
+ export declare const collectPasteFiles: (dataTransfer: DataTransfer | null) => File[];
@@ -231,13 +231,13 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
231
231
  rotate: number;
232
232
  repeat: boolean;
233
233
  content: string | string[];
234
+ alpha: number;
234
235
  height: number;
235
236
  width: number;
236
237
  zIndex: number;
237
238
  font: WatermarkFont;
238
239
  gap: WatermarkGap;
239
240
  offset: WatermarkGap;
240
- alpha: number;
241
241
  antiTamper: boolean;
242
242
  grayscale: boolean;
243
243
  staggered: boolean;
@@ -64,13 +64,13 @@ export declare const Watermark: {
64
64
  rotate: number;
65
65
  repeat: boolean;
66
66
  content: string | string[];
67
+ alpha: number;
67
68
  height: number;
68
69
  width: number;
69
70
  zIndex: number;
70
71
  font: import('./interface').WatermarkFont;
71
72
  gap: import('./interface').WatermarkGap;
72
73
  offset: import('./interface').WatermarkGap;
73
- alpha: number;
74
74
  antiTamper: boolean;
75
75
  grayscale: boolean;
76
76
  staggered: boolean;
@@ -143,13 +143,13 @@ export declare const Watermark: {
143
143
  rotate: number;
144
144
  repeat: boolean;
145
145
  content: string | string[];
146
+ alpha: number;
146
147
  height: number;
147
148
  width: number;
148
149
  zIndex: number;
149
150
  font: import('./interface').WatermarkFont;
150
151
  gap: import('./interface').WatermarkGap;
151
152
  offset: import('./interface').WatermarkGap;
152
- alpha: number;
153
153
  antiTamper: boolean;
154
154
  grayscale: boolean;
155
155
  staggered: boolean;
@@ -219,13 +219,13 @@ export declare const Watermark: {
219
219
  rotate: number;
220
220
  repeat: boolean;
221
221
  content: string | string[];
222
+ alpha: number;
222
223
  height: number;
223
224
  width: number;
224
225
  zIndex: number;
225
226
  font: import('./interface').WatermarkFont;
226
227
  gap: import('./interface').WatermarkGap;
227
228
  offset: import('./interface').WatermarkGap;
228
- alpha: number;
229
229
  antiTamper: boolean;
230
230
  grayscale: boolean;
231
231
  staggered: boolean;
@@ -13,6 +13,8 @@ const r = {
13
13
  "--x-color-border-focus": "var(--x-color-primary-6)",
14
14
  "--x-color-menu-dark-hover": "var(--x-color-primary)",
15
15
  "--x-color-menu-dark-submenu-selected-bg": "color-mix(in srgb, var(--x-color-primary) 45%, transparent)",
16
+ "--x-color-picker-color-swatch_active": "var(--x-color-primary-text)",
17
+ "--x-color-picker-color-text_active": "var(--x-color-primary-text)",
16
18
  "--x-color-primary-button-text": "var(--x-color-primary-text)",
17
19
  "--x-color-primary-light-1": "var(--x-color-primary-1)",
18
20
  "--x-color-primary-light-2": "var(--x-color-primary-light-1)",
@@ -40,9 +42,12 @@ const r = {
40
42
  "--x-field-status-validating-text": "var(--x-color-primary-text)",
41
43
  "--x-focus-bc": "var(--x-color-primary)",
42
44
  "--x-form-border-color-focus": "var(--x-field-color-border-focus)",
45
+ "--x-heatmap-color-level-1": "var(--x-color-primary-1)",
46
+ "--x-heatmap-color-level-2": "var(--x-color-primary-2)",
47
+ "--x-heatmap-color-level-3": "var(--x-color-primary-3)",
48
+ "--x-heatmap-color-level-4": "var(--x-color-primary-5)",
49
+ "--x-heatmap-color-level-5": "var(--x-color-primary-6)",
43
50
  "--x-hover-color": "var(--x-color-primary)",
44
- "--x-image-preview-color-action-hover-bg": "var(--x-color-primary-subtle)",
45
- "--x-image-preview-color-action-hover-text": "var(--x-color-primary-solid)",
46
51
  "--x-input-color-border_focus": "var(--x-field-color-border-focus)",
47
52
  "--x-input-color-shadow_focus": "var(--x-field-color-shadow-focus)",
48
53
  "--x-input-feedback-icon-color_validating": "var(--x-field-status-validating-icon)",
@@ -81,6 +86,7 @@ const r = {
81
86
  "--x-radio-color-bg_checked_disabled": "var(--x-color-primary-light-3)",
82
87
  "--x-select-bc": "var(--x-color-primary)",
83
88
  "--x-select-color": "var(--x-color-primary)",
89
+ "--x-spin-tip-shimmer-color-highlight": "color-mix( in srgb, var(--x-color-primary-text) 30%, var(--x-color-white) )",
84
90
  "--x-table-color-bg-body-row_active": "var(--x-color-primary-subtle)",
85
91
  "--x-table-color-border_resizing": "var(--x-color-primary-6)",
86
92
  "--x-table-color-header-filters-icon_active": "var(--x-color-primary-6)",
@@ -96,7 +102,8 @@ const r = {
96
102
  "--x-time-picker-confirm-color": "var(--x-color-primary-text)",
97
103
  "--x-time-range-selector-color-default": "var(--x-color-primary-6)",
98
104
  "--x-timeline-dot-hollow-shadow": "0 0 0 1px color-mix( in srgb, var(--x-color-primary-solid) 10%, var(--x-color-transparent) )",
99
- "--x-timeline-dot-shadow": "0 0 0 1px color-mix(in srgb, var(--x-color-primary-solid) 8%, var(--x-color-transparent))"
105
+ "--x-timeline-dot-shadow": "0 0 0 1px color-mix(in srgb, var(--x-color-primary-solid) 8%, var(--x-color-transparent))",
106
+ "--x-upload-color-border-hover": "var(--x-color-primary)"
100
107
  },
101
108
  success: {
102
109
  "--x-button-color-bg-success-solid": "var(--x-color-success-solid)",
@@ -159,7 +166,6 @@ const r = {
159
166
  "--x-field-status-error-shadow-color-focus": "var(--x-color-danger-2)",
160
167
  "--x-field-status-error-text": "var(--x-color-danger-text)",
161
168
  "--x-form-border-color-error": "var(--x-field-color-border-error)",
162
- "--x-image-color-error-bg": "var(--x-color-danger-solid)",
163
169
  "--x-input-color-bg_error": "var(--x-field-color-bg-error)",
164
170
  "--x-input-color-bg_error_hover": "var(--x-field-color-bg-error-hover)",
165
171
  "--x-input-color-border_error": "var(--x-field-color-border-error)",