@rainbow-oh/yee-c 0.9.2 → 0.10.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 (109) hide show
  1. package/dist/cjs/Input/style/index.less +1 -0
  2. package/dist/cjs/Tabs/demo/overflow-center.d.ts +3 -0
  3. package/dist/cjs/Tabs/demo/overflow-center.js +54 -0
  4. package/dist/cjs/Tabs/hooks/useNavListMove.d.ts +2 -1
  5. package/dist/cjs/Tabs/hooks/useNavListMove.js +51 -16
  6. package/dist/cjs/Tabs/hooks/useTabScroll.d.ts +1 -0
  7. package/dist/cjs/Tabs/hooks/useTabScroll.js +5 -1
  8. package/dist/cjs/Tabs/interface.d.ts +9 -0
  9. package/dist/cjs/Tabs/style/index.less +5 -0
  10. package/dist/cjs/Tabs/tab-header/index.d.ts +1 -0
  11. package/dist/cjs/Tabs/tab-header/index.js +9 -2
  12. package/dist/cjs/Tabs/tabs.js +4 -1
  13. package/dist/cjs/Upload/demo/auto-upload.d.ts +3 -0
  14. package/dist/cjs/Upload/demo/auto-upload.js +65 -0
  15. package/dist/cjs/Upload/demo/basic.js +5 -10
  16. package/dist/cjs/Upload/demo/controlled.js +4 -4
  17. package/dist/cjs/Upload/demo/pictureWall.js +14 -13
  18. package/dist/cjs/Upload/dragger.d.ts +2 -1
  19. package/dist/cjs/Upload/dragger.js +32 -21
  20. package/dist/cjs/Upload/index.d.ts +1 -1
  21. package/dist/cjs/Upload/interface.d.ts +67 -120
  22. package/dist/cjs/Upload/style/index.less +40 -13
  23. package/dist/cjs/Upload/upload.d.ts +2 -2
  24. package/dist/cjs/Upload/upload.js +435 -185
  25. package/dist/cjs/Upload/uploaded-list/index.d.ts +2 -1
  26. package/dist/cjs/Upload/uploaded-list/index.js +6 -3
  27. package/dist/cjs/Upload/uploaded-list/uploaded-item.d.ts +6 -3
  28. package/dist/cjs/Upload/uploaded-list/uploaded-item.js +127 -138
  29. package/dist/cjs/style/size.css +1 -1
  30. package/dist/cjs/style/themes.css +1 -1
  31. package/dist/cjs/style/variables.css +2 -2
  32. package/dist/cjs/utils/ax/core.d.ts +3 -1
  33. package/dist/cjs/utils/ax/core.js +24 -37
  34. package/dist/cjs/utils/ax/index.d.ts +3 -1
  35. package/dist/cjs/utils/folder-scanner.d.ts +1 -1
  36. package/dist/cjs/utils/folder-scanner.js +43 -34
  37. package/dist/cjs/version.d.ts +1 -1
  38. package/dist/cjs/version.js +1 -1
  39. package/dist/esm/Input/style/index.less +1 -0
  40. package/dist/esm/Tabs/demo/overflow-center.d.ts +3 -0
  41. package/dist/esm/Tabs/demo/overflow-center.js +61 -0
  42. package/dist/esm/Tabs/hooks/useNavListMove.d.ts +2 -1
  43. package/dist/esm/Tabs/hooks/useNavListMove.js +62 -25
  44. package/dist/esm/Tabs/hooks/useTabScroll.d.ts +1 -0
  45. package/dist/esm/Tabs/hooks/useTabScroll.js +9 -0
  46. package/dist/esm/Tabs/interface.d.ts +9 -0
  47. package/dist/esm/Tabs/style/index.less +5 -0
  48. package/dist/esm/Tabs/tab-header/index.d.ts +1 -0
  49. package/dist/esm/Tabs/tab-header/index.js +13 -2
  50. package/dist/esm/Tabs/tabs.js +4 -2
  51. package/dist/esm/Upload/demo/auto-upload.d.ts +3 -0
  52. package/dist/esm/Upload/demo/auto-upload.js +42 -0
  53. package/dist/esm/Upload/demo/basic.js +5 -11
  54. package/dist/esm/Upload/demo/controlled.js +8 -6
  55. package/dist/esm/Upload/demo/pictureWall.js +17 -14
  56. package/dist/esm/Upload/dragger.d.ts +2 -1
  57. package/dist/esm/Upload/dragger.js +10 -5
  58. package/dist/esm/Upload/index.d.ts +1 -1
  59. package/dist/esm/Upload/interface.d.ts +67 -120
  60. package/dist/esm/Upload/style/index.less +40 -13
  61. package/dist/esm/Upload/upload.d.ts +2 -2
  62. package/dist/esm/Upload/upload.js +573 -271
  63. package/dist/esm/Upload/uploaded-list/index.d.ts +2 -1
  64. package/dist/esm/Upload/uploaded-list/index.js +9 -4
  65. package/dist/esm/Upload/uploaded-list/uploaded-item.d.ts +6 -3
  66. package/dist/esm/Upload/uploaded-list/uploaded-item.js +145 -150
  67. package/dist/esm/style/size.css +1 -1
  68. package/dist/esm/style/themes.css +1 -1
  69. package/dist/esm/style/variables.css +2 -2
  70. package/dist/esm/utils/ax/core.d.ts +3 -1
  71. package/dist/esm/utils/ax/core.js +32 -40
  72. package/dist/esm/utils/ax/index.d.ts +3 -1
  73. package/dist/esm/utils/folder-scanner.d.ts +1 -1
  74. package/dist/esm/utils/folder-scanner.js +76 -75
  75. package/dist/esm/version.d.ts +1 -1
  76. package/dist/esm/version.js +1 -1
  77. package/dist/umd/yee-c.min.css +2 -2
  78. package/dist/umd/yee-c.min.js +1 -1
  79. package/package.json +1 -1
  80. package/src/Input/style/index.less +1 -0
  81. package/src/Tabs/demo/overflow-center.tsx +35 -0
  82. package/src/Tabs/hooks/useNavListMove.ts +60 -18
  83. package/src/Tabs/hooks/useTabScroll.ts +7 -1
  84. package/src/Tabs/index.en-US.md +33 -31
  85. package/src/Tabs/index.zh-CN.md +33 -31
  86. package/src/Tabs/interface.ts +9 -0
  87. package/src/Tabs/style/index.less +5 -0
  88. package/src/Tabs/tab-header/index.tsx +12 -2
  89. package/src/Tabs/tabs.tsx +2 -0
  90. package/src/Upload/demo/auto-upload.tsx +35 -0
  91. package/src/Upload/demo/basic.tsx +7 -11
  92. package/src/Upload/demo/controlled.tsx +12 -8
  93. package/src/Upload/demo/directory.tsx +3 -4
  94. package/src/Upload/demo/drag.tsx +5 -12
  95. package/src/Upload/demo/multiple.tsx +3 -4
  96. package/src/Upload/demo/pictureWall.tsx +22 -21
  97. package/src/Upload/dragger.tsx +47 -34
  98. package/src/Upload/index.en-US.md +63 -43
  99. package/src/Upload/index.ts +8 -1
  100. package/src/Upload/index.zh-CN.md +62 -42
  101. package/src/Upload/interface.ts +68 -120
  102. package/src/Upload/style/index.less +40 -13
  103. package/src/Upload/upload.tsx +546 -215
  104. package/src/Upload/uploaded-list/index.tsx +9 -5
  105. package/src/Upload/uploaded-list/uploaded-item.tsx +199 -228
  106. package/src/style/size.css +1 -1
  107. package/src/utils/ax/core.ts +28 -41
  108. package/src/utils/folder-scanner.ts +51 -37
  109. package/src/version.ts +1 -1
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { UploadFile } from '../interface';
2
+ import type { UploadFile } from '../interface';
3
3
  interface UploadListProps {
4
4
  prefixCls?: string;
5
5
  fileList: UploadFile[];
@@ -18,6 +18,7 @@ interface UploadListProps {
18
18
  onRemove?: (file: UploadFile) => void;
19
19
  onReUpload?: (file: UploadFile) => void;
20
20
  onPreview?: (file: UploadFile) => void;
21
+ isPreviewable?: (file: UploadFile) => boolean;
21
22
  renderUploadTrigger?: () => React.ReactNode;
22
23
  }
23
24
  declare const UploadList: (props: UploadListProps) => string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element | null | undefined;
@@ -64,17 +64,20 @@ module.exports = __toCommonJS(uploaded_list_exports);
64
64
  var import_react = __toESM(require("react"));
65
65
  var import_uploaded_item = __toESM(require("./uploaded-item"));
66
66
  var UploadList = (props) => {
67
- const _a = props, { prefixCls, fileList, renderUploadTrigger } = _a, rest = __objRest(_a, ["prefixCls", "fileList", "renderUploadTrigger"]);
67
+ const _a = props, { prefixCls, fileList, isPreviewable, renderUploadTrigger } = _a, rest = __objRest(_a, ["prefixCls", "fileList", "isPreviewable", "renderUploadTrigger"]);
68
68
  if (!Array.isArray(fileList) || fileList.length === 0) {
69
69
  return renderUploadTrigger == null ? void 0 : renderUploadTrigger();
70
70
  }
71
- return /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-list` }, fileList.map((file) => {
71
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-list`, "aria-live": "polite" }, fileList.map((file, index) => {
72
+ var _a2;
72
73
  return /* @__PURE__ */ import_react.default.createElement(
73
74
  import_uploaded_item.default,
74
75
  __spreadProps(__spreadValues({}, rest), {
75
76
  prefixCls,
76
77
  file,
77
- key: file.uid
78
+ fileList,
79
+ previewable: (_a2 = isPreviewable == null ? void 0 : isPreviewable(file)) != null ? _a2 : false,
80
+ key: file.uid || `${file.name}-${index}`
78
81
  })
79
82
  );
80
83
  }), renderUploadTrigger == null ? void 0 : renderUploadTrigger());
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
- import { UploadFile } from '../interface';
3
- declare function UploadedItem(props: {
2
+ import type { UploadFile } from '../interface';
3
+ interface UploadedItemProps {
4
4
  prefixCls?: string;
5
5
  file: UploadFile;
6
+ fileList: UploadFile[];
6
7
  listType?: string;
7
8
  progress?: boolean | object;
8
9
  showUploadList?: boolean | {
@@ -18,5 +19,7 @@ declare function UploadedItem(props: {
18
19
  onRemove?: (file: UploadFile) => void;
19
20
  onReUpload?: (file: UploadFile) => void;
20
21
  onPreview?: (file: UploadFile) => void;
21
- }): React.JSX.Element;
22
+ previewable?: boolean;
23
+ }
24
+ declare function UploadedItem(props: UploadedItemProps): React.JSX.Element;
22
25
  export default UploadedItem;
@@ -36,17 +36,15 @@ var import_clsx = __toESM(require("clsx"));
36
36
  var import_lucide_react = require("lucide-react");
37
37
  var import_react = __toESM(require("react"));
38
38
  var import_Button = __toESM(require("../../Button"));
39
- var import_Dialog = __toESM(require("../../Dialog"));
40
- var import_useEvent = __toESM(require("../../hooks/useEvent"));
41
39
  var import_Space = __toESM(require("../../Space"));
42
40
  var import_Spin = __toESM(require("../../Spin"));
43
41
  var import_Tooltip = __toESM(require("../../Tooltip"));
44
42
  var import_upload_progress = __toESM(require("../upload-progress"));
45
43
  var fileState = {
46
44
  uploading: /* @__PURE__ */ import_react.default.createElement(import_Spin.default, { type: "spin", size: "small" }),
47
- error: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.CircleX, null),
48
- success: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.CircleCheck, null),
49
- ready: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, null)
45
+ error: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.CircleX, { size: 14 }),
46
+ success: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.CircleCheck, { size: 14 }),
47
+ ready: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 })
50
48
  };
