@hkyhy/marsun-components-core 0.1.52 → 0.1.53

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 (309) hide show
  1. package/README.md +23 -15
  2. package/dist/agent-hub.d.ts +11 -0
  3. package/dist/agent-hub.js +144 -0
  4. package/dist/agent-hub.js.map +1 -0
  5. package/dist/components/AgentHub/Chat/Action/CreateButton.js +3 -3
  6. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +4 -4
  7. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +4 -4
  8. package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js +29 -27
  9. package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js.map +1 -1
  10. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js +19 -18
  11. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js.map +1 -1
  12. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js +18 -17
  13. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js.map +1 -1
  14. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js +23 -19
  15. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js.map +1 -1
  16. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js +23 -21
  17. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js.map +1 -1
  18. package/dist/components/AgentHub/Chat/List/ChatCard/index.js +7 -7
  19. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js +19 -17
  20. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js.map +1 -1
  21. package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js +3 -3
  22. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +1 -1
  23. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +16 -15
  24. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -1
  25. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js +7 -7
  26. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +8 -8
  27. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/index.js +1 -1
  28. package/dist/components/Auth/UserProfileCard/UserProfileCard.js +7 -7
  29. package/dist/components/File/FileItem/index.js +22 -20
  30. package/dist/components/File/FileItem/index.js.map +1 -1
  31. package/dist/components/File/FilePreview/index.js +11 -11
  32. package/dist/components/File/fileDisplay.js +41 -36
  33. package/dist/components/File/fileDisplay.js.map +1 -1
  34. package/dist/components/Filter/CommonFilter/index.js +20 -18
  35. package/dist/components/Filter/CommonFilter/index.js.map +1 -1
  36. package/dist/components/Filter/FilterSelect/index.js +90 -89
  37. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  38. package/dist/components/Filter/FilterTreeSelect/index.js +51 -48
  39. package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
  40. package/dist/components/Filter/FilterTrigger/index.js +13 -11
  41. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  42. package/dist/components/Form/PersonOptionRow/index.js +4 -4
  43. package/dist/components/Icons/ArrowLeft.d.ts +1 -0
  44. package/dist/components/Icons/ArrowLeft.js +7 -0
  45. package/dist/components/Icons/ArrowLeft.js.map +1 -0
  46. package/dist/components/Icons/ArrowLeftRight.d.ts +1 -0
  47. package/dist/components/Icons/ArrowLeftRight.js +7 -0
  48. package/dist/components/Icons/ArrowLeftRight.js.map +1 -0
  49. package/dist/components/Icons/BarChart3.d.ts +1 -0
  50. package/dist/components/Icons/BarChart3.js +7 -0
  51. package/dist/components/Icons/BarChart3.js.map +1 -0
  52. package/dist/components/Icons/Bell.d.ts +1 -0
  53. package/dist/components/Icons/Bell.js +7 -0
  54. package/dist/components/Icons/Bell.js.map +1 -0
  55. package/dist/components/Icons/BookOpen.d.ts +1 -0
  56. package/dist/components/Icons/BookOpen.js +7 -0
  57. package/dist/components/Icons/BookOpen.js.map +1 -0
  58. package/dist/components/Icons/Bot.d.ts +1 -0
  59. package/dist/components/Icons/Bot.js +7 -0
  60. package/dist/components/Icons/Bot.js.map +1 -0
  61. package/dist/components/Icons/Check.d.ts +1 -0
  62. package/dist/components/Icons/Check.js +7 -0
  63. package/dist/components/Icons/Check.js.map +1 -0
  64. package/dist/components/Icons/ChevronDown.d.ts +1 -0
  65. package/dist/components/Icons/ChevronDown.js +7 -0
  66. package/dist/components/Icons/ChevronDown.js.map +1 -0
  67. package/dist/components/Icons/ChevronLeft.d.ts +1 -0
  68. package/dist/components/Icons/ChevronLeft.js +7 -0
  69. package/dist/components/Icons/ChevronLeft.js.map +1 -0
  70. package/dist/components/Icons/ChevronRight.d.ts +1 -0
  71. package/dist/components/Icons/ChevronRight.js +7 -0
  72. package/dist/components/Icons/ChevronRight.js.map +1 -0
  73. package/dist/components/Icons/ChevronUp.d.ts +1 -0
  74. package/dist/components/Icons/ChevronUp.js +7 -0
  75. package/dist/components/Icons/ChevronUp.js.map +1 -0
  76. package/dist/components/Icons/CircleAlert.d.ts +1 -0
  77. package/dist/components/Icons/CircleAlert.js +7 -0
  78. package/dist/components/Icons/CircleAlert.js.map +1 -0
  79. package/dist/components/Icons/CircleCheck.d.ts +1 -0
  80. package/dist/components/Icons/CircleCheck.js +7 -0
  81. package/dist/components/Icons/CircleCheck.js.map +1 -0
  82. package/dist/components/Icons/CircleHelp.d.ts +1 -0
  83. package/dist/components/Icons/CircleHelp.js +7 -0
  84. package/dist/components/Icons/CircleHelp.js.map +1 -0
  85. package/dist/components/Icons/CirclePlay.d.ts +1 -0
  86. package/dist/components/Icons/CirclePlay.js +7 -0
  87. package/dist/components/Icons/CirclePlay.js.map +1 -0
  88. package/dist/components/Icons/CircleX.d.ts +1 -0
  89. package/dist/components/Icons/CircleX.js +7 -0
  90. package/dist/components/Icons/CircleX.js.map +1 -0
  91. package/dist/components/Icons/ClipboardCheck.d.ts +1 -0
  92. package/dist/components/Icons/ClipboardCheck.js +7 -0
  93. package/dist/components/Icons/ClipboardCheck.js.map +1 -0
  94. package/dist/components/Icons/Clock.d.ts +1 -0
  95. package/dist/components/Icons/Clock.js +7 -0
  96. package/dist/components/Icons/Clock.js.map +1 -0
  97. package/dist/components/Icons/CloudDownload.d.ts +1 -0
  98. package/dist/components/Icons/CloudDownload.js +7 -0
  99. package/dist/components/Icons/CloudDownload.js.map +1 -0
  100. package/dist/components/Icons/CloudUpload.d.ts +1 -0
  101. package/dist/components/Icons/CloudUpload.js +7 -0
  102. package/dist/components/Icons/CloudUpload.js.map +1 -0
  103. package/dist/components/Icons/Code.d.ts +1 -0
  104. package/dist/components/Icons/Code.js +7 -0
  105. package/dist/components/Icons/Code.js.map +1 -0
  106. package/dist/components/Icons/Copy.d.ts +1 -0
  107. package/dist/components/Icons/Copy.js +7 -0
  108. package/dist/components/Icons/Copy.js.map +1 -0
  109. package/dist/components/Icons/Crown.d.ts +1 -0
  110. package/dist/components/Icons/Crown.js +7 -0
  111. package/dist/components/Icons/Crown.js.map +1 -0
  112. package/dist/components/Icons/Database.d.ts +1 -0
  113. package/dist/components/Icons/Database.js +7 -0
  114. package/dist/components/Icons/Database.js.map +1 -0
  115. package/dist/components/Icons/Download.d.ts +1 -0
  116. package/dist/components/Icons/Download.js +7 -0
  117. package/dist/components/Icons/Download.js.map +1 -0
  118. package/dist/components/Icons/Eye.d.ts +1 -0
  119. package/dist/components/Icons/Eye.js +7 -0
  120. package/dist/components/Icons/Eye.js.map +1 -0
  121. package/dist/components/Icons/EyeOff.d.ts +1 -0
  122. package/dist/components/Icons/EyeOff.js +7 -0
  123. package/dist/components/Icons/EyeOff.js.map +1 -0
  124. package/dist/components/Icons/File.d.ts +1 -0
  125. package/dist/components/Icons/File.js +7 -0
  126. package/dist/components/Icons/File.js.map +1 -0
  127. package/dist/components/Icons/FileArchive.d.ts +1 -0
  128. package/dist/components/Icons/FileArchive.js +7 -0
  129. package/dist/components/Icons/FileArchive.js.map +1 -0
  130. package/dist/components/Icons/FileImage.d.ts +1 -0
  131. package/dist/components/Icons/FileImage.js +7 -0
  132. package/dist/components/Icons/FileImage.js.map +1 -0
  133. package/dist/components/Icons/FileSpreadsheet.d.ts +1 -0
  134. package/dist/components/Icons/FileSpreadsheet.js +7 -0
  135. package/dist/components/Icons/FileSpreadsheet.js.map +1 -0
  136. package/dist/components/Icons/FileText.d.ts +1 -0
  137. package/dist/components/Icons/FileText.js +7 -0
  138. package/dist/components/Icons/FileText.js.map +1 -0
  139. package/dist/components/Icons/Flag.d.ts +1 -0
  140. package/dist/components/Icons/Flag.js +7 -0
  141. package/dist/components/Icons/Flag.js.map +1 -0
  142. package/dist/components/Icons/Flame.d.ts +1 -0
  143. package/dist/components/Icons/Flame.js +7 -0
  144. package/dist/components/Icons/Flame.js.map +1 -0
  145. package/dist/components/Icons/Folder.d.ts +1 -0
  146. package/dist/components/Icons/Folder.js +7 -0
  147. package/dist/components/Icons/Folder.js.map +1 -0
  148. package/dist/components/Icons/FolderOpen.d.ts +1 -0
  149. package/dist/components/Icons/FolderOpen.js +7 -0
  150. package/dist/components/Icons/FolderOpen.js.map +1 -0
  151. package/dist/components/Icons/Hash.d.ts +1 -0
  152. package/dist/components/Icons/Hash.js +7 -0
  153. package/dist/components/Icons/Hash.js.map +1 -0
  154. package/dist/components/Icons/House.d.ts +1 -0
  155. package/dist/components/Icons/House.js +7 -0
  156. package/dist/components/Icons/House.js.map +1 -0
  157. package/dist/components/Icons/Import.d.ts +1 -0
  158. package/dist/components/Icons/Import.js +7 -0
  159. package/dist/components/Icons/Import.js.map +1 -0
  160. package/dist/components/Icons/Inbox.d.ts +1 -0
  161. package/dist/components/Icons/Inbox.js +7 -0
  162. package/dist/components/Icons/Inbox.js.map +1 -0
  163. package/dist/components/Icons/Info.d.ts +1 -0
  164. package/dist/components/Icons/Info.js +7 -0
  165. package/dist/components/Icons/Info.js.map +1 -0
  166. package/dist/components/Icons/LayoutDashboard.d.ts +1 -0
  167. package/dist/components/Icons/LayoutDashboard.js +7 -0
  168. package/dist/components/Icons/LayoutDashboard.js.map +1 -0
  169. package/dist/components/Icons/LayoutGrid.d.ts +1 -0
  170. package/dist/components/Icons/LayoutGrid.js +7 -0
  171. package/dist/components/Icons/LayoutGrid.js.map +1 -0
  172. package/dist/components/Icons/ListTodo.d.ts +1 -0
  173. package/dist/components/Icons/ListTodo.js +7 -0
  174. package/dist/components/Icons/ListTodo.js.map +1 -0
  175. package/dist/components/Icons/Loader2.d.ts +1 -0
  176. package/dist/components/Icons/Loader2.js +7 -0
  177. package/dist/components/Icons/Loader2.js.map +1 -0
  178. package/dist/components/Icons/Lock.d.ts +1 -0
  179. package/dist/components/Icons/Lock.js +7 -0
  180. package/dist/components/Icons/Lock.js.map +1 -0
  181. package/dist/components/Icons/LogOut.d.ts +1 -0
  182. package/dist/components/Icons/LogOut.js +7 -0
  183. package/dist/components/Icons/LogOut.js.map +1 -0
  184. package/dist/components/Icons/Maximize2.d.ts +1 -0
  185. package/dist/components/Icons/Maximize2.js +7 -0
  186. package/dist/components/Icons/Maximize2.js.map +1 -0
  187. package/dist/components/Icons/MessageCircle.d.ts +1 -0
  188. package/dist/components/Icons/MessageCircle.js +7 -0
  189. package/dist/components/Icons/MessageCircle.js.map +1 -0
  190. package/dist/components/Icons/MessageSquare.d.ts +1 -0
  191. package/dist/components/Icons/MessageSquare.js +7 -0
  192. package/dist/components/Icons/MessageSquare.js.map +1 -0
  193. package/dist/components/Icons/Minimize2.d.ts +1 -0
  194. package/dist/components/Icons/Minimize2.js +7 -0
  195. package/dist/components/Icons/Minimize2.js.map +1 -0
  196. package/dist/components/Icons/PanelLeftClose.d.ts +1 -0
  197. package/dist/components/Icons/PanelLeftClose.js +7 -0
  198. package/dist/components/Icons/PanelLeftClose.js.map +1 -0
  199. package/dist/components/Icons/PanelLeftOpen.d.ts +1 -0
  200. package/dist/components/Icons/PanelLeftOpen.js +7 -0
  201. package/dist/components/Icons/PanelLeftOpen.js.map +1 -0
  202. package/dist/components/Icons/Pause.d.ts +1 -0
  203. package/dist/components/Icons/Pause.js +7 -0
  204. package/dist/components/Icons/Pause.js.map +1 -0
  205. package/dist/components/Icons/Pencil.d.ts +1 -0
  206. package/dist/components/Icons/Pencil.js +7 -0
  207. package/dist/components/Icons/Pencil.js.map +1 -0
  208. package/dist/components/Icons/Plus.d.ts +1 -0
  209. package/dist/components/Icons/Plus.js +7 -0
  210. package/dist/components/Icons/Plus.js.map +1 -0
  211. package/dist/components/Icons/Presentation.d.ts +1 -0
  212. package/dist/components/Icons/Presentation.js +7 -0
  213. package/dist/components/Icons/Presentation.js.map +1 -0
  214. package/dist/components/Icons/RefreshCw.d.ts +1 -0
  215. package/dist/components/Icons/RefreshCw.js +7 -0
  216. package/dist/components/Icons/RefreshCw.js.map +1 -0
  217. package/dist/components/Icons/RotateCw.d.ts +1 -0
  218. package/dist/components/Icons/RotateCw.js +7 -0
  219. package/dist/components/Icons/RotateCw.js.map +1 -0
  220. package/dist/components/Icons/Send.d.ts +1 -0
  221. package/dist/components/Icons/Send.js +7 -0
  222. package/dist/components/Icons/Send.js.map +1 -0
  223. package/dist/components/Icons/Settings.d.ts +1 -0
  224. package/dist/components/Icons/Settings.js +7 -0
  225. package/dist/components/Icons/Settings.js.map +1 -0
  226. package/dist/components/Icons/Shield.d.ts +1 -0
  227. package/dist/components/Icons/Shield.js +7 -0
  228. package/dist/components/Icons/Shield.js.map +1 -0
  229. package/dist/components/Icons/ShieldCheck.d.ts +1 -0
  230. package/dist/components/Icons/ShieldCheck.js +7 -0
  231. package/dist/components/Icons/ShieldCheck.js.map +1 -0
  232. package/dist/components/Icons/SlidersHorizontal.d.ts +1 -0
  233. package/dist/components/Icons/SlidersHorizontal.js +7 -0
  234. package/dist/components/Icons/SlidersHorizontal.js.map +1 -0
  235. package/dist/components/Icons/Square.d.ts +1 -0
  236. package/dist/components/Icons/Square.js +7 -0
  237. package/dist/components/Icons/Square.js.map +1 -0
  238. package/dist/components/Icons/Star.d.ts +1 -0
  239. package/dist/components/Icons/Star.js +7 -0
  240. package/dist/components/Icons/Star.js.map +1 -0
  241. package/dist/components/Icons/ThumbsDown.d.ts +1 -0
  242. package/dist/components/Icons/ThumbsDown.js +7 -0
  243. package/dist/components/Icons/ThumbsDown.js.map +1 -0
  244. package/dist/components/Icons/ThumbsUp.d.ts +1 -0
  245. package/dist/components/Icons/ThumbsUp.js +7 -0
  246. package/dist/components/Icons/ThumbsUp.js.map +1 -0
  247. package/dist/components/Icons/Trash2.d.ts +1 -0
  248. package/dist/components/Icons/Trash2.js +7 -0
  249. package/dist/components/Icons/Trash2.js.map +1 -0
  250. package/dist/components/Icons/Trophy.d.ts +1 -0
  251. package/dist/components/Icons/Trophy.js +7 -0
  252. package/dist/components/Icons/Trophy.js.map +1 -0
  253. package/dist/components/Icons/Undo2.d.ts +1 -0
  254. package/dist/components/Icons/Undo2.js +7 -0
  255. package/dist/components/Icons/Undo2.js.map +1 -0
  256. package/dist/components/Icons/Upload.d.ts +1 -0
  257. package/dist/components/Icons/Upload.js +7 -0
  258. package/dist/components/Icons/Upload.js.map +1 -0
  259. package/dist/components/Icons/User.d.ts +1 -0
  260. package/dist/components/Icons/User.js +7 -0
  261. package/dist/components/Icons/User.js.map +1 -0
  262. package/dist/components/Icons/UserPlus.d.ts +1 -0
  263. package/dist/components/Icons/UserPlus.js +7 -0
  264. package/dist/components/Icons/UserPlus.js.map +1 -0
  265. package/dist/components/Icons/UserRoundCog.d.ts +1 -0
  266. package/dist/components/Icons/UserRoundCog.js +7 -0
  267. package/dist/components/Icons/UserRoundCog.js.map +1 -0
  268. package/dist/components/Icons/Users.d.ts +1 -0
  269. package/dist/components/Icons/Users.js +7 -0
  270. package/dist/components/Icons/Users.js.map +1 -0
  271. package/dist/components/Icons/X.d.ts +1 -0
  272. package/dist/components/Icons/X.js +7 -0
  273. package/dist/components/Icons/X.js.map +1 -0
  274. package/dist/components/Icons/createIcon.d.ts +9 -0
  275. package/dist/components/Icons/createIcon.js +32 -0
  276. package/dist/components/Icons/createIcon.js.map +1 -0
  277. package/dist/components/Icons/index.d.ts +80 -90
  278. package/dist/components/Icons/registry.d.ts +6 -0
  279. package/dist/components/Icons/registry.js +239 -0
  280. package/dist/components/Icons/registry.js.map +1 -0
  281. package/dist/components/InteractiveBlock/InteractiveBlock.js +6 -6
  282. package/dist/components/Layout/AgentAppShell/AgentAppShell.js +24 -23
  283. package/dist/components/Layout/AgentAppShell/AgentAppShell.js.map +1 -1
  284. package/dist/components/Layout/PageHeaderLayout/index.js +7 -7
  285. package/dist/components/Modal/Modal/index.js +8 -8
  286. package/dist/components/Modal/StepModal/index.js +9 -9
  287. package/dist/components/OrgTree/OrgTree.js +41 -39
  288. package/dist/components/OrgTree/OrgTree.js.map +1 -1
  289. package/dist/components/StateBar/StateBar.js +4 -4
  290. package/dist/components/Table/ColumnConfigPanel.js +13 -10
  291. package/dist/components/Table/ColumnConfigPanel.js.map +1 -1
  292. package/dist/components/Table/Table.js +7 -7
  293. package/dist/components/Tour/AppTour/index.js +10 -10
  294. package/dist/components/Upload/index.js +76 -72
  295. package/dist/components/Upload/index.js.map +1 -1
  296. package/dist/file.d.ts +5 -0
  297. package/dist/file.js +24 -0
  298. package/dist/file.js.map +1 -0
  299. package/dist/index.d.ts +3 -1
  300. package/dist/index.js +615 -537
  301. package/dist/index.js.map +1 -1
  302. package/dist/llm.d.ts +5 -0
  303. package/dist/llm.js +8 -0
  304. package/dist/llm.js.map +1 -0
  305. package/dist/marsun-components-core.css +1 -1
  306. package/dist/styles/global.css +1 -1
  307. package/package.json +15 -5
  308. package/dist/components/Icons/index.js +0 -268
  309. package/dist/components/Icons/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Upload/index.tsx"],"sourcesContent":["import { Trash2, File, Inbox, Plus, Upload as UploadIcon } from '@/components/Icons';\nimport { SEMANTIC_COLORS, SemanticTag } from '@/components/Tag';\nimport { Button, Image, message, Typography, Upload } from 'antd';\nimport type { UploadFile } from 'antd/es/upload/interface';\nimport React from 'react';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\n/* ---------- types ---------- */\n\n/** 上传变体 */\nexport type UploadVariant = 'panel' | 'button';\n\n/** 已选文件列表样式:text=行列表;picture-card=图片卡片(含预览) */\nexport type UploadListType = 'text' | 'picture-card';\n\nexport interface CommonUploadProps {\n /* ---- antd Form.Item 兼容属性 ---- */\n value?: UploadFile[];\n onChange?: (value: UploadFile[]) => void;\n\n /* ---- 容器/样式 ---- */\n className?: string;\n\n /* ---- 上传配置 ---- */\n /** 单文件大小限制(字节),默认 500MB */\n fileSize?: number;\n /** 最大上传数量 */\n maxLength?: number;\n multiple?: boolean;\n /** 目录上传模式(webkitdirectory),选中整个文件夹并保留 webkitRelativePath */\n directory?: boolean;\n size?: 'small' | 'middle' | 'large';\n accept?: string;\n\n /* ---- UI 变体 ---- */\n /** panel = 拖拽面板(Dragger 样式),button = 按钮(默认) */\n variant?: UploadVariant;\n /** 列表展现;图片场景用 picture-card(预览+缩略图) */\n listType?: UploadListType;\n children?: React.ReactNode;\n renderTips?: () => React.ReactNode;\n\n /* ---- 文件列表展示 ---- */\n /** 是否展示已上传文件列表,默认 true(tips 下方) */\n showFileList?: boolean;\n\n /* ---- 回调 ---- */\n onSave?: (fileList: UploadFile[]) => void;\n ossUpload?: boolean;\n onUpload?: (options: {\n file: File;\n onSuccess: (url?: string) => void;\n onError: (err: Error) => void;\n }) => Promise<void> | void;\n getPermission?: (file: File) => boolean;\n concurrentCount?: number;\n}\n\nexport type CommonUploadRef = {\n upload: () => void;\n uploading: boolean;\n};\n\n/* ---------- utils ---------- */\n\nconst formatSize = (bytes: number): string => {\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)}KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 / 1024).toFixed(0)}M`;\n return `${(bytes / 1024 ** 3).toFixed(1)}G`;\n};\n\nfunction buildTips(accept?: string, fileSize?: number, maxLength?: number): React.ReactNode {\n const parts: string[] = [];\n if (accept) {\n const exts = accept\n .split(',')\n .map((s) => s.trim().replace(/^\\./, ''))\n .filter(Boolean);\n if (exts.length) parts.push(`支持扩展名${exts.join(',')}`);\n }\n if (fileSize) parts.push(`单个文件大小不超过${formatSize(fileSize)}`);\n if (maxLength) parts.push(`最多上传${maxLength}个附件`);\n return parts.length ? (\n <Typography.Text type=\"secondary\" className={classNames('upload-item', styles['upload-item'])}>\n {parts.join(',')}\n </Typography.Text>\n ) : null;\n}\n\nfunction getExt(filename: string): string {\n const idx = filename.lastIndexOf('.');\n return idx >= 0 ? filename.slice(idx + 1).toUpperCase() : '';\n}\n\nfunction resolvePreviewUrl(file: UploadFile): string {\n if (file.url) return file.url;\n if (file.thumbUrl) return file.thumbUrl;\n if (file.originFileObj) return URL.createObjectURL(file.originFileObj);\n return '';\n}\n\n/* ---------- 子组件:文本行列表 ---------- */\n\ninterface UploadedFilesProps {\n fileList: UploadFile[];\n onRemove: (uid: string) => void;\n onPreview?: (file: UploadFile) => void;\n}\n\nconst UploadedFiles: React.FC<UploadedFilesProps> = ({ fileList, onRemove, onPreview }) => {\n if (!fileList.length) return null;\n\n return (\n <div className={classNames('upload-link', styles['upload-link'])}>\n {fileList.map((file) => {\n const previewable = Boolean(\n file.url || file.thumbUrl || file.originFileObj?.type?.startsWith('image/'),\n );\n return (\n <div\n key={file.uid}\n className={classNames(\n classNames('upload-file-row', styles['upload-file-row']),\n file.status === 'error' &&\n classNames('upload-file-row-error', styles['upload-file-row-error']),\n )}\n >\n <div className={classNames('upload-label', styles['upload-label'])}>\n {file.thumbUrl || (file.url && file.type?.startsWith('image/')) ? (\n <button\n type=\"button\"\n className={classNames('upload-thumb-btn', styles['upload-thumb-btn'])}\n onClick={() => onPreview?.(file)}\n title=\"预览\"\n >\n <img\n className={classNames('upload-thumb', styles['upload-thumb'])}\n src={file.thumbUrl || file.url}\n alt={file.name}\n />\n </button>\n ) : (\n <File className={classNames('upload-value', styles['upload-value'])} />\n )}\n <span className={classNames('upload-meta', styles['upload-meta'])}>{file.name}</span>\n <SemanticTag\n color={SEMANTIC_COLORS.INFO}\n className={classNames('upload-icon', styles['upload-icon'])}\n >\n {getExt(file.name)}\n </SemanticTag>\n {file.size ? (\n <Typography.Text\n type=\"secondary\"\n className={classNames('upload-title', styles['upload-title'])}\n >\n {formatSize(file.size)}\n </Typography.Text>\n ) : null}\n </div>\n <div className={classNames('upload-row-actions', styles['upload-row-actions'])}>\n {previewable && onPreview ? (\n <Button type=\"link\" size=\"small\" onClick={() => onPreview(file)}>\n 预览\n </Button>\n ) : null}\n <Button\n type=\"text\"\n danger\n size=\"small\"\n icon={<Trash2 />}\n onClick={() => onRemove(file.uid)}\n className={classNames('upload-desc', styles['upload-desc'])}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\n/* ---------- 主组件 ---------- */\n\n/**\n * CommonUpload — 通用上传组件\n *\n * - `listType=\"text\"`(默认):行列表;图片有缩略图时可「预览」\n * - `listType=\"picture-card\"`:antd 图片卡片(内置预览/删除图标)\n */\nconst CommonUpload = React.forwardRef<CommonUploadRef, CommonUploadProps>(\n (\n {\n value,\n onChange,\n className,\n variant,\n listType = 'text',\n size,\n children,\n renderTips,\n showFileList = true,\n fileSize,\n maxLength,\n multiple,\n directory,\n accept,\n onUpload,\n onSave,\n getPermission,\n concurrentCount,\n },\n ref,\n ) => {\n const [innerFileList, setInnerFileList] = React.useState<UploadFile[]>([]);\n const [uploading, setUploading] = React.useState(false);\n const [preview, setPreview] = React.useState<{ open: boolean; url: string; title: string }>({\n open: false,\n url: '',\n title: '',\n });\n const blobUrlsRef = React.useRef<string[]>([]);\n\n // 受控模式:value 优先;非受控:内部状态\n const fileList = value ?? innerFileList;\n const setFileList = React.useCallback(\n (next: UploadFile[] | ((prev: UploadFile[]) => UploadFile[])) => {\n const resolved = typeof next === 'function' ? next(fileList) : next;\n onChange?.(resolved);\n setInnerFileList(resolved);\n onSave?.(resolved);\n },\n [fileList, onChange, onSave],\n );\n\n const effectiveFileSize = fileSize ?? 500 * 1024 * 1024;\n const concurrent = concurrentCount ?? 3;\n\n const beforeUploadFn = React.useCallback(\n (file: File) => {\n if (getPermission && !getPermission(file)) {\n message.error('无权限上传此文件');\n return Upload.LIST_IGNORE;\n }\n if (file.size > effectiveFileSize) {\n message.error(`文件超出 ${formatSize(effectiveFileSize)} 限制`);\n return Upload.LIST_IGNORE;\n }\n return true;\n },\n [effectiveFileSize, getPermission],\n );\n\n const triggerUpload = React.useCallback(async () => {\n if (!onUpload || !fileList.length) return;\n setUploading(true);\n try {\n const pending = [...fileList];\n const pool: Promise<void>[] = [];\n while (pending.length) {\n const item = pending.shift();\n if (!item?.originFileObj) continue;\n const rawFile = item.originFileObj;\n pool.push(\n new Promise<void>((resolve) => {\n onUpload({\n file: rawFile,\n onSuccess: (url?) => {\n setFileList((prev) =>\n prev.map((f) =>\n f.uid === item.uid ? { ...f, status: 'done' as const, url: url ?? f.url } : f,\n ),\n );\n resolve();\n },\n onError: (_err: Error) => {\n message.error(`${item.name} 上传失败`);\n setFileList((prev) =>\n prev.map((f) => (f.uid === item.uid ? { ...f, status: 'error' as const } : f)),\n );\n resolve();\n },\n });\n }),\n );\n if (pool.length >= concurrent) await Promise.race(pool);\n }\n await Promise.allSettled(pool);\n onSave?.(fileList);\n } finally {\n setUploading(false);\n }\n }, [fileList, onUpload, concurrent, onSave, setFileList]);\n\n React.useImperativeHandle(ref, () => ({ upload: triggerUpload, uploading }), [\n triggerUpload,\n uploading,\n ]);\n\n const openPreview = React.useCallback((file: UploadFile) => {\n const url = resolvePreviewUrl(file);\n if (!url) {\n message.warning('暂无法预览该文件');\n return;\n }\n if (url.startsWith('blob:')) {\n blobUrlsRef.current.push(url);\n }\n setPreview({ open: true, url, title: file.name || '预览' });\n }, []);\n\n React.useEffect(\n () => () => {\n blobUrlsRef.current.forEach((u) => URL.revokeObjectURL(u));\n blobUrlsRef.current = [];\n },\n [],\n );\n\n const tips = renderTips?.() ?? buildTips(accept, fileSize, maxLength);\n const canAddMore = !maxLength || fileList.length < maxLength;\n\n const previewNode = (\n <Image\n alt={preview.title}\n style={{ display: 'none' }}\n src={preview.url}\n preview={{\n visible: preview.open,\n src: preview.url,\n onVisibleChange: (visible) => setPreview((prev) => ({ ...prev, open: visible })),\n }}\n />\n );\n\n if (listType === 'picture-card') {\n return (\n <div\n className={classNames('upload-picture-root', styles['upload-picture-root'], className)}\n >\n <Upload\n listType=\"picture-card\"\n fileList={fileList}\n beforeUpload={beforeUploadFn}\n onChange={(info) => setFileList(info.fileList)}\n onPreview={openPreview}\n multiple={multiple}\n directory={directory}\n accept={accept}\n showUploadList={{ showPreviewIcon: true, showRemoveIcon: true }}\n customRequest={({ onSuccess }) => onSuccess?.({})}\n className={classNames('upload-picture-card', styles['upload-picture-card'])}\n >\n {canAddMore ? (\n <div\n className={classNames('upload-picture-trigger', styles['upload-picture-trigger'])}\n >\n <Plus size={20} />\n <div\n className={classNames(\n 'upload-picture-trigger-text',\n styles['upload-picture-trigger-text'],\n )}\n >\n 上传图片\n </div>\n </div>\n ) : null}\n </Upload>\n {tips ? (\n <div className={classNames('upload-list', styles['upload-list'])}>{tips}</div>\n ) : null}\n {previewNode}\n </div>\n );\n }\n\n if (variant === 'panel') {\n return (\n <div className={className}>\n <Upload.Dragger\n fileList={fileList}\n beforeUpload={beforeUploadFn}\n onChange={(info) => setFileList(info.fileList)}\n multiple={multiple}\n directory={directory}\n accept={accept}\n showUploadList={false}\n customRequest={({ onSuccess }) => onSuccess?.({})}\n >\n <p className={classNames('upload-drag-icon', styles['upload-drag-icon'])}>\n <Inbox />\n </p>\n <p className=\"ant-upload-text\">点击或拖拽文件到此区域上传</p>\n <p>{tips}</p>\n </Upload.Dragger>\n {showFileList && (\n <UploadedFiles\n fileList={fileList}\n onRemove={(uid) => setFileList((prev) => prev.filter((f) => f.uid !== uid))}\n onPreview={openPreview}\n />\n )}\n {previewNode}\n </div>\n );\n }\n\n // button mode (default) + text list\n return (\n <div className={className}>\n <Upload\n fileList={fileList}\n beforeUpload={beforeUploadFn}\n onChange={(info) => setFileList(info.fileList)}\n multiple={multiple}\n directory={directory}\n accept={accept}\n showUploadList={false}\n customRequest={({ onSuccess }) => onSuccess?.({})}\n >\n {children ?? (\n <Button\n size={size}\n icon={<UploadIcon />}\n className={classNames('upload-toolbar', styles['upload-toolbar'])}\n >\n 点击上传\n </Button>\n )}\n </Upload>\n <div className={classNames('upload-list', styles['upload-list'])}>{tips}</div>\n {showFileList && (\n <UploadedFiles\n fileList={fileList}\n onRemove={(uid) => setFileList((prev) => prev.filter((f) => f.uid !== uid))}\n onPreview={openPreview}\n />\n )}\n {previewNode}\n </div>\n );\n },\n);\n\nCommonUpload.displayName = 'CommonUpload';\n\nexport default CommonUpload;\n"],"names":["formatSize","bytes","buildTips","accept","fileSize","maxLength","parts","exts","s","jsx","Typography","classNames","styles","getExt","filename","idx","resolvePreviewUrl","file","UploadedFiles","fileList","onRemove","onPreview","previewable","_b","_a","jsxs","_c","File","SemanticTag","SEMANTIC_COLORS","Button","Trash2","CommonUpload","React","value","onChange","className","variant","listType","size","children","renderTips","showFileList","multiple","directory","onUpload","onSave","getPermission","concurrentCount","ref","innerFileList","setInnerFileList","uploading","setUploading","preview","setPreview","blobUrlsRef","setFileList","next","resolved","effectiveFileSize","concurrent","beforeUploadFn","message","Upload","triggerUpload","pending","pool","item","rawFile","resolve","url","prev","f","_err","openPreview","u","tips","canAddMore","previewNode","Image","visible","info","onSuccess","Plus","Inbox","uid","UploadIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Upload/index.tsx"],"sourcesContent":["import { Trash2, File, Inbox, Plus, Upload as UploadIcon } from '@/components/Icons';\nimport { SEMANTIC_COLORS, SemanticTag } from '@/components/Tag';\nimport { Button, Image, message, Typography, Upload } from 'antd';\nimport type { UploadFile } from 'antd/es/upload/interface';\nimport React from 'react';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\n/* ---------- types ---------- */\n\n/** 上传变体 */\nexport type UploadVariant = 'panel' | 'button';\n\n/** 已选文件列表样式:text=行列表;picture-card=图片卡片(含预览) */\nexport type UploadListType = 'text' | 'picture-card';\n\nexport interface CommonUploadProps {\n /* ---- antd Form.Item 兼容属性 ---- */\n value?: UploadFile[];\n onChange?: (value: UploadFile[]) => void;\n\n /* ---- 容器/样式 ---- */\n className?: string;\n\n /* ---- 上传配置 ---- */\n /** 单文件大小限制(字节),默认 500MB */\n fileSize?: number;\n /** 最大上传数量 */\n maxLength?: number;\n multiple?: boolean;\n /** 目录上传模式(webkitdirectory),选中整个文件夹并保留 webkitRelativePath */\n directory?: boolean;\n size?: 'small' | 'middle' | 'large';\n accept?: string;\n\n /* ---- UI 变体 ---- */\n /** panel = 拖拽面板(Dragger 样式),button = 按钮(默认) */\n variant?: UploadVariant;\n /** 列表展现;图片场景用 picture-card(预览+缩略图) */\n listType?: UploadListType;\n children?: React.ReactNode;\n renderTips?: () => React.ReactNode;\n\n /* ---- 文件列表展示 ---- */\n /** 是否展示已上传文件列表,默认 true(tips 下方) */\n showFileList?: boolean;\n\n /* ---- 回调 ---- */\n onSave?: (fileList: UploadFile[]) => void;\n ossUpload?: boolean;\n onUpload?: (options: {\n file: File;\n onSuccess: (url?: string) => void;\n onError: (err: Error) => void;\n }) => Promise<void> | void;\n getPermission?: (file: File) => boolean;\n concurrentCount?: number;\n}\n\nexport type CommonUploadRef = {\n upload: () => void;\n uploading: boolean;\n};\n\n/* ---------- utils ---------- */\n\nconst formatSize = (bytes: number): string => {\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)}KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 / 1024).toFixed(0)}M`;\n return `${(bytes / 1024 ** 3).toFixed(1)}G`;\n};\n\nfunction buildTips(accept?: string, fileSize?: number, maxLength?: number): React.ReactNode {\n const parts: string[] = [];\n if (accept) {\n const exts = accept\n .split(',')\n .map((s) => s.trim().replace(/^\\./, ''))\n .filter(Boolean);\n if (exts.length) parts.push(`支持扩展名${exts.join(',')}`);\n }\n if (fileSize) parts.push(`单个文件大小不超过${formatSize(fileSize)}`);\n if (maxLength) parts.push(`最多上传${maxLength}个附件`);\n return parts.length ? (\n <Typography.Text type=\"secondary\" className={classNames('upload-item', styles['upload-item'])}>\n {parts.join(',')}\n </Typography.Text>\n ) : null;\n}\n\nfunction getExt(filename: string): string {\n const idx = filename.lastIndexOf('.');\n return idx >= 0 ? filename.slice(idx + 1).toUpperCase() : '';\n}\n\nfunction resolvePreviewUrl(file: UploadFile): string {\n if (file.url) return file.url;\n if (file.thumbUrl) return file.thumbUrl;\n if (file.originFileObj) return URL.createObjectURL(file.originFileObj);\n return '';\n}\n\n/* ---------- 子组件:文本行列表 ---------- */\n\ninterface UploadedFilesProps {\n fileList: UploadFile[];\n onRemove: (uid: string) => void;\n onPreview?: (file: UploadFile) => void;\n}\n\nconst UploadedFiles: React.FC<UploadedFilesProps> = ({ fileList, onRemove, onPreview }) => {\n if (!fileList.length) return null;\n\n return (\n <div className={classNames('upload-link', styles['upload-link'])}>\n {fileList.map((file) => {\n const previewable = Boolean(\n file.url || file.thumbUrl || file.originFileObj?.type?.startsWith('image/'),\n );\n return (\n <div\n key={file.uid}\n className={classNames(\n classNames('upload-file-row', styles['upload-file-row']),\n file.status === 'error' &&\n classNames('upload-file-row-error', styles['upload-file-row-error']),\n )}\n >\n <div className={classNames('upload-label', styles['upload-label'])}>\n {file.thumbUrl || (file.url && file.type?.startsWith('image/')) ? (\n <button\n type=\"button\"\n className={classNames('upload-thumb-btn', styles['upload-thumb-btn'])}\n onClick={() => onPreview?.(file)}\n title=\"预览\"\n >\n <img\n className={classNames('upload-thumb', styles['upload-thumb'])}\n src={file.thumbUrl || file.url}\n alt={file.name}\n />\n </button>\n ) : (\n <File className={classNames('upload-value', styles['upload-value'])} />\n )}\n <span className={classNames('upload-meta', styles['upload-meta'])}>{file.name}</span>\n <SemanticTag\n color={SEMANTIC_COLORS.INFO}\n className={classNames('upload-icon', styles['upload-icon'])}\n >\n {getExt(file.name)}\n </SemanticTag>\n {file.size ? (\n <Typography.Text\n type=\"secondary\"\n className={classNames('upload-title', styles['upload-title'])}\n >\n {formatSize(file.size)}\n </Typography.Text>\n ) : null}\n </div>\n <div className={classNames('upload-row-actions', styles['upload-row-actions'])}>\n {previewable && onPreview ? (\n <Button type=\"link\" size=\"small\" onClick={() => onPreview(file)}>\n 预览\n </Button>\n ) : null}\n <Button\n type=\"text\"\n danger\n size=\"small\"\n icon={<Trash2 />}\n onClick={() => onRemove(file.uid)}\n className={classNames('upload-desc', styles['upload-desc'])}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\n/* ---------- 主组件 ---------- */\n\n/**\n * CommonUpload — 通用上传组件\n *\n * - `listType=\"text\"`(默认):行列表;图片有缩略图时可「预览」\n * - `listType=\"picture-card\"`:antd 图片卡片(内置预览/删除图标)\n */\nconst CommonUpload = React.forwardRef<CommonUploadRef, CommonUploadProps>(\n (\n {\n value,\n onChange,\n className,\n variant,\n listType = 'text',\n size,\n children,\n renderTips,\n showFileList = true,\n fileSize,\n maxLength,\n multiple,\n directory,\n accept,\n onUpload,\n onSave,\n getPermission,\n concurrentCount,\n },\n ref,\n ) => {\n const [innerFileList, setInnerFileList] = React.useState<UploadFile[]>([]);\n const [uploading, setUploading] = React.useState(false);\n const [preview, setPreview] = React.useState<{ open: boolean; url: string; title: string }>({\n open: false,\n url: '',\n title: '',\n });\n const blobUrlsRef = React.useRef<string[]>([]);\n\n // 受控模式:value 优先;非受控:内部状态\n const fileList = value ?? innerFileList;\n const setFileList = React.useCallback(\n (next: UploadFile[] | ((prev: UploadFile[]) => UploadFile[])) => {\n const resolved = typeof next === 'function' ? next(fileList) : next;\n onChange?.(resolved);\n setInnerFileList(resolved);\n onSave?.(resolved);\n },\n [fileList, onChange, onSave],\n );\n\n const effectiveFileSize = fileSize ?? 500 * 1024 * 1024;\n const concurrent = concurrentCount ?? 3;\n\n const beforeUploadFn = React.useCallback(\n (file: File) => {\n if (getPermission && !getPermission(file)) {\n message.error('无权限上传此文件');\n return Upload.LIST_IGNORE;\n }\n if (file.size > effectiveFileSize) {\n message.error(`文件超出 ${formatSize(effectiveFileSize)} 限制`);\n return Upload.LIST_IGNORE;\n }\n return true;\n },\n [effectiveFileSize, getPermission],\n );\n\n const triggerUpload = React.useCallback(async () => {\n if (!onUpload || !fileList.length) return;\n setUploading(true);\n try {\n const pending = [...fileList];\n const pool: Promise<void>[] = [];\n while (pending.length) {\n const item = pending.shift();\n if (!item?.originFileObj) continue;\n const rawFile = item.originFileObj;\n pool.push(\n new Promise<void>((resolve) => {\n onUpload({\n file: rawFile,\n onSuccess: (url?) => {\n setFileList((prev) =>\n prev.map((f) =>\n f.uid === item.uid ? { ...f, status: 'done' as const, url: url ?? f.url } : f,\n ),\n );\n resolve();\n },\n onError: (_err: Error) => {\n message.error(`${item.name} 上传失败`);\n setFileList((prev) =>\n prev.map((f) => (f.uid === item.uid ? { ...f, status: 'error' as const } : f)),\n );\n resolve();\n },\n });\n }),\n );\n if (pool.length >= concurrent) await Promise.race(pool);\n }\n await Promise.allSettled(pool);\n onSave?.(fileList);\n } finally {\n setUploading(false);\n }\n }, [fileList, onUpload, concurrent, onSave, setFileList]);\n\n React.useImperativeHandle(ref, () => ({ upload: triggerUpload, uploading }), [\n triggerUpload,\n uploading,\n ]);\n\n const openPreview = React.useCallback((file: UploadFile) => {\n const url = resolvePreviewUrl(file);\n if (!url) {\n message.warning('暂无法预览该文件');\n return;\n }\n if (url.startsWith('blob:')) {\n blobUrlsRef.current.push(url);\n }\n setPreview({ open: true, url, title: file.name || '预览' });\n }, []);\n\n React.useEffect(\n () => () => {\n blobUrlsRef.current.forEach((u) => URL.revokeObjectURL(u));\n blobUrlsRef.current = [];\n },\n [],\n );\n\n const tips = renderTips?.() ?? buildTips(accept, fileSize, maxLength);\n const canAddMore = !maxLength || fileList.length < maxLength;\n\n const previewNode = (\n <Image\n alt={preview.title}\n style={{ display: 'none' }}\n src={preview.url}\n preview={{\n visible: preview.open,\n src: preview.url,\n onVisibleChange: (visible) => setPreview((prev) => ({ ...prev, open: visible })),\n }}\n />\n );\n\n if (listType === 'picture-card') {\n return (\n <div\n className={classNames('upload-picture-root', styles['upload-picture-root'], className)}\n >\n <Upload\n listType=\"picture-card\"\n fileList={fileList}\n beforeUpload={beforeUploadFn}\n onChange={(info) => setFileList(info.fileList)}\n onPreview={openPreview}\n multiple={multiple}\n directory={directory}\n accept={accept}\n showUploadList={{ showPreviewIcon: true, showRemoveIcon: true }}\n customRequest={({ onSuccess }) => onSuccess?.({})}\n className={classNames('upload-picture-card', styles['upload-picture-card'])}\n >\n {canAddMore ? (\n <div\n className={classNames('upload-picture-trigger', styles['upload-picture-trigger'])}\n >\n <Plus size={20} />\n <div\n className={classNames(\n 'upload-picture-trigger-text',\n styles['upload-picture-trigger-text'],\n )}\n >\n 上传图片\n </div>\n </div>\n ) : null}\n </Upload>\n {tips ? (\n <div className={classNames('upload-list', styles['upload-list'])}>{tips}</div>\n ) : null}\n {previewNode}\n </div>\n );\n }\n\n if (variant === 'panel') {\n return (\n <div className={className}>\n <Upload.Dragger\n fileList={fileList}\n beforeUpload={beforeUploadFn}\n onChange={(info) => setFileList(info.fileList)}\n multiple={multiple}\n directory={directory}\n accept={accept}\n showUploadList={false}\n customRequest={({ onSuccess }) => onSuccess?.({})}\n >\n <p className={classNames('upload-drag-icon', styles['upload-drag-icon'])}>\n <Inbox />\n </p>\n <p className=\"ant-upload-text\">点击或拖拽文件到此区域上传</p>\n <p>{tips}</p>\n </Upload.Dragger>\n {showFileList && (\n <UploadedFiles\n fileList={fileList}\n onRemove={(uid) => setFileList((prev) => prev.filter((f) => f.uid !== uid))}\n onPreview={openPreview}\n />\n )}\n {previewNode}\n </div>\n );\n }\n\n // button mode (default) + text list\n return (\n <div className={className}>\n <Upload\n fileList={fileList}\n beforeUpload={beforeUploadFn}\n onChange={(info) => setFileList(info.fileList)}\n multiple={multiple}\n directory={directory}\n accept={accept}\n showUploadList={false}\n customRequest={({ onSuccess }) => onSuccess?.({})}\n >\n {children ?? (\n <Button\n size={size}\n icon={<UploadIcon />}\n className={classNames('upload-toolbar', styles['upload-toolbar'])}\n >\n 点击上传\n </Button>\n )}\n </Upload>\n <div className={classNames('upload-list', styles['upload-list'])}>{tips}</div>\n {showFileList && (\n <UploadedFiles\n fileList={fileList}\n onRemove={(uid) => setFileList((prev) => prev.filter((f) => f.uid !== uid))}\n onPreview={openPreview}\n />\n )}\n {previewNode}\n </div>\n );\n },\n);\n\nCommonUpload.displayName = 'CommonUpload';\n\nexport default CommonUpload;\n"],"names":["formatSize","bytes","buildTips","accept","fileSize","maxLength","parts","exts","s","jsx","Typography","classNames","styles","getExt","filename","idx","resolvePreviewUrl","file","UploadedFiles","fileList","onRemove","onPreview","previewable","_b","_a","jsxs","_c","File","SemanticTag","SEMANTIC_COLORS","Button","Trash2","CommonUpload","React","value","onChange","className","variant","listType","size","children","renderTips","showFileList","multiple","directory","onUpload","onSave","getPermission","concurrentCount","ref","innerFileList","setInnerFileList","uploading","setUploading","preview","setPreview","blobUrlsRef","setFileList","next","resolved","effectiveFileSize","concurrent","beforeUploadFn","message","Upload","triggerUpload","pending","pool","item","rawFile","resolve","url","prev","f","_err","openPreview","u","tips","canAddMore","previewNode","Image","visible","info","onSuccess","Plus","Inbox","uid","UploadIcon"],"mappings":"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"}