51
49
  var fileStatusTitle = {
52
50
  ready: "Upload Ready",
@@ -55,91 +53,85 @@ var fileStatusTitle = {
55
53
  success: "Upload Success"
56
54
  };
57
55
  var fileIcon = {
58
- image: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Image, null),
59
- xlsx: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, null),
60
- docx: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, null),
61
- pdf: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, null),
62
- zip: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, null),
63
- unknown: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, null)
56
+ image: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Image, { size: 14 }),
57
+ xlsx: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 }),
58
+ docx: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 }),
59
+ pdf: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 }),
60
+ zip: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 }),
61
+ unknown: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 })
64
62
  };
65
63
  var getFileType = (type) => {
66
64
  const lower = (type == null ? void 0 : type.toLowerCase()) || "";
67
- const images = ["jpg", "jpeg", "png", "gif", "bmp"];
68
- if (images.includes(lower)) {
65
+ const images = ["jpg", "jpeg", "png", "gif", "bmp", "webp", "svg"];
66
+ if (lower.startsWith("image/") || images.includes(lower)) {
69
67
  return "image";
70
68
  }
71
69
  if (lower === "xlsx" || lower === "xls") {
72
70
  return "xlsx";
73
71
  }
74
- if (lower === "pdf") {
72
+ if (lower === "pdf" || lower === "application/pdf") {
75
73
  return "pdf";
76
74
  }
77
75
  if (lower === "docx" || lower === "doc") {
78
76
  return "docx";
79
77
  }
80
- if (lower === "zip") {
78
+ if (lower === "zip" || lower.includes("zip")) {
81
79
  return "zip";
82
80
  }
83
81
  return "unknown";
84
82
  };
85
83
  function UploadedItem(props) {
84
+ var _a, _b, _c, _d;
86
85
  const {
87
- prefixCls,
86
+ prefixCls = "yee-upload",
88
87
  file,
88
+ fileList,
89
89
  listType,
90
90
  progress,
91
91
  showUploadList,
92
92
  itemRender,
93
93
  onRemove,
94
94
  onReUpload,
95
- onPreview
95
+ onPreview,
96
+ previewable = false
96
97
  } = props;
97
- const {
98
- showTooltip = true,
99
- showReload = true,
100
- showRemoveIcon = true,
101
- showPreviewIcon = true,
102
- reloadIcon,
103
- removeIcon,
104
- previewIcon
105
- } = typeof showUploadList === "object" ? showUploadList : {};
98
+ const uploadListConfig = typeof showUploadList === "object" ? showUploadList : void 0;
99
+ const showTooltip = (_a = uploadListConfig == null ? void 0 : uploadListConfig.showTooltip) != null ? _a : true;
100
+ const showReload = (_b = uploadListConfig == null ? void 0 : uploadListConfig.showReload) != null ? _b : true;
101
+ const showRemoveIcon = (_c = uploadListConfig == null ? void 0 : uploadListConfig.showRemoveIcon) != null ? _c : true;
102
+ const showPreviewIcon = (_d = uploadListConfig == null ? void 0 : uploadListConfig.showPreviewIcon) != null ? _d : true;
103
+ const reloadIcon = uploadListConfig == null ? void 0 : uploadListConfig.reloadIcon;
104
+ const removeIcon = uploadListConfig == null ? void 0 : uploadListConfig.removeIcon;
105
+ const previewIcon = uploadListConfig == null ? void 0 : uploadListConfig.previewIcon;
106
106
  const [objectUrl, setObjectUrl] = (0, import_react.useState)("");
107
- const [imagePreviewOpen, setImagePreviewOpen] = (0, import_react.useState)(false);
108
- const previewImageSrc = (0, import_react.useRef)("");
109
107
  (0, import_react.useEffect)(() => {
110
- if (file.raw && file.raw instanceof File) {
108
+ if (file.raw instanceof File) {
111
109
  const url = URL.createObjectURL(file.raw);
112
110
  setObjectUrl(url);
113
- return () => {
114
- URL.revokeObjectURL(url);
115
- };
111
+ return () => URL.revokeObjectURL(url);
116
112
  }
113
+ setObjectUrl("");
114
+ return void 0;
117
115
  }, [file.raw]);
118
- const closeDialog = (0, import_useEvent.default)(() => {
119
- setImagePreviewOpen(false);
120
- });
121
- const showImage = () => {
122
- if (onPreview) {
123
- onPreview(file);
124
- } else if (objectUrl) {
125
- previewImageSrc.current = objectUrl;
126
- setImagePreviewOpen(true);
127
- }
128
- };
116
+ const previewSrc = file.url || objectUrl;
117
+ const inferredType = file.type || file.name.split(".").pop() || "";
118
+ const fileType = getFileType(inferredType);
119
+ const isImage = fileType === "image";
129
120
  const renderReload = () => {
130
121
  if (!showReload) {
131
122
  return null;
132
123
  }
133
- const icon = reloadIcon || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.RotateCcw, { size: 18 });
134
124
  return /* @__PURE__ */ import_react.default.createElement(
135
125
  import_Button.default,
136
126
  {
137
127
  size: "small",
138
- icon,
128
+ icon: reloadIcon || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.RotateCcw, { size: 18 }),
139
129
  variant: "text",
140
130
  color: "danger",
141
- onClick: (e) => {
142
- e.stopPropagation();
131
+ "aria-label": `Retry ${file.name}`,
132
+ title: `Retry ${file.name}`,
133
+ onClick: (event) => {
134
+ event.stopPropagation();
143
135
  onReUpload == null ? void 0 : onReUpload(file);
144
136
  }
145
137
  }
@@ -149,137 +141,134 @@ function UploadedItem(props) {
149
141
  if (!showRemoveIcon) {
150
142
  return null;
151
143
  }
152
- const icon = removeIcon || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Trash2, { size: 18 });
153
144
  return /* @__PURE__ */ import_react.default.createElement(
154
145
  import_Button.default,
155
146
  {
156
147
  size: "small",
157
- icon,
148
+ icon: removeIcon || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Trash2, { size: 16 }),
158
149
  variant: "text",
159
150
  color: "danger",
160
- onClick: (e) => {
161
- e.stopPropagation();
151
+ "aria-label": `Remove ${file.name}`,
152
+ title: `Remove ${file.name}`,
153
+ onClick: (event) => {
154
+ event.stopPropagation();
162
155
  onRemove == null ? void 0 : onRemove(file);
163
156
  }
164
157
  }
165
158
  );
166
159
  };
167
160
  const renderPreview = () => {
168
- var _a;
169
- if (!showPreviewIcon) {
161
+ if (!showPreviewIcon || !isImage || !previewable) {
170
162
  return null;
171
163
  }
172
- const icon = previewIcon || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Eye, { size: 18 });
173
- const fileType = getFileType(file.type || "");
174
- if (fileType === "image" || ((_a = file.type) == null ? void 0 : _a.startsWith("image/"))) {
175
- return /* @__PURE__ */ import_react.default.createElement(
176
- import_Button.default,
177
- {
178
- size: "small",
179
- icon,
180
- variant: "text",
181
- onClick: (e) => {
182
- e.stopPropagation();
183
- showImage();
184
- }
164
+ return /* @__PURE__ */ import_react.default.createElement(
165
+ import_Button.default,
166
+ {
167
+ size: "small",
168
+ icon: previewIcon || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Eye, { size: 16 }),
169
+ variant: "text",
170
+ "aria-label": `Preview ${file.name}`,
171
+ title: `Preview ${file.name}`,
172
+ onClick: (event) => {
173
+ event.stopPropagation();
174
+ onPreview == null ? void 0 : onPreview(file);
185
175
  }
186
- );
176
+ }
177
+ );
178
+ };
179
+ const getShowCase = () => {
180
+ if (file.status === "error" || !isImage) {
181
+ return fileIcon[fileType] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 });
187
182
  }
188
- return null;
183
+ if (previewSrc) {
184
+ return /* @__PURE__ */ import_react.default.createElement("img", { src: previewSrc, alt: file.name });
185
+ }
186
+ return fileIcon[fileType] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 });
189
187
  };
190
188
  if (listType === "picture-wall") {
191
- const fileType = getFileType(file.type || "");
192
- const getShowCase = () => {
193
- if (file.status === "error" || fileType !== "image") {
194
- return fileIcon[fileType] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 18 });
195
- }
196
- if (fileType === "image" && objectUrl) {
197
- return /* @__PURE__ */ import_react.default.createElement("img", { src: objectUrl, alt: file.name });
198
- }
199
- return fileIcon[fileType] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 18 });
200
- };
201
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
189
+ return /* @__PURE__ */ import_react.default.createElement(
202
190
  "div",
203
191
  {
204
192
  className: (0, import_clsx.default)(`${prefixCls}-picture-wall-item`, {
205
- [`${prefixCls}-state-` + file.status]: file.status
193
+ [`${prefixCls}-state-${file.status}`]: file.status
206
194
  }),
207
- key: file.uid
195
+ "aria-label": `${file.name}: ${fileStatusTitle[file.status]}`
208
196
  },
209
- file.status === "uploading" ? /* @__PURE__ */ import_react.default.createElement(import_upload_progress.default, { file, progress }) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, file.status === "error" ? /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-wall-item-error` }, getShowCase(), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-picture-wall-name` }, file.name)) : /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-wall-item-content` }, getShowCase(), fileType !== "image" && /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-picture-wall-name` }, file.name)), /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-wall-item-operate` }, file.status === "error" ? renderReload() : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, renderPreview(), renderTrash())))
210
- ), /* @__PURE__ */ import_react.default.createElement(
211
- import_Dialog.default,
212
- {
213
- className: `${prefixCls}-picture-dialog`,
214
- open: imagePreviewOpen,
215
- onCancel: closeDialog,
216
- footer: false
217
- },
218
- /* @__PURE__ */ import_react.default.createElement(
219
- "img",
197
+ file.status === "uploading" ? /* @__PURE__ */ import_react.default.createElement(
198
+ import_upload_progress.default,
220
199
  {
221
- src: previewImageSrc.current,
222
- alt: "preview",
223
- style: { maxWidth: "100%" }
200
+ prefixCls,
201
+ file,
202
+ progress
224
203
  }
225
- )
226
- ));
204
+ ) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, file.status === "error" ? /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-wall-item-error` }, getShowCase(), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-picture-wall-name` }, file.name)) : /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-wall-item-content` }, getShowCase(), !isImage && /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-picture-wall-name` }, file.name)), /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-wall-item-operate` }, file.status === "error" ? renderReload() : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, renderPreview(), renderTrash())))
205
+ );
227
206
  }
228
207
  if (listType === "picture-list") {
229
- const fileType = getFileType(file.type || "");
230
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
208
+ return /* @__PURE__ */ import_react.default.createElement(
231
209
  "div",
232
210
  {
233
211
  className: (0, import_clsx.default)(`${prefixCls}-picture-list-item`, {
234
- [`${prefixCls}-state-` + file.status]: file.status
212
+ [`${prefixCls}-state-${file.status}`]: file.status
235
213
  }),
236
- key: file.uid
214
+ "aria-label": `${file.name}: ${fileStatusTitle[file.status]}`
237
215
  },
238
- file.status === "uploading" ? /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-uploading` }, /* @__PURE__ */ import_react.default.createElement(import_Spin.default, { className: `${prefixCls}-uploading-spin`, type: "spin" }), /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-uploading-content` }, /* @__PURE__ */ import_react.default.createElement("div", null, file.name ? file.name : "Uploading..."), /* @__PURE__ */ import_react.default.createElement(import_upload_progress.default, { file, progress }))) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-list-item-content` }, file.status === "error" ? /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Image, null) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, fileType === "image" && objectUrl ? /* @__PURE__ */ import_react.default.createElement(
216
+ file.status === "uploading" ? /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-uploading` }, /* @__PURE__ */ import_react.default.createElement(import_Spin.default, { className: `${prefixCls}-uploading-spin`, type: "spin" }), /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-uploading-content` }, /* @__PURE__ */ import_react.default.createElement("div", null, file.name || "Uploading..."), /* @__PURE__ */ import_react.default.createElement(
217
+ import_upload_progress.default,
218
+ {
219
+ prefixCls,
220
+ file,
221
+ progress
222
+ }
223
+ ))) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-list-item-content` }, file.status === "error" ? /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Image, null) : isImage && previewSrc ? /* @__PURE__ */ import_react.default.createElement(
239
224
  "img",
240
225
  {
241
226
  className: `${prefixCls}-picture-list-header-img`,
242
- src: objectUrl,
227
+ src: previewSrc,
243
228
  alt: file.name
244
229
  }
245
- ) : fileIcon[fileType] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Image, null)), /* @__PURE__ */ import_react.default.createElement("span", null, file.name)), /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-list-item-operate` }, file.status === "error" && renderReload(), renderPreview(), renderTrash()))
246
- ));
230
+ ) : fileIcon[fileType] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Image, { size: 14 }), /* @__PURE__ */ import_react.default.createElement("span", null, file.name)), /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-picture-list-item-operate` }, file.status === "error" && renderReload(), renderPreview(), renderTrash()))
231
+ );
247
232
  }