package/dist/file.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * L2 产品域入口:`@hkyhy/marsun-components-core/file`
3
+ * 含预览栈;新代码须从此子路径 import;包根 re-export 为迁移期 @deprecated。
4
+ */
5
+ export * from './components/File';
package/dist/file.js ADDED
@@ -0,0 +1,24 @@
1
+ import { default as o } from "./components/File/FileLink/index.js";
2
+ import { default as r } from "./components/File/FilePreview/index.js";
3
+ import { default as a } from "./components/File/FilePreviewLink/index.js";
4
+ import { default as F } from "./components/File/FilePreviewModal/index.js";
5
+ import { FileItem as f } from "./components/File/FileItem/index.js";
6
+ import { downloadFileItem as p, getFileDownloadAuthHeaders as s, getFileDownloadUrl as x } from "./components/File/utils/download.js";
7
+ import { getFileExtension as g, getFileIcon as u, getFileTypeName as I, normalizeExtension as v, normalizeFileDisplayItem as D, parseFileNameFromUrl as P } from "./components/File/fileDisplay.js";
8
+ export {
9
+ f as FileItemView,
10
+ o as FileLink,
11
+ r as FilePreview,
12
+ a as FilePreviewLink,
13
+ F as FilePreviewModal,
14
+ p as downloadFileItem,
15
+ s as getFileDownloadAuthHeaders,
16
+ x as getFileDownloadUrl,
17
+ g as getFileExtension,
18
+ u as getFileIcon,
19
+ I as getFileTypeName,
20
+ v as normalizeExtension,
21
+ D as normalizeFileDisplayItem,
22
+ P as parseFileNameFromUrl
23
+ };
24
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -24,7 +24,6 @@ export type { PersonOptionDto, ReviewerOptionDto, PersonSelectOption } from './u
24
24
  export * from './components/Auth';
25
25
  export * from './components/Descriptions';
26
26
  export * from './components/Empty';
27
- export * from './components/File';
28
27
  export * from './components/Filter';
29
28
  export { default as Filter, fields as reactFilterFields, getFilterValue, useFilter as useReactFilter, withFilterValue, SearchInput as ReactFilterSearchInput, FilterProvider as ReactFilterProvider, pickSelectValues, createFilterValueMapper, useSearchParamsValue, filterInterceptors, singleSelectInterceptor, multiSelectInterceptor, FILTER_CLASS, AdvancedFilter, FilterValueDisplay, FilterItem as ReactFilterItem, FilterLines, FilterOuter, PopoverItem, withFieldItem, FilterItemContainer, TypeDateRangePickerField, NumberRangeFilterItem, InputFilterItem as ReactInputFilterItem, DatePickerFilterItem as ReactDatePickerFilterItem, DateRangePickerFilterItem as ReactDateRangePickerFilterItem, TypeDateRangePickerFilterItem, SuperSelectFilterItem, SelectTableListFilterItem, SelectTreeFilterItem, SelectCascaderFilterItem, SelectFunctionFilterItem, SelectIndustryFilterItem, SelectAddressFilterItem, SelectCascader, } from './components/ReactFilter';
30
29
  export type { FilterValueItem, FilterValue } from './components/ReactFilter';
@@ -47,7 +46,10 @@ export type { CommonUploadProps, CommonUploadRef, UploadListType, UploadVariant,
47
46
  export * from './components/VirtualScrollbar';
48
47
  export * from './components/Icons';
49
48
  export * from './components/Sparkline';
49
+ /** @deprecated 迁移期:请改从 `@hkyhy/marsun-components-core/llm` import */
50
50
  export * from './components/LlmFormattedText';
51
+ /** @deprecated 迁移期:请改从 `@hkyhy/marsun-components-core/file` import(含 FilePreview 等) */
52
+ export * from './components/File';
51
53
  export { default as AgentHubAccessGuard } from './components/AgentHub/AgentHubAccessGuard';
52
54
  export { default as AgentHubIndexRedirect } from './components/AgentHub/AgentHubIndexRedirect';
53
55
  export { default as AgentHubSessionAccessGuard } from './components/AgentHub/ChatSessionAccessGuard';