248
- const renderItem = () => {
249
- const node = /* @__PURE__ */ import_react.default.createElement(
250
- "div",
233
+ const itemNode = /* @__PURE__ */ import_react.default.createElement(
234
+ "div",
235
+ {
236
+ className: (0, import_clsx.default)(`${prefixCls}-list-item`, {
237
+ [`${prefixCls}-state-${file.status}`]: file.status,
238
+ [`${prefixCls}-list-item-clickable`]: previewable
239
+ }),
240
+ role: previewable ? "button" : void 0,
241
+ tabIndex: previewable ? 0 : void 0,
242
+ "aria-label": `${file.name}: ${fileStatusTitle[file.status]}`,
243
+ onClick: () => previewable && (onPreview == null ? void 0 : onPreview(file)),
244
+ onKeyDown: (event) => {
245
+ if (previewable && (event.key === "Enter" || event.key === " ")) {
246
+ event.preventDefault();
247
+ onPreview == null ? void 0 : onPreview(file);
248
+ }
249
+ }
250
+ },
251
+ /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-label` }, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-icon`, "aria-hidden": "true" }, fileState[file.status] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 14 })), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-item-name-content` }, file.name)),
252
+ file.status !== "uploading" && /* @__PURE__ */ import_react.default.createElement(
253
+ import_Space.default,
251
254
  {
252
- className: (0, import_clsx.default)(`${prefixCls}-list-item`, {
253
- [`${prefixCls}-state-` + file.status]: file.status,
254
- [`${prefixCls}-list-item-clickable`]: !!onPreview
255
- }),
256
- onClick: () => onPreview == null ? void 0 : onPreview(file),
257
- key: file.uid
255
+ className: `${prefixCls}-item-operate`,
256
+ gap: 8,
257
+ onClick: (event) => event.stopPropagation()
258
258
  },
259
- /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", alignItems: "center" } }, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-icon` }, fileState[file.status] || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Paperclip, { size: 18 })), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-item-name-content` }, file.name)),
260
- file.status !== "uploading" && /* @__PURE__ */ import_react.default.createElement(
261
- import_Space.default,
262
- {
263
- className: `${prefixCls}-item-operate`,
264
- gap: 8,
265
- onClick: (event) => event.stopPropagation()
266
- },
267
- itemRender == null ? void 0 : itemRender(file, []),
268
- file.status === "error" ? renderReload() : renderPreview(),
269
- renderTrash()
270
- )
271
- );
272
- if (showTooltip) {
273
- return /* @__PURE__ */ import_react.default.createElement(
274
- import_Tooltip.default,
275
- {
276
- title: fileStatusTitle[file.status] || fileStatusTitle.ready
277
- },
278
- node
279
- );
259
+ itemRender == null ? void 0 : itemRender(file, fileList),
260
+ file.status === "error" ? renderReload() : renderPreview(),
261
+ renderTrash()
262
+ )
263
+ );
264
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, showTooltip ? /* @__PURE__ */ import_react.default.createElement(import_Tooltip.default, { title: fileStatusTitle[file.status] }, itemNode) : itemNode, file.status === "uploading" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-progress`, title: file.name }, /* @__PURE__ */ import_react.default.createElement(
265
+ import_upload_progress.default,
266
+ {
267
+ prefixCls,
268
+ file,
269
+ progress,
270
+ showInfo: true
280
271
  }
281
- return node;
282
- };
283
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, renderItem(), file.status === "uploading" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-progress`, title: file.name }, /* @__PURE__ */ import_react.default.createElement(import_upload_progress.default, { file, progress, showInfo: true })));
272
+ )));
284
273
  }
285
274
  var uploaded_item_default = UploadedItem;
@@ -743,7 +743,7 @@
743
743
  --yee-tabs-operation-container-margin-top: -8px;
744
744
  --yee-tabs-operation-container-padding: 4px 0;
745
745
  --yee-tabs-operation-tab-height: 32px;
746
- --yee-tabs-operation-tab-padding: 5px 12px;
746
+ --yee-tabs-operation-tab-padding: 0 12px;
747
747
  --yee-tabs-tab-group-margin-left: 4px;
748
748
  --yee-tabs-tab-group-container-padding: 8px;
749
749
  --yee-tabs-tab-group-container-line-height: 32px;
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-08-26T07:19:52.815Z
4
+ * Generated on 2026-09-02T06:10:08.769Z
5
5
  */
6
6
 
7
7
  /* ========== color.blue.css ========== */
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-08-26T07:19:52.815Z
4
+ * Generated on 2026-09-02T06:10:08.769Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -1865,7 +1865,7 @@
1865
1865
  --yee-tabs-operation-container-margin-top: -8px;
1866
1866
  --yee-tabs-operation-container-padding: 4px 0;
1867
1867
  --yee-tabs-operation-tab-height: 32px;
1868
- --yee-tabs-operation-tab-padding: 5px 12px;
1868
+ --yee-tabs-operation-tab-padding: 0 12px;
1869
1869
  --yee-tabs-tab-group-margin-left: 4px;
1870
1870
  --yee-tabs-tab-group-container-padding: 8px;
1871
1871
  --yee-tabs-tab-group-container-line-height: 32px;
@@ -1,5 +1,7 @@
1
1
  import { AxConfig } from './interface';
2
2
  declare class Ax {
3
- request(configOrUrl: AxConfig | string): Promise<unknown>;
3
+ request(configOrUrl: AxConfig | string): Promise<Response> | (Promise<any> & {
4
+ abort: () => void;
5
+ });
4
6
  }
5
7
  export default Ax;
@@ -60,8 +60,6 @@ function buildUrl(config) {
60
60
  return fullpath;
61
61
  }
62
62
  var Ax = class {
63
- // eslint-disable-next-line @typescript-eslint/no-empty-function
64
- // constructor() {}
65
63
  request(configOrUrl) {
66
64
  var _a;
67
65
  let config = getDefaultConfig();
@@ -83,9 +81,10 @@ var Ax = class {
83
81
  body: config.data
84
82
  }));
85
83
  }
86
- return new Promise((resolve, reject) => {
84
+ let xhr;
85
+ const request = new Promise((resolve, reject) => {
87
86
  var _a2;
88
- let xhr = new XMLHttpRequest();
87
+ xhr = new XMLHttpRequest();
89
88
  const {
90
89
  headers,
91
90
  timeout,
@@ -98,7 +97,6 @@ var Ax = class {
98
97
  onTimeout,
99
98
  onLoaded,
100
99
  formDataWithBoundary = true
101
- // Set boundary for form-data upload type
102
100
  } = config;
103
101
  if ((!data || (0, import_utils.getType)(data) === "FormData") && headers) {
104
102
  if (formDataWithBoundary) {
@@ -113,64 +111,53 @@ var Ax = class {
113
111
  xhr.timeout = timeout;
114
112
  }
115
113
  xhr.upload.onprogress = function(event) {
116
- if (onUploadProgress) {
117
- onUploadProgress(event, xhr);
118
- }
114
+ onUploadProgress == null ? void 0 : onUploadProgress(event, xhr);
119
115
  };
120
116
  xhr.onreadystatechange = function() {
121
- if (xhr.readyState === XMLHttpRequest.DONE) {
117
+ if ((xhr == null ? void 0 : xhr.readyState) === XMLHttpRequest.DONE) {
122
118
  if (xhr.status >= 200 && xhr.status <= 299) {
123
119
  const type = this.getResponseHeader("content-type") || "";
124
120
  const isJsonType = type.indexOf("application/json") > -1;
125
- let data2;
121
+ let responseData;
126
122
  if (isJsonType) {
127
123
  try {
128
- data2 = JSON.parse(xhr.response);
129
- } catch (err) {
130
- data2 = xhr.response;
124
+ responseData = JSON.parse(xhr.response);
125
+ } catch (error) {
126
+ responseData = xhr.response;
131
127
  }
132
128
  } else {
133
- data2 = xhr.response;
134
- }
135
- if (onSuccess) {
136
- onSuccess(data2, xhr);
129
+ responseData = xhr.response;
137
130
  }
138
- resolve(data2);
131
+ onSuccess == null ? void 0 : onSuccess(responseData, xhr);
132
+ resolve(responseData);
139
133
  } else {
140
- if (onError) {
141
- onError(xhr.response, xhr);
142
- }
134
+ onError == null ? void 0 : onError(xhr.response, xhr);
143
135
  reject({ status: "error", error: xhr.response });
144
136
  }
145
137
  }
146
138
  };
147
139
  xhr.onprogress = function(event) {
148
- if (onProgress) {
149
- onProgress(event, xhr);
150
- }
140
+ onProgress == null ? void 0 : onProgress(event, xhr);
151
141
  };
152
142
  xhr.onloadend = function(event) {
153
- if (onLoaded) {
154
- onLoaded(event, xhr);
155
- }
143
+ onLoaded == null ? void 0 : onLoaded(event, xhr);
156
144
  xhr = null;
157
145
  };
158
- xhr.onerror = function(err) {
159
- if (onError) {
160
- onError(xhr.response, xhr);
161
- }
162
- reject({ status: "error", error: err });
163
- xhr = null;
146
+ xhr.onerror = function(error) {
147
+ onError == null ? void 0 : onError(xhr.response, xhr);
148
+ reject({ status: "error", error });
149
+ };
150
+ xhr.onabort = function(event) {
151
+ reject({ status: "abort", error: event });
164
152
  };
165
153
  xhr.ontimeout = function(event) {
166
- if (onTimeout) {
167
- onTimeout(event, xhr);
168
- }
154
+ onTimeout == null ? void 0 : onTimeout(event, xhr);
169
155
  reject({ status: "timeout", error: event });
170
- xhr = null;
171
156
  };
172
157
  xhr.send(data || null);
173
158
  });
159
+ request.abort = () => xhr == null ? void 0 : xhr.abort();
160
+ return request;
174
161
  }
175
162
  };
176
163
  ["delete", "get", "head", "options"].forEach((method) => {
@@ -1,2 +1,4 @@
1
- declare const ax: (configOrUrl: string | import("./interface").AxConfig) => Promise<unknown>;
1
+ declare const ax: (configOrUrl: string | import("./interface").AxConfig) => Promise<Response> | (Promise<any> & {
2
+ abort: () => void;
3
+ });
2
4
  export default ax;
@@ -1 +1 @@
1
- export default function folderScanner(entry: FileSystemFileEntry | FileSystemDirectoryEntry, filesList: any[]): Promise<unknown>;
1
+ export default function folderScanner(entry: FileSystemEntry, filesList?: File[]): Promise<File[]>;