@chenzy-design/svelte 0.3.1 → 0.4.1

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 (1299) hide show
  1. package/dist/_floating/use-floating.d.ts +6 -0
  2. package/dist/_floating/use-floating.d.ts.map +1 -1
  3. package/dist/_floating/use-floating.js +38 -0
  4. package/dist/ai-chat-dialogue/AIChatDialogue.svelte +243 -0
  5. package/dist/ai-chat-dialogue/AIChatDialogue.svelte.d.ts +60 -0
  6. package/dist/ai-chat-dialogue/AIChatDialogue.svelte.d.ts.map +1 -0
  7. package/dist/ai-chat-dialogue/ContentItemRenderer.svelte +318 -0
  8. package/dist/ai-chat-dialogue/ContentItemRenderer.svelte.d.ts +18 -0
  9. package/dist/ai-chat-dialogue/ContentItemRenderer.svelte.d.ts.map +1 -0
  10. package/dist/ai-chat-dialogue/DialogueBox.svelte +403 -0
  11. package/dist/ai-chat-dialogue/DialogueBox.svelte.d.ts +50 -0
  12. package/dist/ai-chat-dialogue/DialogueBox.svelte.d.ts.map +1 -0
  13. package/dist/ai-chat-dialogue/index.d.ts +8 -0
  14. package/dist/ai-chat-dialogue/index.d.ts.map +1 -0
  15. package/dist/ai-chat-dialogue/index.js +6 -0
  16. package/dist/ai-chat-dialogue/meta.d.ts +174 -0
  17. package/dist/ai-chat-dialogue/meta.d.ts.map +1 -0
  18. package/dist/ai-chat-dialogue/meta.js +66 -0
  19. package/dist/ai-chat-dialogue/render-config.d.ts +57 -0
  20. package/dist/ai-chat-dialogue/render-config.d.ts.map +1 -0
  21. package/dist/ai-chat-input/AIChatInput.svelte +1196 -0
  22. package/dist/ai-chat-input/AIChatInput.svelte.d.ts +146 -0
  23. package/dist/ai-chat-input/AIChatInput.svelte.d.ts.map +1 -0
  24. package/dist/ai-chat-input/AIChatInputConfigureButton.svelte +94 -0
  25. package/dist/ai-chat-input/AIChatInputConfigureButton.svelte.d.ts +17 -0
  26. package/dist/ai-chat-input/AIChatInputConfigureButton.svelte.d.ts.map +1 -0
  27. package/dist/ai-chat-input/AIChatInputConfigureItem.svelte +40 -0
  28. package/dist/ai-chat-input/AIChatInputConfigureItem.svelte.d.ts +16 -0
  29. package/dist/ai-chat-input/AIChatInputConfigureItem.svelte.d.ts.map +1 -0
  30. package/dist/ai-chat-input/AIChatInputConfigureMcp.svelte +94 -0
  31. package/dist/ai-chat-input/AIChatInputConfigureMcp.svelte.d.ts +18 -0
  32. package/dist/ai-chat-input/AIChatInputConfigureMcp.svelte.d.ts.map +1 -0
  33. package/dist/ai-chat-input/AIChatInputConfigureRadioButton.svelte +52 -0
  34. package/dist/ai-chat-input/AIChatInputConfigureRadioButton.svelte.d.ts +17 -0
  35. package/dist/ai-chat-input/AIChatInputConfigureRadioButton.svelte.d.ts.map +1 -0
  36. package/dist/ai-chat-input/AIChatInputConfigureSelect.svelte +50 -0
  37. package/dist/ai-chat-input/AIChatInputConfigureSelect.svelte.d.ts +16 -0
  38. package/dist/ai-chat-input/AIChatInputConfigureSelect.svelte.d.ts.map +1 -0
  39. package/dist/ai-chat-input/InputSlotNode.svelte +50 -0
  40. package/dist/ai-chat-input/InputSlotNode.svelte.d.ts +5 -0
  41. package/dist/ai-chat-input/InputSlotNode.svelte.d.ts.map +1 -0
  42. package/dist/ai-chat-input/SelectSlotNode.svelte +54 -0
  43. package/dist/ai-chat-input/SelectSlotNode.svelte.d.ts +5 -0
  44. package/dist/ai-chat-input/SelectSlotNode.svelte.d.ts.map +1 -0
  45. package/dist/ai-chat-input/SkillSlotNode.svelte +82 -0
  46. package/dist/ai-chat-input/SkillSlotNode.svelte.d.ts +5 -0
  47. package/dist/ai-chat-input/SkillSlotNode.svelte.d.ts.map +1 -0
  48. package/dist/ai-chat-input/configure-context.d.ts +12 -0
  49. package/dist/ai-chat-input/configure-context.d.ts.map +1 -0
  50. package/dist/ai-chat-input/configure-context.js +14 -0
  51. package/dist/ai-chat-input/index.d.ts +9 -0
  52. package/dist/ai-chat-input/index.d.ts.map +1 -0
  53. package/dist/ai-chat-input/index.js +9 -0
  54. package/dist/ai-chat-input/input-slot-extension.d.ts +18 -0
  55. package/dist/ai-chat-input/input-slot-extension.d.ts.map +1 -0
  56. package/dist/ai-chat-input/input-slot-extension.js +55 -0
  57. package/dist/ai-chat-input/input-slot-plugins.d.ts +34 -0
  58. package/dist/ai-chat-input/input-slot-plugins.d.ts.map +1 -0
  59. package/dist/ai-chat-input/input-slot-plugins.js +478 -0
  60. package/dist/ai-chat-input/meta.d.ts +284 -0
  61. package/dist/ai-chat-input/meta.d.ts.map +1 -0
  62. package/dist/ai-chat-input/meta.js +106 -0
  63. package/dist/ai-chat-input/select-slot-extension.d.ts +16 -0
  64. package/dist/ai-chat-input/select-slot-extension.d.ts.map +1 -0
  65. package/dist/ai-chat-input/select-slot-extension.js +35 -0
  66. package/dist/ai-chat-input/skill-slot-extension.d.ts +22 -0
  67. package/dist/ai-chat-input/skill-slot-extension.d.ts.map +1 -0
  68. package/dist/ai-chat-input/skill-slot-extension.js +46 -0
  69. package/dist/anchor/Anchor.svelte +393 -242
  70. package/dist/anchor/Anchor.svelte.d.ts +40 -17
  71. package/dist/anchor/Anchor.svelte.d.ts.map +1 -1
  72. package/dist/anchor/AnchorLink.svelte +226 -0
  73. package/dist/anchor/AnchorLink.svelte.d.ts +19 -0
  74. package/dist/anchor/AnchorLink.svelte.d.ts.map +1 -0
  75. package/dist/anchor/context.d.ts +43 -0
  76. package/dist/anchor/context.d.ts.map +1 -0
  77. package/dist/anchor/context.js +26 -0
  78. package/dist/anchor/index.d.ts +11 -2
  79. package/dist/anchor/index.d.ts.map +1 -1
  80. package/dist/anchor/index.js +10 -1
  81. package/dist/anchor/meta.d.ts +92 -43
  82. package/dist/anchor/meta.d.ts.map +1 -1
  83. package/dist/anchor/meta.js +124 -38
  84. package/dist/anchor/types.d.ts +32 -5
  85. package/dist/anchor/types.d.ts.map +1 -1
  86. package/dist/audio-player/AudioPlayer.svelte +614 -0
  87. package/dist/audio-player/AudioPlayer.svelte.d.ts +21 -0
  88. package/dist/audio-player/AudioPlayer.svelte.d.ts.map +1 -0
  89. package/dist/audio-player/AudioSlider.svelte +162 -0
  90. package/dist/audio-player/AudioSlider.svelte.d.ts +20 -0
  91. package/dist/audio-player/AudioSlider.svelte.d.ts.map +1 -0
  92. package/dist/audio-player/index.d.ts +3 -0
  93. package/dist/audio-player/index.d.ts.map +1 -0
  94. package/dist/audio-player/index.js +2 -0
  95. package/dist/audio-player/meta.d.ts +74 -0
  96. package/dist/audio-player/meta.d.ts.map +1 -0
  97. package/dist/audio-player/meta.js +96 -0
  98. package/dist/autocomplete/AutoComplete.svelte +307 -411
  99. package/dist/autocomplete/AutoComplete.svelte.d.ts +52 -47
  100. package/dist/autocomplete/AutoComplete.svelte.d.ts.map +1 -1
  101. package/dist/autocomplete/meta.d.ts +150 -34
  102. package/dist/autocomplete/meta.d.ts.map +1 -1
  103. package/dist/autocomplete/meta.js +43 -21
  104. package/dist/avatar/Avatar.svelte +784 -211
  105. package/dist/avatar/Avatar.svelte.d.ts +28 -23
  106. package/dist/avatar/Avatar.svelte.d.ts.map +1 -1
  107. package/dist/avatar/AvatarGroup.svelte +151 -70
  108. package/dist/avatar/AvatarGroup.svelte.d.ts +16 -17
  109. package/dist/avatar/AvatarGroup.svelte.d.ts.map +1 -1
  110. package/dist/avatar/TopSlotSvg.svelte +62 -0
  111. package/dist/avatar/TopSlotSvg.svelte.d.ts +8 -0
  112. package/dist/avatar/TopSlotSvg.svelte.d.ts.map +1 -0
  113. package/dist/avatar/context.d.ts +28 -1
  114. package/dist/avatar/context.d.ts.map +1 -1
  115. package/dist/avatar/index.d.ts +2 -1
  116. package/dist/avatar/index.d.ts.map +1 -1
  117. package/dist/avatar/meta.d.ts +124 -36
  118. package/dist/avatar/meta.d.ts.map +1 -1
  119. package/dist/avatar/meta.js +117 -24
  120. package/dist/back-top/BackTop.svelte +81 -231
  121. package/dist/back-top/BackTop.svelte.d.ts +10 -33
  122. package/dist/back-top/BackTop.svelte.d.ts.map +1 -1
  123. package/dist/back-top/meta.d.ts +23 -72
  124. package/dist/back-top/meta.d.ts.map +1 -1
  125. package/dist/back-top/meta.js +19 -79
  126. package/dist/badge/Badge.svelte +187 -249
  127. package/dist/badge/Badge.svelte.d.ts +23 -14
  128. package/dist/badge/Badge.svelte.d.ts.map +1 -1
  129. package/dist/badge/meta.d.ts +52 -44
  130. package/dist/badge/meta.d.ts.map +1 -1
  131. package/dist/badge/meta.js +35 -33
  132. package/dist/banner/Banner.svelte +189 -274
  133. package/dist/banner/Banner.svelte.d.ts +20 -23
  134. package/dist/banner/Banner.svelte.d.ts.map +1 -1
  135. package/dist/banner/index.d.ts +2 -1
  136. package/dist/banner/index.d.ts.map +1 -1
  137. package/dist/banner/meta.d.ts +41 -87
  138. package/dist/banner/meta.d.ts.map +1 -1
  139. package/dist/banner/meta.js +59 -79
  140. package/dist/breadcrumb/Breadcrumb.svelte +240 -118
  141. package/dist/breadcrumb/Breadcrumb.svelte.d.ts +35 -19
  142. package/dist/breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
  143. package/dist/breadcrumb/Item.svelte +5 -5
  144. package/dist/breadcrumb/meta.d.ts +26 -19
  145. package/dist/breadcrumb/meta.d.ts.map +1 -1
  146. package/dist/breadcrumb/meta.js +51 -16
  147. package/dist/breadcrumb/types.d.ts +11 -1
  148. package/dist/breadcrumb/types.d.ts.map +1 -1
  149. package/dist/button/BaseButton.svelte +479 -0
  150. package/dist/button/BaseButton.svelte.d.ts +29 -0
  151. package/dist/button/BaseButton.svelte.d.ts.map +1 -0
  152. package/dist/button/Button.svelte +166 -296
  153. package/dist/button/Button.svelte.d.ts +12 -7
  154. package/dist/button/Button.svelte.d.ts.map +1 -1
  155. package/dist/button/ButtonGroup.svelte +66 -20
  156. package/dist/button/ButtonGroup.svelte.d.ts.map +1 -1
  157. package/dist/button/SplitButtonGroup.svelte +64 -101
  158. package/dist/button/SplitButtonGroup.svelte.d.ts +1 -21
  159. package/dist/button/SplitButtonGroup.svelte.d.ts.map +1 -1
  160. package/dist/button/meta.d.ts +28 -68
  161. package/dist/button/meta.d.ts.map +1 -1
  162. package/dist/button/meta.js +33 -24
  163. package/dist/calendar/Calendar.svelte +928 -1172
  164. package/dist/calendar/Calendar.svelte.d.ts +34 -104
  165. package/dist/calendar/Calendar.svelte.d.ts.map +1 -1
  166. package/dist/calendar/meta.d.ts +78 -168
  167. package/dist/calendar/meta.d.ts.map +1 -1
  168. package/dist/calendar/meta.js +123 -78
  169. package/dist/card/Card.svelte +171 -233
  170. package/dist/card/Card.svelte.d.ts +30 -24
  171. package/dist/card/Card.svelte.d.ts.map +1 -1
  172. package/dist/card/CardGroup.svelte +74 -0
  173. package/dist/card/CardGroup.svelte.d.ts +20 -0
  174. package/dist/card/CardGroup.svelte.d.ts.map +1 -0
  175. package/dist/card/CardMeta.svelte +38 -28
  176. package/dist/card/CardMeta.svelte.d.ts +5 -0
  177. package/dist/card/CardMeta.svelte.d.ts.map +1 -1
  178. package/dist/card/index.d.ts +3 -1
  179. package/dist/card/index.d.ts.map +1 -1
  180. package/dist/card/index.js +7 -2
  181. package/dist/card/meta.d.ts +177 -75
  182. package/dist/card/meta.d.ts.map +1 -1
  183. package/dist/card/meta.js +102 -45
  184. package/dist/carousel/Carousel.svelte +569 -569
  185. package/dist/carousel/Carousel.svelte.d.ts +37 -29
  186. package/dist/carousel/Carousel.svelte.d.ts.map +1 -1
  187. package/dist/carousel/meta.d.ts +73 -65
  188. package/dist/carousel/meta.d.ts.map +1 -1
  189. package/dist/carousel/meta.js +85 -43
  190. package/dist/cascader/Cascader.svelte +725 -391
  191. package/dist/cascader/Cascader.svelte.d.ts +48 -24
  192. package/dist/cascader/Cascader.svelte.d.ts.map +1 -1
  193. package/dist/cascader/meta.d.ts +281 -32
  194. package/dist/cascader/meta.d.ts.map +1 -1
  195. package/dist/cascader/meta.js +85 -12
  196. package/dist/chat/Chat.svelte +483 -0
  197. package/dist/chat/Chat.svelte.d.ts +76 -0
  198. package/dist/chat/Chat.svelte.d.ts.map +1 -0
  199. package/dist/chat/ChatBox.svelte +207 -0
  200. package/dist/chat/ChatBox.svelte.d.ts +26 -0
  201. package/dist/chat/ChatBox.svelte.d.ts.map +1 -0
  202. package/dist/chat/ChatBoxAction.svelte +190 -0
  203. package/dist/chat/ChatBoxAction.svelte.d.ts +18 -0
  204. package/dist/chat/ChatBoxAction.svelte.d.ts.map +1 -0
  205. package/dist/chat/ChatBoxAvatar.svelte +40 -0
  206. package/dist/chat/ChatBoxAvatar.svelte.d.ts +13 -0
  207. package/dist/chat/ChatBoxAvatar.svelte.d.ts.map +1 -0
  208. package/dist/chat/ChatBoxContent.svelte +238 -0
  209. package/dist/chat/ChatBoxContent.svelte.d.ts +17 -0
  210. package/dist/chat/ChatBoxContent.svelte.d.ts.map +1 -0
  211. package/dist/chat/ChatBoxTitle.svelte +40 -0
  212. package/dist/chat/ChatBoxTitle.svelte.d.ts +13 -0
  213. package/dist/chat/ChatBoxTitle.svelte.d.ts.map +1 -0
  214. package/dist/chat/ChatCode.svelte +139 -0
  215. package/dist/chat/ChatCode.svelte.d.ts +9 -0
  216. package/dist/chat/ChatCode.svelte.d.ts.map +1 -0
  217. package/dist/chat/Hint.svelte +82 -0
  218. package/dist/chat/Hint.svelte.d.ts +13 -0
  219. package/dist/chat/Hint.svelte.d.ts.map +1 -0
  220. package/dist/chat/InputBox.svelte +365 -0
  221. package/dist/chat/InputBox.svelte.d.ts +30 -0
  222. package/dist/chat/InputBox.svelte.d.ts.map +1 -0
  223. package/dist/chat/index.d.ts +7 -0
  224. package/dist/chat/index.d.ts.map +1 -0
  225. package/dist/chat/index.js +5 -0
  226. package/dist/chat/meta.d.ts +297 -0
  227. package/dist/chat/meta.d.ts.map +1 -0
  228. package/dist/chat/meta.js +230 -0
  229. package/dist/chat/types.d.ts +94 -0
  230. package/dist/chat/types.d.ts.map +1 -0
  231. package/dist/chat/types.js +1 -0
  232. package/dist/checkbox/Checkbox.svelte +339 -148
  233. package/dist/checkbox/Checkbox.svelte.d.ts +27 -8
  234. package/dist/checkbox/Checkbox.svelte.d.ts.map +1 -1
  235. package/dist/checkbox/CheckboxGroup.svelte +52 -20
  236. package/dist/checkbox/CheckboxGroup.svelte.d.ts +7 -4
  237. package/dist/checkbox/CheckboxGroup.svelte.d.ts.map +1 -1
  238. package/dist/checkbox/context.d.ts +17 -7
  239. package/dist/checkbox/context.d.ts.map +1 -1
  240. package/dist/checkbox/index.d.ts +1 -1
  241. package/dist/checkbox/index.d.ts.map +1 -1
  242. package/dist/checkbox/meta.d.ts +49 -22
  243. package/dist/checkbox/meta.d.ts.map +1 -1
  244. package/dist/checkbox/meta.js +15 -13
  245. package/dist/code-highlight/CodeHighlight.svelte +298 -0
  246. package/dist/code-highlight/CodeHighlight.svelte.d.ts +18 -0
  247. package/dist/code-highlight/CodeHighlight.svelte.d.ts.map +1 -0
  248. package/dist/code-highlight/index.d.ts +4 -0
  249. package/dist/code-highlight/index.d.ts.map +1 -0
  250. package/dist/code-highlight/index.js +3 -0
  251. package/dist/code-highlight/meta.d.ts +61 -0
  252. package/dist/code-highlight/meta.d.ts.map +1 -0
  253. package/dist/code-highlight/meta.js +51 -0
  254. package/dist/code-highlight/prism-modules.d.ts +15 -0
  255. package/dist/collapse/Collapse.svelte +134 -324
  256. package/dist/collapse/Collapse.svelte.d.ts +24 -38
  257. package/dist/collapse/Collapse.svelte.d.ts.map +1 -1
  258. package/dist/collapse/CollapsePanel.svelte +143 -73
  259. package/dist/collapse/CollapsePanel.svelte.d.ts +16 -7
  260. package/dist/collapse/CollapsePanel.svelte.d.ts.map +1 -1
  261. package/dist/collapse/context.d.ts +18 -32
  262. package/dist/collapse/context.d.ts.map +1 -1
  263. package/dist/collapse/index.d.ts +1 -2
  264. package/dist/collapse/index.d.ts.map +1 -1
  265. package/dist/collapse/meta.d.ts +71 -54
  266. package/dist/collapse/meta.d.ts.map +1 -1
  267. package/dist/collapse/meta.js +55 -52
  268. package/dist/collapsible/Collapsible.svelte +224 -0
  269. package/dist/collapsible/Collapsible.svelte.d.ts +35 -0
  270. package/dist/collapsible/Collapsible.svelte.d.ts.map +1 -0
  271. package/dist/collapsible/index.d.ts +3 -0
  272. package/dist/collapsible/index.d.ts.map +1 -0
  273. package/dist/collapsible/index.js +2 -0
  274. package/dist/collapsible/meta.d.ts +115 -0
  275. package/dist/collapsible/meta.d.ts.map +1 -0
  276. package/dist/collapsible/meta.js +89 -0
  277. package/dist/color-picker/ColorPicker.svelte +395 -839
  278. package/dist/color-picker/ColorPicker.svelte.d.ts +29 -39
  279. package/dist/color-picker/ColorPicker.svelte.d.ts.map +1 -1
  280. package/dist/color-picker/index.d.ts +1 -0
  281. package/dist/color-picker/index.d.ts.map +1 -1
  282. package/dist/color-picker/index.js +1 -0
  283. package/dist/color-picker/meta.d.ts +43 -90
  284. package/dist/color-picker/meta.d.ts.map +1 -1
  285. package/dist/color-picker/meta.js +49 -37
  286. package/dist/components.d.ts +1773 -422
  287. package/dist/components.json +17159 -9219
  288. package/dist/config-provider/ConfigProvider.svelte +186 -151
  289. package/dist/config-provider/ConfigProvider.svelte.d.ts +12 -44
  290. package/dist/config-provider/ConfigProvider.svelte.d.ts.map +1 -1
  291. package/dist/config-provider/context.d.ts +21 -13
  292. package/dist/config-provider/context.d.ts.map +1 -1
  293. package/dist/config-provider/index.d.ts +9 -7
  294. package/dist/config-provider/index.d.ts.map +1 -1
  295. package/dist/config-provider/index.js +21 -7
  296. package/dist/config-provider/meta.d.ts +30 -75
  297. package/dist/config-provider/meta.d.ts.map +1 -1
  298. package/dist/config-provider/meta.js +30 -73
  299. package/dist/cropper/Cropper.svelte +536 -0
  300. package/dist/cropper/Cropper.svelte.d.ts +47 -0
  301. package/dist/cropper/Cropper.svelte.d.ts.map +1 -0
  302. package/dist/cropper/index.d.ts +4 -0
  303. package/dist/cropper/index.d.ts.map +1 -0
  304. package/dist/cropper/index.js +2 -0
  305. package/dist/cropper/meta.d.ts +136 -0
  306. package/dist/cropper/meta.d.ts.map +1 -0
  307. package/dist/cropper/meta.js +97 -0
  308. package/dist/date-picker/DatePicker.svelte +1646 -360
  309. package/dist/date-picker/DatePicker.svelte.d.ts +90 -37
  310. package/dist/date-picker/DatePicker.svelte.d.ts.map +1 -1
  311. package/dist/date-picker/index.d.ts +0 -2
  312. package/dist/date-picker/index.d.ts.map +1 -1
  313. package/dist/date-picker/index.js +0 -2
  314. package/dist/date-picker/meta.d.ts +309 -26
  315. package/dist/date-picker/meta.d.ts.map +1 -1
  316. package/dist/date-picker/meta.js +89 -14
  317. package/dist/descriptions/Descriptions.svelte +213 -223
  318. package/dist/descriptions/Descriptions.svelte.d.ts +16 -25
  319. package/dist/descriptions/Descriptions.svelte.d.ts.map +1 -1
  320. package/dist/descriptions/DescriptionsItem.svelte +58 -28
  321. package/dist/descriptions/DescriptionsItem.svelte.d.ts +12 -4
  322. package/dist/descriptions/DescriptionsItem.svelte.d.ts.map +1 -1
  323. package/dist/descriptions/context.d.ts +9 -5
  324. package/dist/descriptions/context.d.ts.map +1 -1
  325. package/dist/descriptions/index.d.ts +2 -2
  326. package/dist/descriptions/index.d.ts.map +1 -1
  327. package/dist/descriptions/meta.d.ts +51 -49
  328. package/dist/descriptions/meta.d.ts.map +1 -1
  329. package/dist/descriptions/meta.js +41 -20
  330. package/dist/descriptions/types.d.ts +13 -3
  331. package/dist/descriptions/types.d.ts.map +1 -1
  332. package/dist/divider/Divider.svelte +86 -94
  333. package/dist/divider/Divider.svelte.d.ts +2 -2
  334. package/dist/divider/Divider.svelte.d.ts.map +1 -1
  335. package/dist/divider/meta.d.ts +19 -25
  336. package/dist/divider/meta.d.ts.map +1 -1
  337. package/dist/divider/meta.js +29 -11
  338. package/dist/drag-move/DragMove.svelte +106 -0
  339. package/dist/drag-move/DragMove.svelte.d.ts +30 -0
  340. package/dist/drag-move/DragMove.svelte.d.ts.map +1 -0
  341. package/dist/drag-move/index.d.ts +4 -0
  342. package/dist/drag-move/index.d.ts.map +1 -0
  343. package/dist/drag-move/index.js +3 -0
  344. package/dist/drag-move/meta.d.ts +102 -0
  345. package/dist/drag-move/meta.d.ts.map +1 -0
  346. package/dist/drag-move/meta.js +77 -0
  347. package/dist/dropdown/Dropdown.svelte +426 -344
  348. package/dist/dropdown/Dropdown.svelte.d.ts +55 -58
  349. package/dist/dropdown/Dropdown.svelte.d.ts.map +1 -1
  350. package/dist/dropdown/DropdownDivider.svelte +20 -8
  351. package/dist/dropdown/DropdownDivider.svelte.d.ts +7 -16
  352. package/dist/dropdown/DropdownDivider.svelte.d.ts.map +1 -1
  353. package/dist/dropdown/DropdownItem.svelte +163 -91
  354. package/dist/dropdown/DropdownItem.svelte.d.ts +25 -11
  355. package/dist/dropdown/DropdownItem.svelte.d.ts.map +1 -1
  356. package/dist/dropdown/DropdownMenu.svelte +21 -9
  357. package/dist/dropdown/DropdownMenu.svelte.d.ts +6 -1
  358. package/dist/dropdown/DropdownMenu.svelte.d.ts.map +1 -1
  359. package/dist/dropdown/DropdownTitle.svelte +38 -20
  360. package/dist/dropdown/DropdownTitle.svelte.d.ts +6 -1
  361. package/dist/dropdown/DropdownTitle.svelte.d.ts.map +1 -1
  362. package/dist/dropdown/context.d.ts +18 -6
  363. package/dist/dropdown/context.d.ts.map +1 -1
  364. package/dist/dropdown/index.d.ts +3 -6
  365. package/dist/dropdown/index.d.ts.map +1 -1
  366. package/dist/dropdown/index.js +3 -6
  367. package/dist/dropdown/meta.d.ts +183 -63
  368. package/dist/dropdown/meta.d.ts.map +1 -1
  369. package/dist/dropdown/meta.js +122 -73
  370. package/dist/dropdown/types.d.ts +39 -42
  371. package/dist/dropdown/types.d.ts.map +1 -1
  372. package/dist/dropdown/types.js +1 -12
  373. package/dist/empty/Empty.svelte +136 -249
  374. package/dist/empty/Empty.svelte.d.ts +23 -9
  375. package/dist/empty/Empty.svelte.d.ts.map +1 -1
  376. package/dist/empty/meta.d.ts +29 -18
  377. package/dist/empty/meta.d.ts.map +1 -1
  378. package/dist/empty/meta.js +21 -26
  379. package/dist/feedback/Feedback.svelte +330 -0
  380. package/dist/feedback/Feedback.svelte.d.ts +46 -0
  381. package/dist/feedback/Feedback.svelte.d.ts.map +1 -0
  382. package/dist/feedback/index.d.ts +4 -0
  383. package/dist/feedback/index.d.ts.map +1 -0
  384. package/dist/feedback/index.js +2 -0
  385. package/dist/feedback/meta.d.ts +105 -0
  386. package/dist/feedback/meta.d.ts.map +1 -0
  387. package/dist/feedback/meta.js +65 -0
  388. package/dist/float-button/FloatButton.svelte +161 -0
  389. package/dist/float-button/FloatButton.svelte.d.ts +5 -0
  390. package/dist/float-button/FloatButton.svelte.d.ts.map +1 -0
  391. package/dist/float-button/FloatButtonGroup.svelte +90 -0
  392. package/dist/float-button/FloatButtonGroup.svelte.d.ts +5 -0
  393. package/dist/float-button/FloatButtonGroup.svelte.d.ts.map +1 -0
  394. package/dist/float-button/index.d.ts +5 -0
  395. package/dist/float-button/index.d.ts.map +1 -0
  396. package/dist/float-button/index.js +3 -0
  397. package/dist/float-button/meta.d.ts +136 -0
  398. package/dist/float-button/meta.d.ts.map +1 -0
  399. package/dist/float-button/meta.js +104 -0
  400. package/dist/float-button/types.d.ts +59 -0
  401. package/dist/float-button/types.d.ts.map +1 -0
  402. package/dist/float-button/types.js +1 -0
  403. package/dist/form/Field.svelte +315 -192
  404. package/dist/form/Field.svelte.d.ts +70 -2
  405. package/dist/form/Field.svelte.d.ts.map +1 -1
  406. package/dist/form/FieldArray.svelte +115 -21
  407. package/dist/form/FieldArray.svelte.d.ts +21 -3
  408. package/dist/form/FieldArray.svelte.d.ts.map +1 -1
  409. package/dist/form/Form.svelte +260 -52
  410. package/dist/form/Form.svelte.d.ts +84 -12
  411. package/dist/form/Form.svelte.d.ts.map +1 -1
  412. package/dist/form/FormAutoComplete.svelte +52 -0
  413. package/dist/form/FormAutoComplete.svelte.d.ts +17 -0
  414. package/dist/form/FormAutoComplete.svelte.d.ts.map +1 -0
  415. package/dist/form/FormCascader.svelte +25 -55
  416. package/dist/form/FormCascader.svelte.d.ts +2 -13
  417. package/dist/form/FormCascader.svelte.d.ts.map +1 -1
  418. package/dist/form/FormCheckbox.svelte +24 -56
  419. package/dist/form/FormCheckbox.svelte.d.ts +2 -14
  420. package/dist/form/FormCheckbox.svelte.d.ts.map +1 -1
  421. package/dist/form/FormCheckboxGroup.svelte +48 -0
  422. package/dist/form/FormCheckboxGroup.svelte.d.ts +15 -0
  423. package/dist/form/FormCheckboxGroup.svelte.d.ts.map +1 -0
  424. package/dist/form/FormDatePicker.svelte +24 -53
  425. package/dist/form/FormDatePicker.svelte.d.ts +2 -13
  426. package/dist/form/FormDatePicker.svelte.d.ts.map +1 -1
  427. package/dist/form/FormErrorMessage.svelte +75 -29
  428. package/dist/form/FormErrorMessage.svelte.d.ts +17 -4
  429. package/dist/form/FormErrorMessage.svelte.d.ts.map +1 -1
  430. package/dist/form/FormInput.svelte +31 -70
  431. package/dist/form/FormInput.svelte.d.ts +7 -19
  432. package/dist/form/FormInput.svelte.d.ts.map +1 -1
  433. package/dist/form/FormInputGroup.svelte +146 -0
  434. package/dist/form/FormInputGroup.svelte.d.ts +32 -0
  435. package/dist/form/FormInputGroup.svelte.d.ts.map +1 -0
  436. package/dist/form/FormInputNumber.svelte +74 -0
  437. package/dist/form/FormInputNumber.svelte.d.ts +20 -0
  438. package/dist/form/FormInputNumber.svelte.d.ts.map +1 -0
  439. package/dist/form/FormLabel.svelte +133 -24
  440. package/dist/form/FormLabel.svelte.d.ts +17 -4
  441. package/dist/form/FormLabel.svelte.d.ts.map +1 -1
  442. package/dist/form/FormPinCode.svelte +52 -0
  443. package/dist/form/FormPinCode.svelte.d.ts +16 -0
  444. package/dist/form/FormPinCode.svelte.d.ts.map +1 -0
  445. package/dist/form/FormRadio.svelte +23 -55
  446. package/dist/form/FormRadio.svelte.d.ts +2 -14
  447. package/dist/form/FormRadio.svelte.d.ts.map +1 -1
  448. package/dist/form/FormRadioGroup.svelte +54 -0
  449. package/dist/form/FormRadioGroup.svelte.d.ts +16 -0
  450. package/dist/form/FormRadioGroup.svelte.d.ts.map +1 -0
  451. package/dist/form/FormRating.svelte +24 -58
  452. package/dist/form/FormRating.svelte.d.ts +2 -14
  453. package/dist/form/FormRating.svelte.d.ts.map +1 -1
  454. package/dist/form/FormSection.svelte +35 -25
  455. package/dist/form/FormSection.svelte.d.ts +3 -1
  456. package/dist/form/FormSection.svelte.d.ts.map +1 -1
  457. package/dist/form/FormSelect.svelte +44 -68
  458. package/dist/form/FormSelect.svelte.d.ts +5 -16
  459. package/dist/form/FormSelect.svelte.d.ts.map +1 -1
  460. package/dist/form/FormSlider.svelte +33 -65
  461. package/dist/form/FormSlider.svelte.d.ts +2 -14
  462. package/dist/form/FormSlider.svelte.d.ts.map +1 -1
  463. package/dist/form/FormSlot.svelte +61 -20
  464. package/dist/form/FormSlot.svelte.d.ts +16 -2
  465. package/dist/form/FormSlot.svelte.d.ts.map +1 -1
  466. package/dist/form/FormSwitch.svelte +27 -59
  467. package/dist/form/FormSwitch.svelte.d.ts +4 -15
  468. package/dist/form/FormSwitch.svelte.d.ts.map +1 -1
  469. package/dist/form/FormTagInput.svelte +24 -53
  470. package/dist/form/FormTagInput.svelte.d.ts +2 -13
  471. package/dist/form/FormTagInput.svelte.d.ts.map +1 -1
  472. package/dist/form/FormTextArea.svelte +66 -0
  473. package/dist/form/FormTextArea.svelte.d.ts +18 -0
  474. package/dist/form/FormTextArea.svelte.d.ts.map +1 -0
  475. package/dist/form/FormTimePicker.svelte +51 -0
  476. package/dist/form/FormTimePicker.svelte.d.ts +15 -0
  477. package/dist/form/FormTimePicker.svelte.d.ts.map +1 -0
  478. package/dist/form/FormTreeSelect.svelte +26 -57
  479. package/dist/form/FormTreeSelect.svelte.d.ts +3 -14
  480. package/dist/form/FormTreeSelect.svelte.d.ts.map +1 -1
  481. package/dist/form/FormUpload.svelte +22 -63
  482. package/dist/form/FormUpload.svelte.d.ts +3 -15
  483. package/dist/form/FormUpload.svelte.d.ts.map +1 -1
  484. package/dist/form/GroupHookPanel.svelte +21 -0
  485. package/dist/form/GroupHookPanel.svelte.d.ts +19 -0
  486. package/dist/form/GroupHookPanel.svelte.d.ts.map +1 -0
  487. package/dist/form/context.d.ts +0 -3
  488. package/dist/form/context.d.ts.map +1 -1
  489. package/dist/form/field-props.d.ts +84 -0
  490. package/dist/form/field-props.d.ts.map +1 -0
  491. package/dist/form/field-props.js +58 -0
  492. package/dist/form/hooks.d.ts +53 -0
  493. package/dist/form/hooks.d.ts.map +1 -0
  494. package/dist/form/hooks.js +36 -0
  495. package/dist/form/index.d.ts +57 -4
  496. package/dist/form/index.d.ts.map +1 -1
  497. package/dist/form/index.js +60 -3
  498. package/dist/form/input-group-context.d.ts +7 -0
  499. package/dist/form/input-group-context.d.ts.map +1 -0
  500. package/dist/form/input-group-context.js +17 -0
  501. package/dist/form/meta.d.ts +213 -16
  502. package/dist/form/meta.d.ts.map +1 -1
  503. package/dist/form/meta.js +103 -15
  504. package/dist/grid/Col.svelte +1482 -78
  505. package/dist/grid/Col.svelte.d.ts +3 -5
  506. package/dist/grid/Col.svelte.d.ts.map +1 -1
  507. package/dist/grid/Row.svelte +151 -69
  508. package/dist/grid/Row.svelte.d.ts +9 -7
  509. package/dist/grid/Row.svelte.d.ts.map +1 -1
  510. package/dist/grid/meta.d.ts +37 -28
  511. package/dist/grid/meta.d.ts.map +1 -1
  512. package/dist/grid/meta.js +31 -25
  513. package/dist/highlight/Highlight.svelte +46 -66
  514. package/dist/highlight/Highlight.svelte.d.ts +9 -22
  515. package/dist/highlight/Highlight.svelte.d.ts.map +1 -1
  516. package/dist/highlight/meta.d.ts +12 -51
  517. package/dist/highlight/meta.d.ts.map +1 -1
  518. package/dist/highlight/meta.js +16 -46
  519. package/dist/hotkeys/HotKeys.svelte +152 -0
  520. package/dist/hotkeys/HotKeys.svelte.d.ts +28 -0
  521. package/dist/hotkeys/HotKeys.svelte.d.ts.map +1 -0
  522. package/dist/hotkeys/index.d.ts +12 -0
  523. package/dist/hotkeys/index.d.ts.map +1 -0
  524. package/dist/hotkeys/index.js +8 -0
  525. package/dist/hotkeys/meta.d.ts +103 -0
  526. package/dist/hotkeys/meta.d.ts.map +1 -0
  527. package/dist/hotkeys/meta.js +65 -0
  528. package/dist/icon/index.d.ts +1 -1
  529. package/dist/icon/index.d.ts.map +1 -1
  530. package/dist/icon/index.js +1 -1
  531. package/dist/icon/meta.d.ts +20 -28
  532. package/dist/icon/meta.d.ts.map +1 -1
  533. package/dist/icon/meta.js +20 -20
  534. package/dist/iconbutton/IconButton.svelte +89 -0
  535. package/dist/iconbutton/IconButton.svelte.d.ts +53 -0
  536. package/dist/iconbutton/IconButton.svelte.d.ts.map +1 -0
  537. package/dist/iconbutton/index.d.ts +3 -0
  538. package/dist/iconbutton/index.d.ts.map +1 -0
  539. package/dist/iconbutton/index.js +2 -0
  540. package/dist/iconbutton/meta.d.ts +150 -0
  541. package/dist/iconbutton/meta.d.ts.map +1 -0
  542. package/dist/iconbutton/meta.js +53 -0
  543. package/dist/illustrations/IllustrationConstruction.svelte +25 -0
  544. package/dist/illustrations/IllustrationConstruction.svelte.d.ts +8 -0
  545. package/dist/illustrations/IllustrationConstruction.svelte.d.ts.map +1 -0
  546. package/dist/illustrations/IllustrationConstructionDark.svelte +25 -0
  547. package/dist/illustrations/IllustrationConstructionDark.svelte.d.ts +8 -0
  548. package/dist/illustrations/IllustrationConstructionDark.svelte.d.ts.map +1 -0
  549. package/dist/illustrations/IllustrationFailure.svelte +25 -0
  550. package/dist/illustrations/IllustrationFailure.svelte.d.ts +8 -0
  551. package/dist/illustrations/IllustrationFailure.svelte.d.ts.map +1 -0
  552. package/dist/illustrations/IllustrationFailureDark.svelte +25 -0
  553. package/dist/illustrations/IllustrationFailureDark.svelte.d.ts +8 -0
  554. package/dist/illustrations/IllustrationFailureDark.svelte.d.ts.map +1 -0
  555. package/dist/illustrations/IllustrationIdle.svelte +25 -0
  556. package/dist/illustrations/IllustrationIdle.svelte.d.ts +8 -0
  557. package/dist/illustrations/IllustrationIdle.svelte.d.ts.map +1 -0
  558. package/dist/illustrations/IllustrationIdleDark.svelte +25 -0
  559. package/dist/illustrations/IllustrationIdleDark.svelte.d.ts +8 -0
  560. package/dist/illustrations/IllustrationIdleDark.svelte.d.ts.map +1 -0
  561. package/dist/illustrations/IllustrationNoAccess.svelte +25 -0
  562. package/dist/illustrations/IllustrationNoAccess.svelte.d.ts +8 -0
  563. package/dist/illustrations/IllustrationNoAccess.svelte.d.ts.map +1 -0
  564. package/dist/illustrations/IllustrationNoAccessDark.svelte +25 -0
  565. package/dist/illustrations/IllustrationNoAccessDark.svelte.d.ts +8 -0
  566. package/dist/illustrations/IllustrationNoAccessDark.svelte.d.ts.map +1 -0
  567. package/dist/illustrations/IllustrationNoContent.svelte +25 -0
  568. package/dist/illustrations/IllustrationNoContent.svelte.d.ts +8 -0
  569. package/dist/illustrations/IllustrationNoContent.svelte.d.ts.map +1 -0
  570. package/dist/illustrations/IllustrationNoContentDark.svelte +25 -0
  571. package/dist/illustrations/IllustrationNoContentDark.svelte.d.ts +8 -0
  572. package/dist/illustrations/IllustrationNoContentDark.svelte.d.ts.map +1 -0
  573. package/dist/illustrations/IllustrationNoResult.svelte +25 -0
  574. package/dist/illustrations/IllustrationNoResult.svelte.d.ts +8 -0
  575. package/dist/illustrations/IllustrationNoResult.svelte.d.ts.map +1 -0
  576. package/dist/illustrations/IllustrationNoResultDark.svelte +25 -0
  577. package/dist/illustrations/IllustrationNoResultDark.svelte.d.ts +8 -0
  578. package/dist/illustrations/IllustrationNoResultDark.svelte.d.ts.map +1 -0
  579. package/dist/illustrations/IllustrationNotFound.svelte +25 -0
  580. package/dist/illustrations/IllustrationNotFound.svelte.d.ts +8 -0
  581. package/dist/illustrations/IllustrationNotFound.svelte.d.ts.map +1 -0
  582. package/dist/illustrations/IllustrationNotFoundDark.svelte +25 -0
  583. package/dist/illustrations/IllustrationNotFoundDark.svelte.d.ts +8 -0
  584. package/dist/illustrations/IllustrationNotFoundDark.svelte.d.ts.map +1 -0
  585. package/dist/illustrations/IllustrationSuccess.svelte +25 -0
  586. package/dist/illustrations/IllustrationSuccess.svelte.d.ts +8 -0
  587. package/dist/illustrations/IllustrationSuccess.svelte.d.ts.map +1 -0
  588. package/dist/illustrations/IllustrationSuccessDark.svelte +25 -0
  589. package/dist/illustrations/IllustrationSuccessDark.svelte.d.ts +8 -0
  590. package/dist/illustrations/IllustrationSuccessDark.svelte.d.ts.map +1 -0
  591. package/dist/illustrations/index.d.ts +22 -0
  592. package/dist/illustrations/index.d.ts.map +1 -0
  593. package/dist/illustrations/index.js +21 -0
  594. package/dist/image/Image.svelte +260 -283
  595. package/dist/image/Image.svelte.d.ts +20 -21
  596. package/dist/image/Image.svelte.d.ts.map +1 -1
  597. package/dist/image/ImagePreview.svelte +201 -297
  598. package/dist/image/ImagePreview.svelte.d.ts +7 -10
  599. package/dist/image/ImagePreview.svelte.d.ts.map +1 -1
  600. package/dist/image/PreviewFooter.svelte +400 -0
  601. package/dist/image/PreviewFooter.svelte.d.ts +62 -0
  602. package/dist/image/PreviewFooter.svelte.d.ts.map +1 -0
  603. package/dist/image/PreviewHeader.svelte +93 -0
  604. package/dist/image/PreviewHeader.svelte.d.ts +16 -0
  605. package/dist/image/PreviewHeader.svelte.d.ts.map +1 -0
  606. package/dist/image/PreviewImage.svelte +296 -0
  607. package/dist/image/PreviewImage.svelte.d.ts +26 -0
  608. package/dist/image/PreviewImage.svelte.d.ts.map +1 -0
  609. package/dist/image/PreviewInner.svelte +554 -0
  610. package/dist/image/PreviewInner.svelte.d.ts +58 -0
  611. package/dist/image/PreviewInner.svelte.d.ts.map +1 -0
  612. package/dist/image/download.d.ts +8 -0
  613. package/dist/image/download.d.ts.map +1 -0
  614. package/dist/image/download.js +29 -0
  615. package/dist/image/index.d.ts +6 -7
  616. package/dist/image/index.d.ts.map +1 -1
  617. package/dist/image/index.js +5 -5
  618. package/dist/image/meta.d.ts +231 -88
  619. package/dist/image/meta.d.ts.map +1 -1
  620. package/dist/image/meta.js +93 -83
  621. package/dist/image/previewContext.d.ts +29 -0
  622. package/dist/image/previewContext.d.ts.map +1 -0
  623. package/dist/image/previewContext.js +8 -0
  624. package/dist/image/previewGeometry.d.ts +70 -0
  625. package/dist/image/previewGeometry.d.ts.map +1 -0
  626. package/dist/image/previewGeometry.js +184 -0
  627. package/dist/image/types.d.ts +66 -0
  628. package/dist/image/types.d.ts.map +1 -0
  629. package/dist/image/types.js +1 -0
  630. package/dist/index.d.ts +48 -26
  631. package/dist/index.d.ts.map +1 -1
  632. package/dist/index.js +40 -22
  633. package/dist/input/Input.svelte +537 -320
  634. package/dist/input/Input.svelte.d.ts +69 -21
  635. package/dist/input/Input.svelte.d.ts.map +1 -1
  636. package/dist/input/InputGroup.svelte +188 -0
  637. package/dist/input/InputGroup.svelte.d.ts +35 -0
  638. package/dist/input/InputGroup.svelte.d.ts.map +1 -0
  639. package/dist/input/TextArea.svelte +788 -0
  640. package/dist/input/TextArea.svelte.d.ts +104 -0
  641. package/dist/input/TextArea.svelte.d.ts.map +1 -0
  642. package/dist/input/context.d.ts +13 -0
  643. package/dist/input/context.d.ts.map +1 -0
  644. package/dist/input/context.js +5 -0
  645. package/dist/input/index.d.ts +4 -1
  646. package/dist/input/index.d.ts.map +1 -1
  647. package/dist/input/index.js +5 -1
  648. package/dist/input/meta.d.ts +802 -22
  649. package/dist/input/meta.d.ts.map +1 -1
  650. package/dist/input/meta.js +196 -17
  651. package/dist/input-number/InputNumber.svelte +446 -427
  652. package/dist/input-number/InputNumber.svelte.d.ts +73 -45
  653. package/dist/input-number/InputNumber.svelte.d.ts.map +1 -1
  654. package/dist/input-number/meta.d.ts +140 -48
  655. package/dist/input-number/meta.d.ts.map +1 -1
  656. package/dist/input-number/meta.js +39 -22
  657. package/dist/json-viewer/JsonViewer.svelte +528 -0
  658. package/dist/json-viewer/JsonViewer.svelte.d.ts +43 -0
  659. package/dist/json-viewer/JsonViewer.svelte.d.ts.map +1 -0
  660. package/dist/json-viewer/index.d.ts +4 -0
  661. package/dist/json-viewer/index.d.ts.map +1 -0
  662. package/dist/json-viewer/index.js +2 -0
  663. package/dist/json-viewer/meta.d.ts +129 -0
  664. package/dist/{lottie-icon → json-viewer}/meta.d.ts.map +1 -1
  665. package/dist/json-viewer/meta.js +130 -0
  666. package/dist/json-viewer/semi-json-viewer-core.d.ts +94 -0
  667. package/dist/layout/Content.svelte +8 -25
  668. package/dist/layout/Content.svelte.d.ts +1 -3
  669. package/dist/layout/Content.svelte.d.ts.map +1 -1
  670. package/dist/layout/Footer.svelte +7 -40
  671. package/dist/layout/Footer.svelte.d.ts +1 -4
  672. package/dist/layout/Footer.svelte.d.ts.map +1 -1
  673. package/dist/layout/Header.svelte +7 -37
  674. package/dist/layout/Header.svelte.d.ts +1 -4
  675. package/dist/layout/Header.svelte.d.ts.map +1 -1
  676. package/dist/layout/Layout.svelte +30 -17
  677. package/dist/layout/Layout.svelte.d.ts +3 -1
  678. package/dist/layout/Layout.svelte.d.ts.map +1 -1
  679. package/dist/layout/Sider.svelte +71 -186
  680. package/dist/layout/Sider.svelte.d.ts +15 -19
  681. package/dist/layout/Sider.svelte.d.ts.map +1 -1
  682. package/dist/layout/meta.d.ts +28 -91
  683. package/dist/layout/meta.d.ts.map +1 -1
  684. package/dist/layout/meta.js +38 -56
  685. package/dist/list/List.svelte +158 -825
  686. package/dist/list/List.svelte.d.ts +32 -70
  687. package/dist/list/List.svelte.d.ts.map +1 -1
  688. package/dist/list/ListItem.svelte +129 -131
  689. package/dist/list/ListItem.svelte.d.ts +21 -12
  690. package/dist/list/ListItem.svelte.d.ts.map +1 -1
  691. package/dist/list/context.d.ts +32 -23
  692. package/dist/list/context.d.ts.map +1 -1
  693. package/dist/list/index.d.ts +3 -8
  694. package/dist/list/index.d.ts.map +1 -1
  695. package/dist/list/index.js +4 -8
  696. package/dist/list/meta.d.ts +110 -98
  697. package/dist/list/meta.d.ts.map +1 -1
  698. package/dist/list/meta.js +76 -58
  699. package/dist/lottie/Lottie.svelte +138 -0
  700. package/dist/lottie/Lottie.svelte.d.ts +32 -0
  701. package/dist/lottie/Lottie.svelte.d.ts.map +1 -0
  702. package/dist/lottie/index.d.ts +3 -0
  703. package/dist/lottie/index.d.ts.map +1 -0
  704. package/dist/lottie/index.js +2 -0
  705. package/dist/lottie/meta.d.ts +76 -0
  706. package/dist/lottie/meta.d.ts.map +1 -0
  707. package/dist/lottie/meta.js +81 -0
  708. package/dist/markdown-render/HastNode.svelte +66 -0
  709. package/dist/markdown-render/HastNode.svelte.d.ts +11 -0
  710. package/dist/markdown-render/HastNode.svelte.d.ts.map +1 -0
  711. package/dist/markdown-render/MarkdownRender.svelte +152 -0
  712. package/dist/markdown-render/MarkdownRender.svelte.d.ts +26 -0
  713. package/dist/markdown-render/MarkdownRender.svelte.d.ts.map +1 -0
  714. package/dist/markdown-render/components/MdCode.svelte +20 -0
  715. package/dist/markdown-render/components/MdCode.svelte.d.ts +9 -0
  716. package/dist/markdown-render/components/MdCode.svelte.d.ts.map +1 -0
  717. package/dist/markdown-render/components/MdHeading.svelte +29 -0
  718. package/dist/markdown-render/components/MdHeading.svelte.d.ts +11 -0
  719. package/dist/markdown-render/components/MdHeading.svelte.d.ts.map +1 -0
  720. package/dist/markdown-render/components/MdImage.svelte +28 -0
  721. package/dist/markdown-render/components/MdImage.svelte.d.ts +9 -0
  722. package/dist/markdown-render/components/MdImage.svelte.d.ts.map +1 -0
  723. package/dist/markdown-render/components/MdLink.svelte +33 -0
  724. package/dist/markdown-render/components/MdLink.svelte.d.ts +10 -0
  725. package/dist/markdown-render/components/MdLink.svelte.d.ts.map +1 -0
  726. package/dist/markdown-render/components/MdParagraph.svelte +19 -0
  727. package/dist/markdown-render/components/MdParagraph.svelte.d.ts +9 -0
  728. package/dist/markdown-render/components/MdParagraph.svelte.d.ts.map +1 -0
  729. package/dist/markdown-render/components/MdPre.svelte +48 -0
  730. package/dist/markdown-render/components/MdPre.svelte.d.ts +9 -0
  731. package/dist/markdown-render/components/MdPre.svelte.d.ts.map +1 -0
  732. package/dist/markdown-render/components/MdTable.svelte +53 -0
  733. package/dist/markdown-render/components/MdTable.svelte.d.ts +9 -0
  734. package/dist/markdown-render/components/MdTable.svelte.d.ts.map +1 -0
  735. package/dist/markdown-render/components/index.d.ts +26 -0
  736. package/dist/markdown-render/components/index.d.ts.map +1 -0
  737. package/dist/markdown-render/components/index.js +27 -0
  738. package/dist/markdown-render/index.d.ts +4 -0
  739. package/dist/markdown-render/index.d.ts.map +1 -0
  740. package/dist/markdown-render/index.js +2 -0
  741. package/dist/markdown-render/meta.d.ts +81 -0
  742. package/dist/markdown-render/meta.d.ts.map +1 -0
  743. package/dist/markdown-render/meta.js +105 -0
  744. package/dist/markdown-render/props.d.ts +15 -0
  745. package/dist/markdown-render/props.d.ts.map +1 -0
  746. package/dist/markdown-render/props.js +51 -0
  747. package/dist/modal/ConfirmModal.svelte +105 -86
  748. package/dist/modal/ConfirmModal.svelte.d.ts +7 -4
  749. package/dist/modal/ConfirmModal.svelte.d.ts.map +1 -1
  750. package/dist/modal/Modal.svelte +459 -343
  751. package/dist/modal/Modal.svelte.d.ts +71 -41
  752. package/dist/modal/Modal.svelte.d.ts.map +1 -1
  753. package/dist/modal/ModalContextHolder.svelte +22 -0
  754. package/dist/modal/ModalContextHolder.svelte.d.ts +8 -0
  755. package/dist/modal/ModalContextHolder.svelte.d.ts.map +1 -0
  756. package/dist/modal/command.svelte.d.ts +7 -1
  757. package/dist/modal/command.svelte.d.ts.map +1 -1
  758. package/dist/modal/command.svelte.js +1 -1
  759. package/dist/modal/index.d.ts +7 -1
  760. package/dist/modal/index.d.ts.map +1 -1
  761. package/dist/modal/index.js +8 -2
  762. package/dist/modal/meta.d.ts +149 -103
  763. package/dist/modal/meta.d.ts.map +1 -1
  764. package/dist/modal/meta.js +95 -109
  765. package/dist/modal/use-modal.svelte.d.ts +33 -0
  766. package/dist/modal/use-modal.svelte.d.ts.map +1 -0
  767. package/dist/modal/use-modal.svelte.js +44 -0
  768. package/dist/nav/Nav.svelte +329 -146
  769. package/dist/nav/Nav.svelte.d.ts +43 -30
  770. package/dist/nav/Nav.svelte.d.ts.map +1 -1
  771. package/dist/nav/NavCollapseButton.svelte +74 -0
  772. package/dist/nav/NavCollapseButton.svelte.d.ts +12 -0
  773. package/dist/nav/NavCollapseButton.svelte.d.ts.map +1 -0
  774. package/dist/nav/NavFooter.svelte +42 -47
  775. package/dist/nav/NavFooter.svelte.d.ts +6 -2
  776. package/dist/nav/NavFooter.svelte.d.ts.map +1 -1
  777. package/dist/nav/NavHeader.svelte +61 -12
  778. package/dist/nav/NavHeader.svelte.d.ts +8 -2
  779. package/dist/nav/NavHeader.svelte.d.ts.map +1 -1
  780. package/dist/nav/NavItem.svelte +21 -17
  781. package/dist/nav/NavItem.svelte.d.ts +12 -10
  782. package/dist/nav/NavItem.svelte.d.ts.map +1 -1
  783. package/dist/nav/NavItemRender.svelte +420 -0
  784. package/dist/nav/NavItemRender.svelte.d.ts +12 -0
  785. package/dist/nav/NavItemRender.svelte.d.ts.map +1 -0
  786. package/dist/nav/NavPopupNode.svelte +119 -0
  787. package/dist/nav/NavPopupNode.svelte.d.ts +8 -0
  788. package/dist/nav/NavPopupNode.svelte.d.ts.map +1 -0
  789. package/dist/nav/NavSub.svelte +44 -6
  790. package/dist/nav/NavSub.svelte.d.ts +20 -4
  791. package/dist/nav/NavSub.svelte.d.ts.map +1 -1
  792. package/dist/nav/NavSubPopup.svelte +90 -0
  793. package/dist/nav/NavSubPopup.svelte.d.ts +14 -0
  794. package/dist/nav/NavSubPopup.svelte.d.ts.map +1 -0
  795. package/dist/nav/context.d.ts +57 -8
  796. package/dist/nav/context.d.ts.map +1 -1
  797. package/dist/nav/context.js +6 -2
  798. package/dist/nav/index.d.ts +1 -1
  799. package/dist/nav/index.d.ts.map +1 -1
  800. package/dist/nav/meta.d.ts +131 -52
  801. package/dist/nav/meta.d.ts.map +1 -1
  802. package/dist/nav/meta.js +70 -29
  803. package/dist/nav/types.d.ts +89 -22
  804. package/dist/nav/types.d.ts.map +1 -1
  805. package/dist/nav/types.js +47 -26
  806. package/dist/notification/NotificationContainer.svelte +131 -119
  807. package/dist/notification/NotificationContainer.svelte.d.ts.map +1 -1
  808. package/dist/notification/NotificationHolder.svelte +18 -0
  809. package/dist/notification/NotificationHolder.svelte.d.ts +8 -0
  810. package/dist/notification/NotificationHolder.svelte.d.ts.map +1 -0
  811. package/dist/notification/NotificationItem.svelte +235 -289
  812. package/dist/notification/NotificationItem.svelte.d.ts +1 -5
  813. package/dist/notification/NotificationItem.svelte.d.ts.map +1 -1
  814. package/dist/notification/index.d.ts +3 -2
  815. package/dist/notification/index.d.ts.map +1 -1
  816. package/dist/notification/index.js +2 -1
  817. package/dist/notification/meta.d.ts +73 -50
  818. package/dist/notification/meta.d.ts.map +1 -1
  819. package/dist/notification/meta.js +85 -74
  820. package/dist/notification/store.d.ts +59 -44
  821. package/dist/notification/store.d.ts.map +1 -1
  822. package/dist/notification/store.js +68 -74
  823. package/dist/overflow-list/OverflowList.svelte +366 -470
  824. package/dist/overflow-list/OverflowList.svelte.d.ts +37 -40
  825. package/dist/overflow-list/OverflowList.svelte.d.ts.map +1 -1
  826. package/dist/overflow-list/meta.d.ts +71 -71
  827. package/dist/overflow-list/meta.d.ts.map +1 -1
  828. package/dist/overflow-list/meta.js +63 -78
  829. package/dist/pagination/Pagination.svelte +454 -251
  830. package/dist/pagination/Pagination.svelte.d.ts +38 -39
  831. package/dist/pagination/Pagination.svelte.d.ts.map +1 -1
  832. package/dist/pagination/meta.d.ts +75 -83
  833. package/dist/pagination/meta.d.ts.map +1 -1
  834. package/dist/pagination/meta.js +78 -57
  835. package/dist/pincode/PinCode.svelte +348 -0
  836. package/dist/pincode/PinCode.svelte.d.ts +47 -0
  837. package/dist/pincode/PinCode.svelte.d.ts.map +1 -0
  838. package/dist/pincode/index.d.ts +3 -0
  839. package/dist/pincode/index.d.ts.map +1 -0
  840. package/dist/pincode/index.js +2 -0
  841. package/dist/pincode/meta.d.ts +147 -0
  842. package/dist/pincode/meta.d.ts.map +1 -0
  843. package/dist/pincode/meta.js +91 -0
  844. package/dist/popconfirm/Popconfirm.svelte +313 -599
  845. package/dist/popconfirm/Popconfirm.svelte.d.ts +65 -68
  846. package/dist/popconfirm/Popconfirm.svelte.d.ts.map +1 -1
  847. package/dist/popconfirm/meta.d.ts +85 -161
  848. package/dist/popconfirm/meta.d.ts.map +1 -1
  849. package/dist/popconfirm/meta.js +68 -185
  850. package/dist/popover/Popover.svelte +342 -564
  851. package/dist/popover/Popover.svelte.d.ts +82 -52
  852. package/dist/popover/Popover.svelte.d.ts.map +1 -1
  853. package/dist/popover/meta.d.ts +102 -74
  854. package/dist/popover/meta.d.ts.map +1 -1
  855. package/dist/popover/meta.js +103 -62
  856. package/dist/progress/Progress.svelte +248 -309
  857. package/dist/progress/Progress.svelte.d.ts +19 -27
  858. package/dist/progress/Progress.svelte.d.ts.map +1 -1
  859. package/dist/progress/index.d.ts +1 -1
  860. package/dist/progress/index.d.ts.map +1 -1
  861. package/dist/progress/meta.d.ts +70 -62
  862. package/dist/progress/meta.d.ts.map +1 -1
  863. package/dist/progress/meta.js +68 -77
  864. package/dist/radio/Radio.svelte +451 -239
  865. package/dist/radio/Radio.svelte.d.ts +13 -7
  866. package/dist/radio/Radio.svelte.d.ts.map +1 -1
  867. package/dist/radio/RadioGroup.svelte +152 -121
  868. package/dist/radio/RadioGroup.svelte.d.ts +27 -6
  869. package/dist/radio/RadioGroup.svelte.d.ts.map +1 -1
  870. package/dist/radio/context.d.ts +23 -18
  871. package/dist/radio/context.d.ts.map +1 -1
  872. package/dist/radio/index.d.ts +1 -1
  873. package/dist/radio/index.d.ts.map +1 -1
  874. package/dist/radio/meta.d.ts +62 -23
  875. package/dist/radio/meta.d.ts.map +1 -1
  876. package/dist/radio/meta.js +60 -17
  877. package/dist/rating/Rating.svelte +358 -275
  878. package/dist/rating/Rating.svelte.d.ts +25 -18
  879. package/dist/rating/Rating.svelte.d.ts.map +1 -1
  880. package/dist/rating/meta.d.ts +73 -40
  881. package/dist/rating/meta.d.ts.map +1 -1
  882. package/dist/rating/meta.js +55 -28
  883. package/dist/resizable/Resizable.svelte +354 -0
  884. package/dist/resizable/Resizable.svelte.d.ts +61 -0
  885. package/dist/resizable/Resizable.svelte.d.ts.map +1 -0
  886. package/dist/resizable/ResizeGroup.svelte +308 -0
  887. package/dist/resizable/ResizeGroup.svelte.d.ts +13 -0
  888. package/dist/resizable/ResizeGroup.svelte.d.ts.map +1 -0
  889. package/dist/resizable/ResizeHandler.svelte +87 -0
  890. package/dist/resizable/ResizeHandler.svelte.d.ts +13 -0
  891. package/dist/resizable/ResizeHandler.svelte.d.ts.map +1 -0
  892. package/dist/resizable/ResizeItem.svelte +103 -0
  893. package/dist/resizable/ResizeItem.svelte.d.ts +20 -0
  894. package/dist/resizable/ResizeItem.svelte.d.ts.map +1 -0
  895. package/dist/resizable/context.d.ts +39 -0
  896. package/dist/resizable/context.d.ts.map +1 -0
  897. package/dist/resizable/context.js +1 -0
  898. package/dist/resizable/index.d.ts +8 -0
  899. package/dist/resizable/index.d.ts.map +1 -0
  900. package/dist/resizable/index.js +7 -0
  901. package/dist/resizable/meta.d.ts +243 -0
  902. package/dist/resizable/meta.d.ts.map +1 -0
  903. package/dist/resizable/meta.js +90 -0
  904. package/dist/resize-observer/ResizeObserver.svelte +12 -0
  905. package/dist/resize-observer/ResizeObserver.svelte.d.ts +7 -0
  906. package/dist/resize-observer/ResizeObserver.svelte.d.ts.map +1 -1
  907. package/dist/resize-observer/meta.d.ts +5 -0
  908. package/dist/resize-observer/meta.d.ts.map +1 -1
  909. package/dist/resize-observer/meta.js +6 -0
  910. package/dist/scroll-list/ScrollItem.svelte +612 -0
  911. package/dist/scroll-list/ScrollItem.svelte.d.ts +29 -0
  912. package/dist/scroll-list/ScrollItem.svelte.d.ts.map +1 -0
  913. package/dist/scroll-list/ScrollList.svelte +78 -227
  914. package/dist/scroll-list/ScrollList.svelte.d.ts +12 -41
  915. package/dist/scroll-list/ScrollList.svelte.d.ts.map +1 -1
  916. package/dist/scroll-list/index.d.ts +2 -2
  917. package/dist/scroll-list/index.d.ts.map +1 -1
  918. package/dist/scroll-list/index.js +1 -0
  919. package/dist/scroll-list/meta.d.ts +96 -101
  920. package/dist/scroll-list/meta.d.ts.map +1 -1
  921. package/dist/scroll-list/meta.js +84 -65
  922. package/dist/scroll-list/types.d.ts +2 -16
  923. package/dist/scroll-list/types.d.ts.map +1 -1
  924. package/dist/select/Select.svelte +683 -232
  925. package/dist/select/Select.svelte.d.ts +170 -37
  926. package/dist/select/Select.svelte.d.ts.map +1 -1
  927. package/dist/select/meta.d.ts +186 -40
  928. package/dist/select/meta.d.ts.map +1 -1
  929. package/dist/select/meta.js +54 -20
  930. package/dist/side-sheet/SideSheet.svelte +541 -500
  931. package/dist/side-sheet/SideSheet.svelte.d.ts +36 -49
  932. package/dist/side-sheet/SideSheet.svelte.d.ts.map +1 -1
  933. package/dist/side-sheet/meta.d.ts +77 -112
  934. package/dist/side-sheet/meta.d.ts.map +1 -1
  935. package/dist/side-sheet/meta.js +71 -71
  936. package/dist/sidebar/SideBar.svelte +168 -0
  937. package/dist/sidebar/SideBar.svelte.d.ts +28 -0
  938. package/dist/sidebar/SideBar.svelte.d.ts.map +1 -0
  939. package/dist/sidebar/SideBarAnnotation.svelte +453 -0
  940. package/dist/sidebar/SideBarAnnotation.svelte.d.ts +47 -0
  941. package/dist/sidebar/SideBarAnnotation.svelte.d.ts.map +1 -0
  942. package/dist/sidebar/SideBarCodeContent.svelte +201 -0
  943. package/dist/sidebar/SideBarCodeContent.svelte.d.ts +42 -0
  944. package/dist/sidebar/SideBarCodeContent.svelte.d.ts.map +1 -0
  945. package/dist/sidebar/SideBarContainer.svelte +478 -0
  946. package/dist/sidebar/SideBarContainer.svelte.d.ts +38 -0
  947. package/dist/sidebar/SideBarContainer.svelte.d.ts.map +1 -0
  948. package/dist/sidebar/SideBarFileContent.svelte +192 -0
  949. package/dist/sidebar/SideBarFileContent.svelte.d.ts +40 -0
  950. package/dist/sidebar/SideBarFileContent.svelte.d.ts.map +1 -0
  951. package/dist/sidebar/SideBarFileItem.svelte +311 -0
  952. package/dist/sidebar/SideBarFileItem.svelte.d.ts +21 -0
  953. package/dist/sidebar/SideBarFileItem.svelte.d.ts.map +1 -0
  954. package/dist/sidebar/SideBarImageUploadNode.svelte +103 -0
  955. package/dist/sidebar/SideBarImageUploadNode.svelte.d.ts +5 -0
  956. package/dist/sidebar/SideBarImageUploadNode.svelte.d.ts.map +1 -0
  957. package/dist/sidebar/SideBarMcpConfigure.svelte +544 -0
  958. package/dist/sidebar/SideBarMcpConfigure.svelte.d.ts +60 -0
  959. package/dist/sidebar/SideBarMcpConfigure.svelte.d.ts.map +1 -0
  960. package/dist/sidebar/SideBarOptions.svelte +137 -0
  961. package/dist/sidebar/SideBarOptions.svelte.d.ts +10 -0
  962. package/dist/sidebar/SideBarOptions.svelte.d.ts.map +1 -0
  963. package/dist/sidebar/file-extensions.d.ts +37 -0
  964. package/dist/sidebar/file-extensions.d.ts.map +1 -0
  965. package/dist/sidebar/file-extensions.js +45 -0
  966. package/dist/sidebar/index.d.ts +14 -0
  967. package/dist/sidebar/index.d.ts.map +1 -0
  968. package/dist/sidebar/index.js +9 -0
  969. package/dist/sidebar/meta.d.ts +373 -0
  970. package/dist/sidebar/meta.d.ts.map +1 -0
  971. package/dist/sidebar/meta.js +219 -0
  972. package/dist/sidebar/types.d.ts +70 -0
  973. package/dist/sidebar/types.d.ts.map +1 -0
  974. package/dist/sidebar/types.js +1 -0
  975. package/dist/skeleton/Skeleton.svelte +129 -97
  976. package/dist/skeleton/Skeleton.svelte.d.ts +7 -2
  977. package/dist/skeleton/Skeleton.svelte.d.ts.map +1 -1
  978. package/dist/skeleton/SkeletonAvatar.svelte +25 -68
  979. package/dist/skeleton/SkeletonAvatar.svelte.d.ts +6 -2
  980. package/dist/skeleton/SkeletonAvatar.svelte.d.ts.map +1 -1
  981. package/dist/skeleton/SkeletonButton.svelte +6 -77
  982. package/dist/skeleton/SkeletonButton.svelte.d.ts +0 -4
  983. package/dist/skeleton/SkeletonButton.svelte.d.ts.map +1 -1
  984. package/dist/skeleton/SkeletonImage.svelte +6 -87
  985. package/dist/skeleton/SkeletonImage.svelte.d.ts +0 -3
  986. package/dist/skeleton/SkeletonImage.svelte.d.ts.map +1 -1
  987. package/dist/skeleton/SkeletonParagraph.svelte +10 -87
  988. package/dist/skeleton/SkeletonParagraph.svelte.d.ts +1 -1
  989. package/dist/skeleton/SkeletonParagraph.svelte.d.ts.map +1 -1
  990. package/dist/skeleton/SkeletonTitle.svelte +6 -61
  991. package/dist/skeleton/SkeletonTitle.svelte.d.ts +0 -2
  992. package/dist/skeleton/SkeletonTitle.svelte.d.ts.map +1 -1
  993. package/dist/skeleton/index.d.ts +1 -1
  994. package/dist/skeleton/index.d.ts.map +1 -1
  995. package/dist/skeleton/meta.d.ts +99 -23
  996. package/dist/skeleton/meta.d.ts.map +1 -1
  997. package/dist/skeleton/meta.js +70 -28
  998. package/dist/slider/Slider.svelte +418 -419
  999. package/dist/slider/Slider.svelte.d.ts +45 -54
  1000. package/dist/slider/Slider.svelte.d.ts.map +1 -1
  1001. package/dist/slider/meta.d.ts +49 -87
  1002. package/dist/slider/meta.d.ts.map +1 -1
  1003. package/dist/slider/meta.js +50 -26
  1004. package/dist/space/Space.svelte +97 -49
  1005. package/dist/space/Space.svelte.d.ts +17 -4
  1006. package/dist/space/Space.svelte.d.ts.map +1 -1
  1007. package/dist/space/meta.d.ts +30 -17
  1008. package/dist/space/meta.d.ts.map +1 -1
  1009. package/dist/space/meta.js +29 -12
  1010. package/dist/spin/Spin.svelte +160 -195
  1011. package/dist/spin/Spin.svelte.d.ts +8 -12
  1012. package/dist/spin/Spin.svelte.d.ts.map +1 -1
  1013. package/dist/spin/meta.d.ts +36 -53
  1014. package/dist/spin/meta.d.ts.map +1 -1
  1015. package/dist/spin/meta.js +27 -47
  1016. package/dist/steps/Step.svelte +236 -0
  1017. package/dist/steps/Step.svelte.d.ts +5 -0
  1018. package/dist/steps/Step.svelte.d.ts.map +1 -0
  1019. package/dist/steps/Steps.svelte +521 -274
  1020. package/dist/steps/Steps.svelte.d.ts +14 -22
  1021. package/dist/steps/Steps.svelte.d.ts.map +1 -1
  1022. package/dist/steps/context.d.ts +41 -0
  1023. package/dist/steps/context.d.ts.map +1 -0
  1024. package/dist/steps/context.js +8 -0
  1025. package/dist/steps/index.d.ts +8 -2
  1026. package/dist/steps/index.d.ts.map +1 -1
  1027. package/dist/steps/index.js +5 -1
  1028. package/dist/steps/meta.d.ts +67 -42
  1029. package/dist/steps/meta.d.ts.map +1 -1
  1030. package/dist/steps/meta.js +169 -25
  1031. package/dist/steps/types.d.ts +30 -7
  1032. package/dist/steps/types.d.ts.map +1 -1
  1033. package/dist/switch/Switch.svelte +224 -205
  1034. package/dist/switch/Switch.svelte.d.ts +22 -43
  1035. package/dist/switch/Switch.svelte.d.ts.map +1 -1
  1036. package/dist/switch/meta.d.ts +44 -51
  1037. package/dist/switch/meta.d.ts.map +1 -1
  1038. package/dist/switch/meta.js +68 -27
  1039. package/dist/table/Table.svelte +1065 -600
  1040. package/dist/table/Table.svelte.d.ts +95 -1
  1041. package/dist/table/Table.svelte.d.ts.map +1 -1
  1042. package/dist/table/meta.d.ts +221 -2
  1043. package/dist/table/meta.d.ts.map +1 -1
  1044. package/dist/table/meta.js +119 -18
  1045. package/dist/table/types.d.ts +36 -6
  1046. package/dist/table/types.d.ts.map +1 -1
  1047. package/dist/tabs/TabPane.svelte +4 -1
  1048. package/dist/tabs/TabPane.svelte.d.ts +2 -0
  1049. package/dist/tabs/TabPane.svelte.d.ts.map +1 -1
  1050. package/dist/tabs/Tabs.svelte +453 -280
  1051. package/dist/tabs/Tabs.svelte.d.ts +41 -32
  1052. package/dist/tabs/Tabs.svelte.d.ts.map +1 -1
  1053. package/dist/tabs/context.d.ts +3 -0
  1054. package/dist/tabs/context.d.ts.map +1 -1
  1055. package/dist/tabs/meta.d.ts +43 -47
  1056. package/dist/tabs/meta.d.ts.map +1 -1
  1057. package/dist/tabs/meta.js +76 -47
  1058. package/dist/tabs/types.d.ts +3 -0
  1059. package/dist/tabs/types.d.ts.map +1 -1
  1060. package/dist/tag/SplitTagGroup.svelte +62 -0
  1061. package/dist/tag/SplitTagGroup.svelte.d.ts +15 -0
  1062. package/dist/tag/SplitTagGroup.svelte.d.ts.map +1 -0
  1063. package/dist/tag/Tag.svelte +394 -261
  1064. package/dist/tag/Tag.svelte.d.ts +40 -23
  1065. package/dist/tag/Tag.svelte.d.ts.map +1 -1
  1066. package/dist/tag/TagGroup.svelte +208 -0
  1067. package/dist/tag/TagGroup.svelte.d.ts +56 -0
  1068. package/dist/tag/TagGroup.svelte.d.ts.map +1 -0
  1069. package/dist/tag/index.d.ts +2 -0
  1070. package/dist/tag/index.d.ts.map +1 -1
  1071. package/dist/tag/index.js +4 -0
  1072. package/dist/tag/meta.d.ts +157 -51
  1073. package/dist/tag/meta.d.ts.map +1 -1
  1074. package/dist/tag/meta.js +82 -45
  1075. package/dist/tag-input/TagInput.svelte +575 -261
  1076. package/dist/tag-input/TagInput.svelte.d.ts +52 -17
  1077. package/dist/tag-input/TagInput.svelte.d.ts.map +1 -1
  1078. package/dist/tag-input/meta.d.ts +132 -20
  1079. package/dist/tag-input/meta.d.ts.map +1 -1
  1080. package/dist/tag-input/meta.js +49 -21
  1081. package/dist/tag-input/split.d.ts +8 -0
  1082. package/dist/tag-input/split.d.ts.map +1 -0
  1083. package/dist/tag-input/split.js +22 -0
  1084. package/dist/time-picker/TimePicker.svelte +504 -722
  1085. package/dist/time-picker/TimePicker.svelte.d.ts +67 -47
  1086. package/dist/time-picker/TimePicker.svelte.d.ts.map +1 -1
  1087. package/dist/time-picker/meta.d.ts +201 -19
  1088. package/dist/time-picker/meta.d.ts.map +1 -1
  1089. package/dist/time-picker/meta.js +73 -16
  1090. package/dist/timeline/Timeline.svelte +212 -548
  1091. package/dist/timeline/Timeline.svelte.d.ts +9 -22
  1092. package/dist/timeline/Timeline.svelte.d.ts.map +1 -1
  1093. package/dist/timeline/TimelineItem.svelte +101 -143
  1094. package/dist/timeline/TimelineItem.svelte.d.ts +20 -20
  1095. package/dist/timeline/TimelineItem.svelte.d.ts.map +1 -1
  1096. package/dist/timeline/context.d.ts +8 -12
  1097. package/dist/timeline/context.d.ts.map +1 -1
  1098. package/dist/timeline/index.d.ts +2 -2
  1099. package/dist/timeline/index.d.ts.map +1 -1
  1100. package/dist/timeline/meta.d.ts +59 -95
  1101. package/dist/timeline/meta.d.ts.map +1 -1
  1102. package/dist/timeline/meta.js +81 -86
  1103. package/dist/timeline/types.d.ts +16 -5
  1104. package/dist/timeline/types.d.ts.map +1 -1
  1105. package/dist/toast/ToastContainer.svelte +111 -125
  1106. package/dist/toast/ToastContainer.svelte.d.ts +3 -0
  1107. package/dist/toast/ToastContainer.svelte.d.ts.map +1 -1
  1108. package/dist/toast/ToastHolder.svelte +18 -0
  1109. package/dist/toast/ToastHolder.svelte.d.ts +8 -0
  1110. package/dist/toast/ToastHolder.svelte.d.ts.map +1 -0
  1111. package/dist/toast/ToastItem.svelte +209 -191
  1112. package/dist/toast/ToastItem.svelte.d.ts +7 -0
  1113. package/dist/toast/ToastItem.svelte.d.ts.map +1 -1
  1114. package/dist/toast/index.d.ts +3 -2
  1115. package/dist/toast/index.d.ts.map +1 -1
  1116. package/dist/toast/index.js +2 -1
  1117. package/dist/toast/meta.d.ts +84 -53
  1118. package/dist/toast/meta.d.ts.map +1 -1
  1119. package/dist/toast/meta.js +69 -62
  1120. package/dist/toast/store.d.ts +79 -51
  1121. package/dist/toast/store.d.ts.map +1 -1
  1122. package/dist/toast/store.js +179 -116
  1123. package/dist/tooltip/Tooltip.svelte +533 -203
  1124. package/dist/tooltip/Tooltip.svelte.d.ts +90 -20
  1125. package/dist/tooltip/Tooltip.svelte.d.ts.map +1 -1
  1126. package/dist/tooltip/index.d.ts +1 -0
  1127. package/dist/tooltip/index.d.ts.map +1 -1
  1128. package/dist/tooltip/index.js +1 -0
  1129. package/dist/tooltip/meta.d.ts +131 -34
  1130. package/dist/tooltip/meta.d.ts.map +1 -1
  1131. package/dist/tooltip/meta.js +92 -28
  1132. package/dist/tooltip/placement.d.ts +21 -1
  1133. package/dist/tooltip/placement.d.ts.map +1 -1
  1134. package/dist/tooltip/placement.js +57 -1
  1135. package/dist/transfer/Transfer.svelte +686 -1100
  1136. package/dist/transfer/Transfer.svelte.d.ts +68 -73
  1137. package/dist/transfer/Transfer.svelte.d.ts.map +1 -1
  1138. package/dist/transfer/meta.d.ts +44 -65
  1139. package/dist/transfer/meta.d.ts.map +1 -1
  1140. package/dist/transfer/meta.js +76 -31
  1141. package/dist/transfer/types.d.ts +5 -0
  1142. package/dist/transfer/types.d.ts.map +1 -1
  1143. package/dist/tree/Tree.svelte +973 -422
  1144. package/dist/tree/Tree.svelte.d.ts +291 -72
  1145. package/dist/tree/Tree.svelte.d.ts.map +1 -1
  1146. package/dist/tree/meta.d.ts +246 -79
  1147. package/dist/tree/meta.d.ts.map +1 -1
  1148. package/dist/tree/meta.js +238 -58
  1149. package/dist/tree-select/TreeSelect.svelte +591 -240
  1150. package/dist/tree-select/TreeSelect.svelte.d.ts +88 -54
  1151. package/dist/tree-select/TreeSelect.svelte.d.ts.map +1 -1
  1152. package/dist/tree-select/meta.d.ts +344 -57
  1153. package/dist/tree-select/meta.d.ts.map +1 -1
  1154. package/dist/tree-select/meta.js +80 -26
  1155. package/dist/tree-select/types.d.ts +2 -0
  1156. package/dist/tree-select/types.d.ts.map +1 -1
  1157. package/dist/typography/Numeral.svelte +117 -0
  1158. package/dist/typography/Numeral.svelte.d.ts +35 -0
  1159. package/dist/typography/Numeral.svelte.d.ts.map +1 -0
  1160. package/dist/typography/Paragraph.svelte +20 -34
  1161. package/dist/typography/Paragraph.svelte.d.ts +8 -13
  1162. package/dist/typography/Paragraph.svelte.d.ts.map +1 -1
  1163. package/dist/typography/Text.svelte +22 -33
  1164. package/dist/typography/Text.svelte.d.ts +11 -13
  1165. package/dist/typography/Text.svelte.d.ts.map +1 -1
  1166. package/dist/typography/Title.svelte +23 -28
  1167. package/dist/typography/Title.svelte.d.ts +10 -11
  1168. package/dist/typography/Title.svelte.d.ts.map +1 -1
  1169. package/dist/typography/TypographyBase.svelte +534 -479
  1170. package/dist/typography/TypographyBase.svelte.d.ts +44 -29
  1171. package/dist/typography/TypographyBase.svelte.d.ts.map +1 -1
  1172. package/dist/typography/index.d.ts +3 -3
  1173. package/dist/typography/index.d.ts.map +1 -1
  1174. package/dist/typography/index.js +3 -3
  1175. package/dist/typography/meta.d.ts +190 -185
  1176. package/dist/typography/meta.d.ts.map +1 -1
  1177. package/dist/typography/meta.js +112 -85
  1178. package/dist/upload/FileCard.svelte +634 -0
  1179. package/dist/upload/FileCard.svelte.d.ts +40 -0
  1180. package/dist/upload/FileCard.svelte.d.ts.map +1 -0
  1181. package/dist/upload/Upload.svelte +1112 -650
  1182. package/dist/upload/Upload.svelte.d.ts +118 -66
  1183. package/dist/upload/Upload.svelte.d.ts.map +1 -1
  1184. package/dist/upload/index.d.ts +2 -1
  1185. package/dist/upload/index.d.ts.map +1 -1
  1186. package/dist/upload/index.js +1 -0
  1187. package/dist/upload/meta.d.ts +231 -72
  1188. package/dist/upload/meta.d.ts.map +1 -1
  1189. package/dist/upload/meta.js +84 -42
  1190. package/dist/upload/types.d.ts +137 -3
  1191. package/dist/upload/types.d.ts.map +1 -1
  1192. package/dist/user-guide/UserGuide.svelte +655 -0
  1193. package/dist/user-guide/UserGuide.svelte.d.ts +75 -0
  1194. package/dist/user-guide/UserGuide.svelte.d.ts.map +1 -0
  1195. package/dist/user-guide/index.d.ts +4 -0
  1196. package/dist/user-guide/index.d.ts.map +1 -0
  1197. package/dist/user-guide/index.js +2 -0
  1198. package/dist/user-guide/meta.d.ts +162 -0
  1199. package/dist/user-guide/meta.d.ts.map +1 -0
  1200. package/dist/user-guide/meta.js +60 -0
  1201. package/dist/video-player/ErrorSvg.svelte +15 -0
  1202. package/dist/video-player/ErrorSvg.svelte.d.ts +19 -0
  1203. package/dist/video-player/ErrorSvg.svelte.d.ts.map +1 -0
  1204. package/dist/video-player/VideoPlayer.svelte +769 -0
  1205. package/dist/video-player/VideoPlayer.svelte.d.ts +43 -0
  1206. package/dist/video-player/VideoPlayer.svelte.d.ts.map +1 -0
  1207. package/dist/video-player/VideoProgress.svelte +267 -0
  1208. package/dist/video-player/VideoProgress.svelte.d.ts +18 -0
  1209. package/dist/video-player/VideoProgress.svelte.d.ts.map +1 -0
  1210. package/dist/video-player/index.d.ts +4 -0
  1211. package/dist/video-player/index.d.ts.map +1 -0
  1212. package/dist/video-player/index.js +2 -0
  1213. package/dist/video-player/meta.d.ts +200 -0
  1214. package/dist/video-player/meta.d.ts.map +1 -0
  1215. package/dist/video-player/meta.js +159 -0
  1216. package/package.json +29 -4
  1217. package/dist/collapse/types.d.ts +0 -6
  1218. package/dist/collapse/types.d.ts.map +0 -1
  1219. package/dist/date-picker/RangePicker.svelte +0 -775
  1220. package/dist/date-picker/RangePicker.svelte.d.ts +0 -38
  1221. package/dist/date-picker/RangePicker.svelte.d.ts.map +0 -1
  1222. package/dist/date-picker/range-meta.d.ts +0 -100
  1223. package/dist/date-picker/range-meta.d.ts.map +0 -1
  1224. package/dist/date-picker/range-meta.js +0 -43
  1225. package/dist/drawer/Drawer.svelte +0 -554
  1226. package/dist/drawer/Drawer.svelte.d.ts +0 -54
  1227. package/dist/drawer/Drawer.svelte.d.ts.map +0 -1
  1228. package/dist/drawer/index.d.ts +0 -3
  1229. package/dist/drawer/index.d.ts.map +0 -1
  1230. package/dist/drawer/index.js +0 -2
  1231. package/dist/drawer/meta.d.ts +0 -147
  1232. package/dist/drawer/meta.d.ts.map +0 -1
  1233. package/dist/drawer/meta.js +0 -126
  1234. package/dist/dropdown/DropdownItemNode.svelte +0 -355
  1235. package/dist/dropdown/DropdownItemNode.svelte.d.ts +0 -14
  1236. package/dist/dropdown/DropdownItemNode.svelte.d.ts.map +0 -1
  1237. package/dist/dropdown/DropdownSubMenu.svelte +0 -212
  1238. package/dist/dropdown/DropdownSubMenu.svelte.d.ts +0 -15
  1239. package/dist/dropdown/DropdownSubMenu.svelte.d.ts.map +0 -1
  1240. package/dist/grid/use-breakpoint.svelte.d.ts +0 -13
  1241. package/dist/grid/use-breakpoint.svelte.d.ts.map +0 -1
  1242. package/dist/grid/use-breakpoint.svelte.js +0 -41
  1243. package/dist/icon/Icon.svelte +0 -156
  1244. package/dist/icon/Icon.svelte.d.ts +0 -23
  1245. package/dist/icon/Icon.svelte.d.ts.map +0 -1
  1246. package/dist/image/ImagePreviewGroup.svelte +0 -93
  1247. package/dist/image/ImagePreviewGroup.svelte.d.ts +0 -14
  1248. package/dist/image/ImagePreviewGroup.svelte.d.ts.map +0 -1
  1249. package/dist/image/context.d.ts +0 -16
  1250. package/dist/image/context.d.ts.map +0 -1
  1251. package/dist/image/context.js +0 -8
  1252. package/dist/list/ListMeta.svelte +0 -73
  1253. package/dist/list/ListMeta.svelte.d.ts +0 -14
  1254. package/dist/list/ListMeta.svelte.d.ts.map +0 -1
  1255. package/dist/lottie-icon/LottieIcon.svelte +0 -330
  1256. package/dist/lottie-icon/LottieIcon.svelte.d.ts +0 -44
  1257. package/dist/lottie-icon/LottieIcon.svelte.d.ts.map +0 -1
  1258. package/dist/lottie-icon/index.d.ts +0 -4
  1259. package/dist/lottie-icon/index.d.ts.map +0 -1
  1260. package/dist/lottie-icon/index.js +0 -2
  1261. package/dist/lottie-icon/meta.d.ts +0 -147
  1262. package/dist/lottie-icon/meta.js +0 -161
  1263. package/dist/menu/Menu.svelte +0 -843
  1264. package/dist/menu/Menu.svelte.d.ts +0 -95
  1265. package/dist/menu/Menu.svelte.d.ts.map +0 -1
  1266. package/dist/menu/MenuPopupNode.svelte +0 -525
  1267. package/dist/menu/MenuPopupNode.svelte.d.ts +0 -52
  1268. package/dist/menu/MenuPopupNode.svelte.d.ts.map +0 -1
  1269. package/dist/menu/index.d.ts +0 -5
  1270. package/dist/menu/index.d.ts.map +0 -1
  1271. package/dist/menu/index.js +0 -3
  1272. package/dist/menu/meta.d.ts +0 -147
  1273. package/dist/menu/meta.d.ts.map +0 -1
  1274. package/dist/menu/meta.js +0 -141
  1275. package/dist/menu/types.d.ts +0 -88
  1276. package/dist/menu/types.d.ts.map +0 -1
  1277. package/dist/menu/types.js +0 -34
  1278. package/dist/scroll-list/ScrollColumn.svelte +0 -592
  1279. package/dist/scroll-list/ScrollColumn.svelte.d.ts +0 -34
  1280. package/dist/scroll-list/ScrollColumn.svelte.d.ts.map +0 -1
  1281. package/dist/skeleton/context.d.ts +0 -10
  1282. package/dist/skeleton/context.d.ts.map +0 -1
  1283. package/dist/skeleton/context.js +0 -1
  1284. package/dist/textarea/TextArea.svelte +0 -420
  1285. package/dist/textarea/TextArea.svelte.d.ts +0 -69
  1286. package/dist/textarea/TextArea.svelte.d.ts.map +0 -1
  1287. package/dist/textarea/index.d.ts +0 -3
  1288. package/dist/textarea/index.d.ts.map +0 -1
  1289. package/dist/textarea/index.js +0 -2
  1290. package/dist/textarea/meta.d.ts +0 -170
  1291. package/dist/textarea/meta.d.ts.map +0 -1
  1292. package/dist/textarea/meta.js +0 -104
  1293. package/dist/toast/live-region.d.ts +0 -21
  1294. package/dist/toast/live-region.d.ts.map +0 -1
  1295. package/dist/toast/live-region.js +0 -57
  1296. package/dist/typography/Link.svelte +0 -120
  1297. package/dist/typography/Link.svelte.d.ts +0 -35
  1298. package/dist/typography/Link.svelte.d.ts.map +0 -1
  1299. /package/dist/{collapse/types.js → ai-chat-dialogue/render-config.js} +0 -0
@@ -1,14 +1,11 @@
1
1
  <!--
2
- Upload — see specs/components/input/Upload.spec.md
3
- Basic subset: file selection (click + drag) + file list (name/size/status/remove).
4
- Controlled / uncontrolled `value`. 真实上传:有 action 且无 customRequest 时,
5
- 选文件后自动 XHR 上传(uploading→进度→success/error),customRequest 优先;
6
- XHR 句柄存 Map,remove/卸载时 abort。uploading 时渲染 Progress(line)。
7
- listType=image/picture-card:缩略图预览(item.url 优先,否则 file objectURL,移除/卸载 revoke)。
8
- concurrency 并发上限(0=不限,超出排队、完成补位,core createUploadQueue 调度);
9
- beforeUpload 异步校验/转换(false/reject 跳过该文件,返回 File 替换,true 正常上传)。
10
- directory:input 命令式加 webkitdirectory,可递归选择整个目录(保留 relativePath)。
11
- minSize/maxSize:core validateFileSize 纯函数校验(单位 KB),超限标 error + i18n 提示。
2
+ Upload — 严格对齐 Semi Design(破坏性重写,无向后兼容)。
3
+ 受控 prop:fileList / defaultFileList(对齐 Semi)。文件卡片渲染拆到 FileCard.svelte
4
+ (renderPic/renderFile 双分支)。class 命名走 Semi 连字符体系 cd-upload-*。
5
+ 真实上传:有 action 且无 customRequest 时选文件后自动 XHR 上传;customRequest 优先。
6
+ listType=picture:照片墙缩略图网格;list:文本卡片列表;none:不渲染列表。
7
+ crop:image/* 文件先进裁切弹窗(Modal + Cropper)。directory:input webkitdirectory。
8
+ minSize/maxSize:core validateFileSize 校验(KB);beforeUpload 支持返回富对象控制上传。
12
9
  -->
13
10
  <script lang="ts">
14
11
  import type { Snippet } from 'svelte';
@@ -17,111 +14,177 @@
17
14
  useLiveAnnouncer,
18
15
  computeUploadPercent,
19
16
  isUploadOk,
20
- createUploadQueue,
21
- resolveBeforeUpload,
22
17
  validateFileSize,
23
- type BeforeUploadResult,
24
18
  } from '@chenzy-design/core';
25
19
  import { useLocale } from '../locale-provider/index.js';
26
- import { Progress } from '../progress/index.js';
27
- import type { UploadFileItem } from './types.js';
20
+ import { Modal } from '../modal/index.js';
21
+ import { Cropper } from '../cropper/index.js';
22
+ import FileCard from './FileCard.svelte';
23
+ import { IconUpload } from '@chenzy-design/icons';
24
+ import type { CropperShape } from '../cropper/index.js';
25
+ import type {
26
+ UploadFileItem,
27
+ UploadListType,
28
+ UploadValidateStatus,
29
+ UploadPromptPosition,
30
+ UploadDataOrFn,
31
+ UploadShowTooltip,
32
+ UploadFileListTitle,
33
+ BeforeUploadObjectResult,
34
+ BeforeUploadProps,
35
+ AfterUploadProps,
36
+ AfterUploadResult,
37
+ RenderFileItemProps,
38
+ RenderPictureCloseProps,
39
+ } from './types.js';
40
+
41
+ /**
42
+ * 裁剪配置(对标 Semi CropProps)。crop=true 时用默认配置;传对象覆盖。
43
+ */
44
+ export interface UploadCropProps {
45
+ aspectRatio?: number;
46
+ shape?: CropperShape;
47
+ minZoom?: number;
48
+ maxZoom?: number;
49
+ zoomStep?: number;
50
+ quality?: number;
51
+ fill?: string;
52
+ modalTitle?: string;
53
+ modalOkText?: string;
54
+ modalCancelText?: string;
55
+ }
28
56
 
29
57
  interface Props {
30
- value?: UploadFileItem[];
31
- defaultValue?: UploadFileItem[];
58
+ /** 受控文件列表(对齐 Semi fileList);提供则受控。 */
59
+ fileList?: UploadFileItem[];
60
+ /** 非受控初始文件列表(对齐 Semi defaultFileList)。 */
61
+ defaultFileList?: UploadFileItem[];
32
62
  accept?: string;
33
63
  multiple?: boolean;
34
- /** 上传整个目录(input 加 webkitdirectory,递归选择目录下所有文件)。 */
64
+ /** 上传整个目录(对齐 Semi directory;input 加 webkitdirectory)。 */
35
65
  directory?: boolean;
36
66
  limit?: number;
37
- /** Max size per file, in KB. */
67
+ /** 单文件最大体积,单位 KB(对齐 Semi maxSize)。 */
38
68
  maxSize?: number;
39
- /** Min size per file, in KB. 小于此值的文件校验失败(error)。 */
69
+ /** 单文件最小体积,单位 KB(对齐 Semi minSize)。 */
40
70
  minSize?: number;
41
71
  disabled?: boolean;
42
- /**
43
- * 组件级尺寸(触发按钮/列表项),与其它表单控件一致。
44
- * 注意:区别于每个文件项的 file.size(字节体积)。
45
- */
46
- size?: 'small' | 'default' | 'large';
47
- /**
48
- * 组件级校验态(表单联动),影响上传区/边框色。
49
- * 注意:区别于每个文件项的 file.status(ready/uploading/error 上传进度态)。
50
- */
51
- status?: 'default' | 'warning' | 'error';
52
- listType?: 'text' | 'image' | 'picture-card' | 'none';
53
- drag?: boolean;
54
- /** 上传地址;提供且无 customRequest 时选文件后自动 XHR 上传 */
72
+ /** 组件级校验态(对齐 Semi validateStatus)。 */
73
+ validateStatus?: UploadValidateStatus;
74
+ /** 文件列表展示类型(对齐 Semi listType):list(默认)/picture/none。 */
75
+ listType?: UploadListType;
76
+ /** 拖拽上传(对齐 Semi draggable)。 */
77
+ draggable?: boolean;
78
+ /** 上传地址(对齐 Semi action);提供且无 customRequest 时自动 XHR 上传。 */
55
79
  action?: string;
56
- /** 表单字段名,默认 'file' */
57
- uploadName?: string;
58
- /** 额外请求头 */
59
- headers?: Record<string, string>;
60
- /** 随文件一起提交的额外字段 */
61
- uploadData?: Record<string, string>;
62
- /** 同时进行的上传数上限;0/不传=不限(受控调度,超出排队,完成补位) */
63
- concurrency?: number;
80
+ /** 表单字段名(对齐 Semi name),默认 'file' */
81
+ name?: string;
82
+ /** name,避免 Form.Upload 中 props 冲突(对齐 Semi fileName)。优先于 name。 */
83
+ fileName?: string;
84
+ /** 额外请求头(对齐 Semi headers)。静态对象或按当前 file 求值的函数。 */
85
+ headers?: UploadDataOrFn;
86
+ /** 随文件一起提交的额外字段(对齐 Semi data)。静态对象或按当前 file 求值的函数。 */
87
+ data?: UploadDataOrFn;
64
88
  /**
65
- * 每个文件上传前调用:返回 false / reject 跳过该文件(移除);
66
- * 返回 File 替换为该文件(如压缩后);返回 true / resolve 正常上传。异步会被 await。
89
+ * 上传前钩子(对齐 Semi beforeUpload):入参 { file, fileList }。
90
+ * 返回 false 拒绝该文件;true/undefined 正常上传;返回富对象 BeforeUploadObjectResult
91
+ * 精细控制(shouldUpload/autoRemove/status/validateMessage/fileInstance)。支持异步。
67
92
  */
68
- beforeUpload?: (file: File, fileList: File[]) => BeforeUploadResult | Promise<BeforeUploadResult>;
69
- /** 自定义上传实现(优先于 action)。返回 Promise 时受 concurrency 调度(完成才释放槽位)。 */
93
+ beforeUpload?: (
94
+ props: BeforeUploadProps,
95
+ ) => boolean | BeforeUploadObjectResult | Promise<boolean | BeforeUploadObjectResult>;
96
+ /** 自定义上传实现(对齐 Semi customRequest,优先于 action)。 */
70
97
  customRequest?: (item: UploadFileItem) => void | Promise<void>;
71
- onChange?: (list: UploadFileItem[]) => void;
98
+ /** 上传成功后钩子(对齐 Semi afterUpload),同步返回。 */
99
+ afterUpload?: (props: AfterUploadProps) => AfterUploadResult | void;
100
+ onChange?: (props: { fileList: UploadFileItem[]; currentFile: UploadFileItem }) => void;
72
101
  onExceed?: (files: File[]) => void;
73
- onSuccess?: (response: string, item: UploadFileItem) => void;
74
- onError?: (item: UploadFileItem) => void;
102
+ /** 上传成功(对齐 Semi onSuccess(responseBody, file, fileList))。 */
103
+ onSuccess?: (responseBody: unknown, file: UploadFileItem, fileList: UploadFileItem[]) => void;
104
+ /** 上传失败(对齐 Semi onError(error, file, fileList, xhr))。 */
105
+ onError?: (error: Error, file: UploadFileItem, fileList: UploadFileItem[], xhr?: XMLHttpRequest) => void;
106
+ /** 上传进度(对齐 Semi onProgress(percent, file, fileList))。 */
107
+ onProgress?: (percent: number, file: UploadFileItem, fileList: UploadFileItem[]) => void;
75
108
  children?: Snippet;
76
- /** 上传失败是否显示重试按钮。默认 true */
109
+ /** 上传失败是否显示重试按钮(对齐 Semi showRetry)。默认 true */
77
110
  showRetry?: boolean;
78
- /** 是否允许替换已有文件(单文件模式下显示"替换"而不是"添加")。默认 false */
111
+ /** success 项显示替换按钮(对齐 Semi showReplace)。默认 false */
79
112
  showReplace?: boolean;
80
- /** 是否显示批量清除按钮。默认 false */
113
+ /** 是否渲染文件列表(对齐 Semi showUploadList)。默认 true。 */
114
+ showUploadList?: boolean;
115
+ /** 是否显示批量清除按钮(对齐 Semi showClear)。默认 true。 */
81
116
  showClear?: boolean;
82
- /** 清除按钮点击回调 */
83
117
  onClear?: () => void;
84
- /** 文件列表标题文字;false 则不渲染。默认 undefined(不渲染) */
85
- fileListTitle?: string | false;
86
- /** 文件名超长是否展示 Tooltip(简单实现:title 属性)。true=展示 title;false=不展示。默认 true */
87
- showTooltip?: boolean;
88
- /** 上传区提示内容(文字或 Snippet) */
118
+ /** 批量清除前钩子(对齐 Semi beforeClear)。 */
119
+ beforeClear?: (fileList: UploadFileItem[]) => boolean | Promise<boolean>;
120
+ /** 文件列表标题(对齐 Semi fileListTitle)。 */
121
+ fileListTitle?: UploadFileListTitle;
122
+ /** 文件名超长提示(对齐 Semi showTooltip)。默认 true。 */
123
+ showTooltip?: UploadShowTooltip;
124
+ /** 上传区提示内容(对齐 Semi prompt)。 */
89
125
  prompt?: string | Snippet;
90
- /** 提示位置:left/right 为水平排列,bottom 为下方。默认 'bottom' */
91
- promptPosition?: 'left' | 'right' | 'bottom';
92
- /** 拖拽放下回调 */
93
- onDrop?: (e: DragEvent, files: File[], rejectFiles: File[]) => void;
94
- /** 打开文件选择弹窗时回调 */
126
+ /** 提示位置(对齐 Semi promptPosition)。默认 'right' */
127
+ promptPosition?: UploadPromptPosition;
128
+ onDrop?: (e: DragEvent, files: File[], fileList: UploadFileItem[]) => void;
95
129
  onOpenFileDialog?: () => void;
96
- /** 预览图点击回调(image/picture-card listType) */
97
130
  onPreviewClick?: (fileItem: UploadFileItem) => void;
98
- /** accept 校验失败(文件类型不符)的回调 */
99
131
  onAcceptInvalid?: (files: File[]) => void;
100
- /** 重试回调 */
101
- onRetry?: (file: UploadFileItem) => void;
102
- /** 大小校验失败回调 */
103
- onSizeError?: (file: UploadFileItem, validResult: 'max' | 'min') => void;
104
- /** 校验失败统一文案(覆盖 i18n 默认文案) */
132
+ onRetry?: (fileItem: UploadFileItem) => void;
133
+ onSizeError?: (file: UploadFileItem, fileList: UploadFileItem[]) => void;
134
+ /** 校验失败统一文案(对齐 Semi validateMessage)。 */
105
135
  validateMessage?: string;
106
- /** XHR withCredentials(跨域凭证) */
107
136
  withCredentials?: boolean;
108
- /** 上传前文件转换(async,返回转换后的 File */
109
- transformFile?: (file: File) => Promise<File>;
110
- /** 拖拽区自定义图标 Snippet */
137
+ transformFile?: (file: File) => File | Promise<File>;
111
138
  dragIcon?: Snippet;
112
- /** 拖拽区主文案(Snippet 或 string) */
113
139
  dragMainText?: string | Snippet;
114
- /** 拖拽区副文案(Snippet 或 string) */
115
140
  dragSubText?: string | Snippet;
116
- /** 粘贴添加文件(监听 document paste) */
117
141
  addOnPasting?: boolean;
118
- /** 触发热点位置(拖拽区时无效)。'start'=前置,'end'=后置,'none'=隐藏触发器。默认 'start' */
119
- hotSpotLocation?: 'start' | 'end' | 'none';
142
+ onPastingError?: (error: unknown) => void;
143
+ /** 触发热点位置(对齐 Semi hotSpotLocation)。默认 'end' */
144
+ hotSpotLocation?: 'start' | 'end';
145
+ /** 选中原始 File 列表变化回调(对齐 Semi onFileChange)。 */
146
+ onFileChange?: (files: File[]) => void;
147
+ /** 移除前钩子(对齐 Semi beforeRemove)。 */
148
+ beforeRemove?: (file: UploadFileItem, fileList: UploadFileItem[]) => boolean | Promise<boolean>;
149
+ /** 移除后回调(对齐 Semi onRemove(currentFile, fileList, currentFileItem))。 */
150
+ onRemove?: (currentFile: File | undefined, fileList: UploadFileItem[], currentFileItem: UploadFileItem) => void;
151
+ /** 单文件上传超时(毫秒)。 */
152
+ timeout?: number;
153
+ /** 上传触发时机(对齐 Semi uploadTrigger)。默认 'auto'。 */
154
+ uploadTrigger?: 'auto' | 'custom';
155
+ /** 每项卡片自定义 style(对齐 Semi itemStyle)。 */
156
+ itemStyle?: string | Record<string, string | number>;
157
+ /** 照片墙缩略图宽度(对齐 Semi picWidth)。 */
158
+ picWidth?: number | string;
159
+ /** 照片墙缩略图高度(对齐 Semi picHeight)。 */
160
+ picHeight?: number | string;
161
+ capture?: boolean | 'user' | 'environment';
162
+
163
+ // ——— 裁剪集成(对标 Semi crop 家族)———
164
+ crop?: boolean | UploadCropProps;
165
+ /** 裁切前钩子(对齐 Semi beforeCrop(file, fileList))。 */
166
+ beforeCrop?: (file: File, fileList: File[]) => boolean | Promise<boolean>;
167
+ onCropError?: (err: unknown) => void;
168
+ cropModalProps?: Record<string, unknown>;
169
+
170
+ // ——— render 家族(对齐 Semi,用 Svelte Snippet,入参 RenderFileItemProps)———
171
+ renderFileItem?: Snippet<[RenderFileItemProps]>;
172
+ previewFile?: Snippet<[RenderFileItemProps]>;
173
+ renderThumbnail?: Snippet<[RenderFileItemProps]>;
174
+ showPicInfo?: boolean;
175
+ renderPicInfo?: Snippet<[RenderFileItemProps]>;
176
+ renderPicPreviewIcon?: Snippet<[RenderFileItemProps]>;
177
+ renderPicClose?: Snippet<[RenderPictureCloseProps]>;
178
+ renderFileOperation?: Snippet<[RenderFileItemProps]>;
179
+ /** 根容器额外 class(对齐 Semi className)。 */
180
+ class?: string;
181
+ /** 根容器 style(对齐 Semi style)。 */
182
+ style?: string;
120
183
  }
121
184
 
122
185
  let {
123
- value,
124
- defaultValue = [],
186
+ fileList,
187
+ defaultFileList = [],
125
188
  accept,
126
189
  multiple = false,
127
190
  directory = false,
@@ -129,30 +192,33 @@
129
192
  maxSize,
130
193
  minSize,
131
194
  disabled = false,
132
- size = 'default',
133
- status = 'default',
134
- listType = 'text',
135
- drag = false,
195
+ validateStatus = 'default',
196
+ listType = 'list',
197
+ draggable = false,
136
198
  action,
137
- uploadName = 'file',
199
+ name = 'file',
200
+ fileName,
138
201
  headers,
139
- uploadData,
140
- concurrency = 0,
202
+ data,
141
203
  beforeUpload,
142
204
  customRequest,
205
+ afterUpload,
143
206
  onChange,
144
207
  onExceed,
145
208
  onSuccess,
146
209
  onError,
210
+ onProgress,
147
211
  children,
148
212
  showRetry = true,
149
213
  showReplace = false,
150
- showClear = false,
214
+ showUploadList = true,
215
+ showClear = true,
151
216
  onClear,
217
+ beforeClear,
152
218
  fileListTitle,
153
219
  showTooltip = true,
154
220
  prompt,
155
- promptPosition = 'bottom',
221
+ promptPosition = 'right',
156
222
  onDrop,
157
223
  onOpenFileDialog,
158
224
  onPreviewClick,
@@ -166,42 +232,61 @@
166
232
  dragMainText,
167
233
  dragSubText,
168
234
  addOnPasting = false,
169
- hotSpotLocation = 'start',
235
+ onPastingError,
236
+ hotSpotLocation = 'end',
237
+ onFileChange,
238
+ beforeRemove,
239
+ onRemove,
240
+ timeout = 0,
241
+ uploadTrigger = 'auto',
242
+ itemStyle,
243
+ picWidth,
244
+ picHeight,
245
+ capture,
246
+ crop = false,
247
+ beforeCrop,
248
+ onCropError,
249
+ cropModalProps,
250
+ renderFileItem,
251
+ previewFile,
252
+ renderThumbnail,
253
+ showPicInfo = false,
254
+ renderPicInfo,
255
+ renderPicPreviewIcon,
256
+ renderPicClose,
257
+ renderFileOperation,
258
+ class: className,
259
+ style: styleProp,
170
260
  }: Props = $props();
171
261
 
172
262
  const loc = useLocale();
173
- // 屏幕阅读器播报(spec §6):进度 polite(节流,避免每 1% 刷屏),成功 polite、失败 assertive。
174
- // 命令式调用在 XHR 事件回调里(非 render 期),符合红线 #3。
175
263
  const announcer = useLiveAnnouncer();
176
- // 每个文件上次播报的进度档(每 25% 一档),避免逐 % 重复播报。
177
264
  const announcedBucket = new Map<string, number>();
178
265
 
179
- const isControlled = $derived(value !== undefined);
180
- let inner = $state<UploadFileItem[]>(getInitialValue());
181
- // Controlled (`value=`): parent owns the list; we never write the prop, only
182
- // propagate via `onChange`. Uncontrolled: keep our own state in sync.
183
- const current = $derived(isControlled ? (value ?? []) : inner);
266
+ // 表单字段名:fileName 优先于 name(对齐 Semi 在 FormData 中 fileName || name)。
267
+ const fieldName = $derived(fileName ?? name);
184
268
 
185
- function getInitialValue(): UploadFileItem[] {
186
- return [...defaultValue];
269
+ const isControlled = $derived(fileList !== undefined);
270
+ // 非受控初始值(仅取初始 defaultFileList,后续由内部状态管理)。
271
+ function getInitial(): UploadFileItem[] {
272
+ return [...defaultFileList];
187
273
  }
274
+ let inner = $state<UploadFileItem[]>(getInitial());
275
+ const current = $derived(isControlled ? (fileList ?? []) : inner);
188
276
 
189
277
  let inputEl: HTMLInputElement | null = null;
190
278
 
191
- // 进行中的 XHR 句柄(uid → xhr),remove/卸载时 abort。
192
- const xhrMap = new Map<string, XMLHttpRequest>();
279
+ let dragOver = $state(false);
280
+ let dragEnterTarget: EventTarget | null = null;
193
281
 
194
- // 并发调度队列:concurrency 变化时重建(新文件用新上限,进行中的 XHR 不受影响)。
195
- // concurrency<=0 时不限,行为与未接入队列前一致。
196
- const queue = $derived(createUploadQueue(concurrency));
197
-
198
- // 卸载标记:避免卸载后仍向已 abort 的 XHR/已移除项回写状态。
282
+ const xhrMap = new Map<string, XMLHttpRequest>();
199
283
  let mounted = true;
200
284
 
201
- // image/picture-card 预览:本地缓存 file → objectURL(uid → url),移除/卸载 revoke。
202
285
  const objectUrls = new Map<string, string>();
203
- const isImageList = $derived(listType === 'image' || listType === 'picture-card');
286
+ const isPicture = $derived(listType === 'picture');
287
+
204
288
  function previewUrl(item: UploadFileItem): string | undefined {
289
+ if (item.preview === false) return undefined;
205
290
  if (item.url) return item.url;
206
291
  if (!item.file) return undefined;
207
292
  let u = objectUrls.get(item.uid);
@@ -211,6 +296,17 @@
211
296
  }
212
297
  return u;
213
298
  }
299
+ // list 文本卡片预览:仅图片项返回缩略图地址,否则 undefined → 占位。
300
+ function itemThumbUrl(item: UploadFileItem): string | undefined {
301
+ if (item.preview === false) return undefined;
302
+ const isImage = item.file ? item.file.type.startsWith('image/') : Boolean(item.url);
303
+ if (!isImage) return undefined;
304
+ return previewUrl(item);
305
+ }
306
+ function itemPreviewEnabled(item: UploadFileItem): boolean {
307
+ if (item.preview === false) return false;
308
+ return item.file ? item.file.type.startsWith('image/') : Boolean(item.url);
309
+ }
214
310
  function revokeUrl(uid: string) {
215
311
  const u = objectUrls.get(uid);
216
312
  if (u !== undefined) {
@@ -219,19 +315,50 @@
219
315
  }
220
316
  }
221
317
 
222
- // 按 uid 局部更新某个文件项(不破坏受控/非受控约定,走 commit)。
223
318
  function patchItem(uid: string, patch: Partial<UploadFileItem>) {
224
319
  commit(current.map((it) => (it.uid === uid ? { ...it, ...patch } : it)));
225
320
  }
226
321
 
227
- // directory 是非标准 input 属性(webkitdirectory),Svelte 模板不直接支持,
228
- // 故命令式 toggle(红线 #3)。directory 变化时同步增删。
322
+ // afterUpload(对齐 Semi notifyAfterUpload):成功后据返回值改该项或自动移除。
323
+ function applyAfterUpload(uid: string, responseText: string) {
324
+ if (!afterUpload) return;
325
+ const item = current.find((it) => it.uid === uid);
326
+ if (!item) return;
327
+ let response: unknown = responseText;
328
+ try {
329
+ response = JSON.parse(responseText);
330
+ } catch {
331
+ response = responseText;
332
+ }
333
+ const result = afterUpload({ response, file: item, fileList: current });
334
+ if (!result) return;
335
+ if (result.autoRemove) {
336
+ removeInternal(uid);
337
+ return;
338
+ }
339
+ const patch: Partial<UploadFileItem> = {};
340
+ if (result.status) patch.status = result.status;
341
+ if (result.validateMessage !== undefined) patch.validateMessage = result.validateMessage;
342
+ if (result.name !== undefined) patch.name = result.name;
343
+ if (result.url !== undefined) {
344
+ revokeUrl(uid);
345
+ patch.url = result.url;
346
+ }
347
+ if (Object.keys(patch).length > 0) patchItem(uid, patch);
348
+ }
349
+
350
+ // directory/capture 是非标准 input 属性,命令式 toggle。
229
351
  $effect(() => {
230
352
  if (!inputEl) return;
231
353
  inputEl.toggleAttribute('webkitdirectory', directory);
354
+ if (capture === undefined || capture === false) {
355
+ inputEl.removeAttribute('capture');
356
+ } else {
357
+ inputEl.setAttribute('capture', capture === true ? '' : capture);
358
+ }
232
359
  });
233
360
 
234
- // 卸载时中止所有进行中的上传 + 释放预览 objectURL
361
+ // 卸载:中止上传 + 释放 objectURL + 收尾裁切。
235
362
  $effect(() => {
236
363
  return () => {
237
364
  mounted = false;
@@ -240,30 +367,35 @@
240
367
  for (const u of objectUrls.values()) URL.revokeObjectURL(u);
241
368
  objectUrls.clear();
242
369
  announcedBucket.clear();
370
+ if (cropSrc) URL.revokeObjectURL(cropSrc);
371
+ cropResolve?.(null);
372
+ cropResolve = null;
243
373
  };
244
374
  });
245
375
 
246
- // 粘贴监听:addOnPasting 时挂载 document paste。
376
+ // 粘贴监听(addOnPasting)。
247
377
  $effect(() => {
248
378
  if (!addOnPasting || disabled) return;
249
379
  function handlePaste(e: ClipboardEvent) {
250
- const items = e.clipboardData?.items;
251
- if (!items) return;
252
- const files: File[] = [];
253
- for (const item of Array.from(items)) {
254
- if (item.kind === 'file') {
255
- const f = item.getAsFile();
256
- if (f) files.push(f);
380
+ try {
381
+ const items = e.clipboardData?.items;
382
+ if (!items) return;
383
+ const files: File[] = [];
384
+ for (const item of Array.from(items)) {
385
+ if (item.kind === 'file') {
386
+ const f = item.getAsFile();
387
+ if (f) files.push(f);
388
+ }
257
389
  }
390
+ if (files.length > 0) addFiles(files);
391
+ } catch (error) {
392
+ onPastingError?.(error);
258
393
  }
259
- if (files.length > 0) addFiles(files);
260
394
  }
261
395
  document.addEventListener('paste', handlePaste);
262
396
  return () => document.removeEventListener('paste', handlePaste);
263
397
  });
264
398
 
265
- // 进度播报节流:每跨过一个 25% 档位才播一次(25/50/75),避免逐 % 刷屏。
266
- // 0% 与 100% 不在此播报(开始无意义、完成走 success 文案)。
267
399
  function announceProgress(item: UploadFileItem, percent: number) {
268
400
  const bucket = Math.floor(percent / 25);
269
401
  if (bucket <= 0 || bucket >= 4) return;
@@ -272,10 +404,14 @@
272
404
  announcer.announce(loc().t('Upload.announceUploading', { name: item.name, percent }));
273
405
  }
274
406
 
275
- // XHR 上传单个文件项:uploading → onprogress 更新 percent → success/error。
276
- // 返回 Promise,在 load/error/abort 任一终态 resolve,供并发队列释放槽位。
407
+ // XHR 上传单个文件项。
277
408
  function uploadItem(item: UploadFileItem, file: File): Promise<void> {
278
409
  return new Promise<void>((resolve) => {
410
+ if (customRequest) {
411
+ void customRequest({ ...item, file });
412
+ resolve();
413
+ return;
414
+ }
279
415
  if (!action) {
280
416
  resolve();
281
417
  return;
@@ -296,66 +432,77 @@
296
432
  const percent = computeUploadPercent(e.loaded, e.total);
297
433
  patchItem(item.uid, { percent });
298
434
  announceProgress(item, percent);
435
+ onProgress?.(percent, { ...item, percent }, current);
299
436
  }
300
437
  };
301
438
  xhr.onload = () => {
302
439
  xhrMap.delete(item.uid);
303
440
  announcedBucket.delete(item.uid);
304
441
  if (isUploadOk(xhr.status)) {
305
- patchItem(item.uid, { status: 'success', percent: 100 });
306
- // 完成必播(polite,不抢断)。
442
+ let response: unknown = xhr.responseText;
443
+ try {
444
+ response = JSON.parse(xhr.responseText);
445
+ } catch {
446
+ response = xhr.responseText;
447
+ }
448
+ patchItem(item.uid, { status: 'success', percent: 100, response });
449
+ applyAfterUpload(item.uid, xhr.responseText);
307
450
  announcer.announce(loc().t('Upload.announceSuccess', { name: item.name }));
308
- onSuccess?.(xhr.responseText, item);
451
+ onSuccess?.(response, item, current);
309
452
  } else {
310
- patchItem(item.uid, { status: 'error' });
311
- // 失败必播(assertive,立即打断)。
453
+ patchItem(item.uid, { status: 'uploadFail' });
312
454
  announcer.announce(loc().t('Upload.announceError', { name: item.name }), 'assertive');
313
- onError?.(item);
455
+ onError?.(new Error('Upload failed'), item, current, xhr);
314
456
  }
315
457
  done();
316
458
  };
317
- xhr.onerror = () => {
459
+ xhr.onerror = (e) => {
318
460
  xhrMap.delete(item.uid);
319
461
  announcedBucket.delete(item.uid);
320
- patchItem(item.uid, { status: 'error' });
462
+ patchItem(item.uid, { status: 'uploadFail', event: e as Event });
321
463
  announcer.announce(loc().t('Upload.announceError', { name: item.name }), 'assertive');
322
- onError?.(item);
464
+ onError?.(new Error('Upload failed'), item, current, xhr);
323
465
  done();
324
466
  };
325
- // abort(remove/卸载)也要释放槽位,否则队列卡死。
326
467
  xhr.onabort = () => {
327
468
  xhrMap.delete(item.uid);
328
469
  announcedBucket.delete(item.uid);
329
470
  done();
330
471
  };
472
+ xhr.ontimeout = () => {
473
+ xhrMap.delete(item.uid);
474
+ announcedBucket.delete(item.uid);
475
+ patchItem(item.uid, { status: 'uploadFail', error: loc().t('Upload.timeoutError') });
476
+ announcer.announce(loc().t('Upload.timeoutError', { name: item.name }), 'assertive');
477
+ onError?.(new Error(loc().t('Upload.timeoutError') ?? 'Upload timed out'), item, current, xhr);
478
+ done();
479
+ };
331
480
 
332
481
  const form = new FormData();
333
- form.append(uploadName, file, item.name);
334
- if (uploadData) {
335
- for (const [k, v] of Object.entries(uploadData)) form.append(k, v);
482
+ form.append(fieldName, file, item.name);
483
+ const resolvedData = typeof data === 'function' ? data(file) : data;
484
+ if (resolvedData) {
485
+ for (const [k, v] of Object.entries(resolvedData)) form.append(k, v);
336
486
  }
337
487
  xhr.open('POST', action);
488
+ if (timeout > 0) xhr.timeout = timeout;
338
489
  if (withCredentials) xhr.withCredentials = true;
339
- if (headers) {
340
- for (const [k, v] of Object.entries(headers)) xhr.setRequestHeader(k, v);
490
+ const resolvedHeaders = typeof headers === 'function' ? headers(file) : headers;
491
+ if (resolvedHeaders) {
492
+ for (const [k, v] of Object.entries(resolvedHeaders)) xhr.setRequestHeader(k, v);
341
493
  }
342
494
  xhr.send(form);
343
495
  });
344
496
  }
345
497
 
346
- /** Format a byte count: <1KiB → B, <1MiB → KB, else MB (1 decimal). */
347
- function formatSize(bytes: number): string {
348
- if (bytes < 1024) return `${bytes} B`;
349
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
350
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
351
- }
352
-
353
- function commit(next: UploadFileItem[]) {
498
+ function commit(next: UploadFileItem[], currentFile?: UploadFileItem) {
354
499
  if (!isControlled) inner = next;
355
- onChange?.(next);
500
+ onChange?.({
501
+ fileList: next,
502
+ currentFile: currentFile ?? next[next.length - 1] ?? ({} as UploadFileItem),
503
+ });
356
504
  }
357
505
 
358
- /** accept 过滤:返回通过和拒绝两组文件。 */
359
506
  function filterByAccept(files: File[]): { accepted: File[]; rejected: File[] } {
360
507
  if (!accept) return { accepted: files, rejected: [] };
361
508
  const acceptList = accept.split(',').map((s) => s.trim().toLowerCase());
@@ -376,115 +523,207 @@
376
523
  }
377
524
 
378
525
  function buildItem(file: File): UploadFileItem {
379
- // 纯函数校验大小(KB),min/max 同源;超限 → error + 本地化提示。
380
526
  const sizeError = validateFileSize(file.size, { minSize, maxSize });
381
- // 目录上传时浏览器在 webkitRelativePath 上保留相对路径(如 dir/sub/a.txt)。
382
527
  const relativePath = (file as File & { webkitRelativePath?: string }).webkitRelativePath;
383
528
  const item: UploadFileItem = {
384
529
  uid: useId('cd-upload'),
385
530
  name: file.name,
386
531
  size: file.size,
387
- status: sizeError ? 'error' : 'ready',
532
+ status: sizeError ? 'validateFail' : 'wait',
388
533
  file,
389
534
  };
390
535
  if (relativePath) item.relativePath = relativePath;
391
536
  if (sizeError) {
392
537
  const limitKB = sizeError === 'max' ? maxSize! : minSize!;
393
- item.error = validateMessage ?? loc().t(sizeError === 'max' ? 'Upload.sizeError' : 'Upload.minSizeError', {
394
- size: formatSize(limitKB * 1024),
395
- });
538
+ item.error =
539
+ validateMessage ??
540
+ loc().t(sizeError === 'max' ? 'Upload.sizeError' : 'Upload.minSizeError', {
541
+ size: formatKB(limitKB),
542
+ });
396
543
  }
397
544
  return item;
398
545
  }
399
546
 
400
- function addFiles(fileList: FileList | File[]) {
547
+ function formatKB(kb: number): string {
548
+ if (kb >= 1024) return `${(kb / 1024).toFixed(1)}MB`;
549
+ return `${kb}KB`;
550
+ }
551
+
552
+ export function addFiles(fileListInput: FileList | File[]) {
401
553
  if (disabled) return;
402
- const allFiles = Array.from(fileList);
554
+ const allFiles = Array.from(fileListInput);
403
555
  if (allFiles.length === 0) return;
556
+ if (crop) {
557
+ void runCropPipeline(allFiles);
558
+ return;
559
+ }
560
+ addFilesInternal(allFiles);
561
+ }
404
562
 
405
- // accept 校验
406
- const { accepted: afterAccept, rejected } = filterByAccept(allFiles);
563
+ function filterSelected(files: File[], insertLen = 0): { accepted: File[]; replaceOne: boolean } {
564
+ const { accepted: afterAccept, rejected } = filterByAccept(files);
407
565
  if (rejected.length > 0) onAcceptInvalid?.(rejected);
408
- if (afterAccept.length === 0) return;
566
+ if (afterAccept.length === 0) return { accepted: [], replaceOne: false };
567
+
568
+ if (limit === 1) {
569
+ return { accepted: [afterAccept[afterAccept.length - 1]!], replaceOne: true };
570
+ }
409
571
 
410
572
  let accepted = afterAccept;
411
573
  if (limit !== undefined) {
412
- const room = limit - current.length;
574
+ const room = limit - current.length - insertLen;
413
575
  if (room <= 0) {
414
576
  onExceed?.(accepted);
415
- return;
577
+ return { accepted: [], replaceOne: false };
416
578
  }
417
579
  if (accepted.length > room) {
418
580
  onExceed?.(accepted.slice(room));
419
581
  accepted = accepted.slice(0, room);
420
582
  }
421
583
  }
584
+ return { accepted, replaceOne: false };
585
+ }
422
586
 
423
- const newItems = accepted.map(buildItem);
424
- commit([...current, ...newItems]);
425
-
426
- // onSizeError 回调:大小校验失败项通知外部
587
+ function dispatchNewItems(newItems: UploadFileItem[], accepted: File[]) {
427
588
  for (const item of newItems) {
428
- if (item.status === 'error' && item.file) {
589
+ if (item.status === 'validateFail' && item.file) {
429
590
  const result = validateFileSize(item.file.size, { minSize, maxSize });
430
- if (result) onSizeError?.(item, result);
591
+ if (result) onSizeError?.(item, current);
431
592
  }
432
593
  }
433
-
434
- // beforeUpload 通过的项才进队列受 concurrency 调度。
435
- // customRequest 完全接管;否则有 action 时自动 XHR 上传。仅处理无尺寸错误的项。
436
594
  for (const item of newItems) {
437
- if (item.status === 'error' || !item.file) continue;
438
- dispatch(item, item.file, accepted);
595
+ if (item.status === 'validateFail' || !item.file) continue;
596
+ void dispatch(item, item.file, accepted);
439
597
  }
440
598
  }
441
599
 
442
- // 单个文件的上传派发:先跑(可能异步的)beforeUpload,通过后入队受并发调度。
443
- async function dispatch(item: UploadFileItem, original: File, fileList: File[]) {
600
+ function addFilesInternal(fileListInput: FileList | File[]) {
601
+ if (disabled) return;
602
+ const allFiles = Array.from(fileListInput);
603
+ if (allFiles.length === 0) return;
604
+
605
+ const { accepted, replaceOne } = filterSelected(allFiles);
606
+ if (accepted.length === 0) return;
607
+
608
+ onFileChange?.(accepted);
609
+
610
+ const newItems = accepted.map(buildItem);
611
+ if (replaceOne) {
612
+ for (const it of current) removeInternalResources(it.uid);
613
+ commit(newItems, newItems[0]);
614
+ } else {
615
+ commit([...current, ...newItems], newItems[0]);
616
+ }
617
+
618
+ dispatchNewItems(newItems, accepted);
619
+ }
620
+
621
+ // 命令式插入(对齐 Semi insert)。
622
+ export function insert(files: File[], index?: number) {
623
+ if (disabled) return;
624
+ const allFiles = Array.from(files);
625
+ if (allFiles.length === 0) return;
626
+
627
+ const { accepted, replaceOne } = filterSelected(allFiles);
628
+ if (accepted.length === 0) return;
629
+
630
+ onFileChange?.(accepted);
631
+
632
+ const newItems = accepted.map(buildItem);
633
+ if (replaceOne) {
634
+ for (const it of current) removeInternalResources(it.uid);
635
+ commit(newItems, newItems[0]);
636
+ } else {
637
+ const at = index === undefined ? current.length : Math.max(0, Math.min(index, current.length));
638
+ const next = [...current];
639
+ next.splice(at, 0, ...newItems);
640
+ commit(next, newItems[0]);
641
+ }
642
+
643
+ dispatchNewItems(newItems, accepted);
644
+ }
645
+
646
+ const pendingFiles = new Map<string, File>();
647
+
648
+ // beforeUpload 支持返回富对象(对齐 Semi BeforeUploadObjectResult)。
649
+ async function dispatch(item: UploadFileItem, original: File, _fileListForHook: File[]) {
444
650
  let file = original;
445
651
  if (beforeUpload) {
446
- let result: BeforeUploadResult;
652
+ let result: boolean | BeforeUploadObjectResult;
653
+ // 中间态 validating(对齐 Semi)。
654
+ patchItem(item.uid, { status: 'validating' });
447
655
  try {
448
- result = await beforeUpload(original, fileList);
449
- } catch {
450
- // reject 视为拒绝该文件。
451
- result = false;
656
+ result = await beforeUpload({ file: item, fileList: current });
657
+ } catch (err) {
658
+ // reject 支持传富对象(对齐 Semi)。
659
+ if (err && typeof err === 'object') {
660
+ result = err as BeforeUploadObjectResult;
661
+ if (result.shouldUpload === undefined) result.shouldUpload = false;
662
+ } else {
663
+ result = false;
664
+ }
452
665
  }
453
666
  if (!mounted) return;
454
- // 上传开始前可能已被手动移除。
455
667
  if (!current.some((it) => it.uid === item.uid)) return;
456
- const decision = resolveBeforeUpload(original, result);
457
- if (!decision.upload) {
458
- // 跳过该文件:从列表移除(受控仅 onChange,不回写)。
459
- remove(item.uid);
668
+
669
+ if (result === false) {
670
+ // 拒绝:标 validateFail(不移除,对齐 Semi 默认 shouldUpload=false 且无 autoRemove)。
671
+ patchItem(item.uid, { status: 'validateFail' });
460
672
  return;
461
673
  }
462
- file = decision.file ?? original;
463
- if (file !== original) patchItem(item.uid, { name: file.name, size: file.size, file });
674
+ if (result !== true && typeof result === 'object') {
675
+ const obj = result;
676
+ if (obj.autoRemove) {
677
+ removeInternal(item.uid);
678
+ return;
679
+ }
680
+ const patch: Partial<UploadFileItem> = {};
681
+ if (obj.status) patch.status = obj.status;
682
+ if (obj.validateMessage !== undefined) patch.validateMessage = obj.validateMessage;
683
+ if (obj.fileInstance) {
684
+ file = obj.fileInstance;
685
+ patch.name = file.name;
686
+ patch.size = file.size;
687
+ patch.file = file;
688
+ }
689
+ const shouldUpload = obj.shouldUpload !== false;
690
+ if (!shouldUpload) {
691
+ if (!patch.status) patch.status = 'validateFail';
692
+ patchItem(item.uid, patch);
693
+ return;
694
+ }
695
+ if (Object.keys(patch).length > 0) patchItem(item.uid, patch);
696
+ }
464
697
  }
465
698
  if (!mounted) return;
466
699
 
467
- // transformFile:上传前文件转换
468
700
  if (transformFile) {
469
701
  file = await transformFile(file);
470
702
  if (!mounted) return;
471
703
  patchItem(item.uid, { name: file.name, size: file.size, file });
472
704
  }
473
705
 
474
- // 入队受 concurrency 调度:customRequest 返回 Promise 时队列会 await 其完成
475
- // 来释放槽位(同步返回则立即释放,由其自管生命周期);否则由队列 await XHR。
476
- queue.add(() => {
477
- if (!mounted) return;
478
- if (!current.some((it) => it.uid === item.uid)) return;
479
- if (customRequest) {
480
- return customRequest({ ...item, file });
481
- }
482
- if (action) return uploadItem(item, file);
483
- });
706
+ if (uploadTrigger === 'custom') {
707
+ patchItem(item.uid, { status: 'wait' });
708
+ pendingFiles.set(item.uid, file);
709
+ return;
710
+ }
711
+
712
+ void uploadItem(item, file);
484
713
  }
485
714
 
486
- function remove(uid: string) {
715
+ export function upload() {
487
716
  if (disabled) return;
717
+ for (const it of current) {
718
+ if (it.status !== 'wait') continue;
719
+ const file = pendingFiles.get(it.uid) ?? it.file;
720
+ if (!file) continue;
721
+ pendingFiles.delete(it.uid);
722
+ void uploadItem(it, file);
723
+ }
724
+ }
725
+
726
+ function removeInternalResources(uid: string) {
488
727
  const xhr = xhrMap.get(uid);
489
728
  if (xhr) {
490
729
  xhr.abort();
@@ -492,26 +731,60 @@
492
731
  }
493
732
  revokeUrl(uid);
494
733
  announcedBucket.delete(uid);
734
+ pendingFiles.delete(uid);
735
+ }
736
+
737
+ function removeInternal(uid: string) {
738
+ removeInternalResources(uid);
495
739
  commit(current.filter((item) => item.uid !== uid));
496
740
  }
497
741
 
498
- /** 重试失败项:重置状态后重新派发上传。 */
742
+ async function remove(uid: string) {
743
+ if (disabled) return;
744
+ const item = current.find((it) => it.uid === uid);
745
+ if (!item) return;
746
+ if (beforeRemove) {
747
+ let allow: boolean;
748
+ try {
749
+ allow = await beforeRemove(item, current);
750
+ } catch {
751
+ allow = false;
752
+ }
753
+ if (allow === false) return;
754
+ if (!mounted) return;
755
+ if (!current.some((it) => it.uid === uid)) return;
756
+ }
757
+ const nextList = current.filter((it) => it.uid !== uid);
758
+ removeInternalResources(uid);
759
+ commit(nextList, item);
760
+ onRemove?.(item.file, nextList, item);
761
+ }
762
+
499
763
  function retryItem(item: UploadFileItem) {
500
764
  onRetry?.(item);
501
765
  if (!item.file) return;
502
- // Drop `percent` and `error` keys entirely (exactOptionalPropertyTypes: true requires
503
- // omission rather than explicit undefined assignment).
504
- commit(current.map((it) => {
505
- if (it.uid !== item.uid) return it;
506
- const { percent: _p, error: _e, ...rest } = it;
507
- return { ...rest, status: 'ready' };
508
- }));
509
- dispatch(item, item.file, [item.file]);
510
- }
511
-
512
- /** 清除所有文件:中止进行中的上传,释放 objectURL,清空列表。 */
513
- function clearAll() {
766
+ commit(
767
+ current.map((it) => {
768
+ if (it.uid !== item.uid) return it;
769
+ const { percent: _p, error: _e, ...rest } = it;
770
+ return { ...rest, status: 'wait' };
771
+ }),
772
+ );
773
+ void dispatch(item, item.file, [item.file]);
774
+ }
775
+
776
+ async function clearAll() {
514
777
  if (disabled) return;
778
+ if (beforeClear) {
779
+ let allow: boolean;
780
+ try {
781
+ allow = await beforeClear(current);
782
+ } catch {
783
+ allow = false;
784
+ }
785
+ if (allow === false) return;
786
+ if (!mounted) return;
787
+ }
515
788
  for (const xhr of xhrMap.values()) xhr.abort();
516
789
  xhrMap.clear();
517
790
  for (const u of objectUrls.values()) URL.revokeObjectURL(u);
@@ -527,22 +800,99 @@
527
800
  inputEl?.click();
528
801
  }
529
802
 
803
+ export function openFileDialog() {
804
+ openPicker();
805
+ }
806
+
530
807
  function handleInputChange(e: Event & { currentTarget: HTMLInputElement }) {
531
808
  const fl = e.currentTarget.files;
532
809
  if (fl) addFiles(fl);
533
- // Reset so selecting the same file again re-fires change.
534
810
  e.currentTarget.value = '';
535
811
  }
536
812
 
813
+ // ——— showReplace:替换已上传文件 ———
814
+ let replaceInputEl = $state<HTMLInputElement | null>(null);
815
+ let replaceTargetUid: string | null = null;
816
+
817
+ function openReplace(uid: string) {
818
+ if (disabled) return;
819
+ replaceTargetUid = uid;
820
+ replaceInputEl?.click();
821
+ }
822
+
823
+ function handleReplaceChange(e: Event & { currentTarget: HTMLInputElement }) {
824
+ const fl = e.currentTarget.files;
825
+ const target = replaceTargetUid;
826
+ replaceTargetUid = null;
827
+ e.currentTarget.value = '';
828
+ if (!fl || fl.length === 0 || !target) return;
829
+ const file = fl[0]!;
830
+ if (disabled) return;
831
+ if (crop && file.type.startsWith('image/')) {
832
+ void runReplacePipeline(target, file);
833
+ return;
834
+ }
835
+ doReplace(target, file);
836
+ }
837
+
838
+ function doReplace(target: string, file: File) {
839
+ const { accepted, rejected } = filterByAccept([file]);
840
+ if (rejected.length > 0) onAcceptInvalid?.(rejected);
841
+ if (accepted.length === 0) return;
842
+ const chosen = accepted[0]!;
843
+ removeInternalResources(target);
844
+ const built = buildItem(chosen);
845
+ const replaced: UploadFileItem = { ...built, uid: target };
846
+ commit(current.map((it) => (it.uid === target ? replaced : it)), replaced);
847
+ onFileChange?.([chosen]);
848
+ dispatchNewItems([replaced], [chosen]);
849
+ }
850
+
851
+ async function runReplacePipeline(target: string, file: File) {
852
+ let out: File | null = file;
853
+ let skip = false;
854
+ if (beforeCrop) {
855
+ try {
856
+ skip = (await beforeCrop(file, [file])) === false;
857
+ } catch {
858
+ skip = false;
859
+ }
860
+ if (!mounted) return;
861
+ }
862
+ if (!skip) {
863
+ try {
864
+ out = await cropOne(file);
865
+ } catch (err) {
866
+ onCropError?.(err);
867
+ out = file;
868
+ }
869
+ }
870
+ if (!mounted || !out) return;
871
+ doReplace(target, out);
872
+ }
873
+
874
+ function handleDragEnter(e: DragEvent) {
875
+ e.preventDefault();
876
+ e.stopPropagation();
877
+ dragEnterTarget = e.currentTarget;
878
+ if (!disabled) dragOver = true;
879
+ }
880
+
881
+ function handleDragLeave(e: DragEvent) {
882
+ e.preventDefault();
883
+ e.stopPropagation();
884
+ if (dragEnterTarget === e.target) dragOver = false;
885
+ }
886
+
537
887
  function handleDrop(e: DragEvent) {
538
888
  e.preventDefault();
889
+ dragOver = false;
539
890
  if (disabled) return;
540
891
  const dt = e.dataTransfer;
541
892
  if (dt?.files && dt.files.length > 0) {
542
893
  const files = Array.from(dt.files);
543
- // accept 过滤
544
- const { accepted, rejected } = filterByAccept(files);
545
- onDrop?.(e, files, rejected);
894
+ onDrop?.(e, files, current);
895
+ const { accepted } = filterByAccept(files);
546
896
  if (accepted.length > 0) addFiles(accepted);
547
897
  }
548
898
  }
@@ -554,544 +904,656 @@
554
904
  }
555
905
  }
556
906
 
557
- // 是否水平布局 prompt(left 或 right)
558
- const promptRow = $derived(promptPosition === 'left' || promptPosition === 'right');
907
+ const clearText = $derived(loc().t('Upload.clear'));
908
+ const titleSnippet = $derived(
909
+ typeof fileListTitle === 'function'
910
+ ? (fileListTitle as Snippet<[{ fileList: UploadFileItem[]; onClear: () => void; clearText: string }]>)
911
+ : undefined,
912
+ );
913
+ const titleText = $derived(typeof fileListTitle === 'string' ? fileListTitle : undefined);
914
+
915
+ // itemStyle → 字符串。
916
+ const itemStyleStr = $derived.by<string | undefined>(() => {
917
+ if (itemStyle === undefined) return undefined;
918
+ if (typeof itemStyle === 'string') return itemStyle;
919
+ const parts = Object.entries(itemStyle).map(
920
+ ([k, v]) => `${k}: ${typeof v === 'number' ? `${v}px` : v}`,
921
+ );
922
+ return parts.length > 0 ? parts.join('; ') : undefined;
923
+ });
924
+
925
+ // 卡片 style:picWidth/picHeight(number→px)+ itemStyle。
926
+ const cardStyleStr = $derived.by<string | undefined>(() => {
927
+ const parts: string[] = [];
928
+ if (picHeight !== undefined) parts.push(`height: ${typeof picHeight === 'number' ? `${picHeight}px` : picHeight}`);
929
+ if (picWidth !== undefined) parts.push(`width: ${typeof picWidth === 'number' ? `${picWidth}px` : picWidth}`);
930
+ if (itemStyleStr) parts.push(itemStyleStr);
931
+ return parts.length > 0 ? parts.join('; ') : undefined;
932
+ });
933
+
934
+ const addTileStyle = $derived.by<string | undefined>(() => {
935
+ const parts: string[] = [];
936
+ if (picHeight !== undefined) parts.push(`height: ${typeof picHeight === 'number' ? `${picHeight}px` : picHeight}`);
937
+ if (picWidth !== undefined) parts.push(`width: ${typeof picWidth === 'number' ? `${picWidth}px` : picWidth}`);
938
+ return parts.length > 0 ? parts.join('; ') : undefined;
939
+ });
940
+
941
+ // 图片墙添加瓦片是否显示(对齐 Semi showAddTriggerInList)。
942
+ const showAddTrigger = $derived(limit ? limit > current.length : true);
943
+ const showListTitle = $derived(limit !== 1 && current.length > 0);
944
+
945
+ // ——— 裁剪流程 ———
946
+ const cropConfig = $derived<UploadCropProps>(
947
+ crop === true ? {} : crop && typeof crop === 'object' ? crop : {},
948
+ );
949
+
950
+ let cropOpen = $state(false);
951
+ let cropSrc = $state<string | undefined>(undefined);
952
+ let cropperRef = $state<{ getCropperCanvas: () => HTMLCanvasElement } | null>(null);
953
+ let cropConfirming = $state(false);
954
+ let cropCurrentFile: File | null = null;
955
+ let cropResolve: ((file: File | null) => void) | null = null;
956
+
957
+ const isImageFile = (f: File) => f.type.startsWith('image/');
958
+
959
+ const cropModalTextProps = $derived({
960
+ ...(cropConfig.modalOkText !== undefined ? { okText: cropConfig.modalOkText } : {}),
961
+ ...(cropConfig.modalCancelText !== undefined ? { cancelText: cropConfig.modalCancelText } : {}),
962
+ });
963
+ const cropperNumProps = $derived({
964
+ ...(cropConfig.aspectRatio !== undefined ? { aspectRatio: cropConfig.aspectRatio } : {}),
965
+ ...(cropConfig.minZoom !== undefined ? { minZoom: cropConfig.minZoom } : {}),
966
+ ...(cropConfig.maxZoom !== undefined ? { maxZoom: cropConfig.maxZoom } : {}),
967
+ ...(cropConfig.zoomStep !== undefined ? { zoomStep: cropConfig.zoomStep } : {}),
968
+ });
969
+
970
+ async function runCropPipeline(files: File[]) {
971
+ const out: File[] = [];
972
+ for (const file of files) {
973
+ if (!mounted) return;
974
+ if (!isImageFile(file)) {
975
+ out.push(file);
976
+ continue;
977
+ }
978
+ if (beforeCrop) {
979
+ let skip = false;
980
+ try {
981
+ skip = (await beforeCrop(file, files)) === false;
982
+ } catch {
983
+ skip = false;
984
+ }
985
+ if (!mounted) return;
986
+ if (skip) {
987
+ out.push(file);
988
+ continue;
989
+ }
990
+ }
991
+ try {
992
+ const cropped = await cropOne(file);
993
+ if (!mounted) return;
994
+ if (cropped) out.push(cropped);
995
+ } catch (err) {
996
+ onCropError?.(err);
997
+ out.push(file);
998
+ }
999
+ }
1000
+ if (!mounted) return;
1001
+ if (out.length > 0) addFilesInternal(out);
1002
+ }
1003
+
1004
+ function cropOne(file: File): Promise<File | null> {
1005
+ return new Promise<File | null>((resolve) => {
1006
+ cropCurrentFile = file;
1007
+ cropResolve = resolve;
1008
+ cropSrc = URL.createObjectURL(file);
1009
+ cropOpen = true;
1010
+ });
1011
+ }
1012
+
1013
+ function confirmCrop() {
1014
+ const canvas = cropperRef?.getCropperCanvas();
1015
+ const original = cropCurrentFile;
1016
+ if (!canvas || !original) {
1017
+ settleCrop(null);
1018
+ return;
1019
+ }
1020
+ cropConfirming = true;
1021
+ const type = original.type || 'image/png';
1022
+ const quality = cropConfig.quality ?? 0.92;
1023
+ try {
1024
+ canvas.toBlob(
1025
+ (blob) => {
1026
+ cropConfirming = false;
1027
+ if (!blob) {
1028
+ onCropError?.(new Error('Cropper toBlob returned null'));
1029
+ settleCrop(original);
1030
+ return;
1031
+ }
1032
+ const cropped = new File([blob], original.name, { type, lastModified: Date.now() });
1033
+ settleCrop(cropped);
1034
+ },
1035
+ type,
1036
+ quality,
1037
+ );
1038
+ } catch (err) {
1039
+ cropConfirming = false;
1040
+ onCropError?.(err);
1041
+ settleCrop(original);
1042
+ }
1043
+ }
1044
+
1045
+ function cancelCrop() {
1046
+ settleCrop(null);
1047
+ }
1048
+
1049
+ function settleCrop(result: File | null) {
1050
+ cropOpen = false;
1051
+ if (cropSrc) {
1052
+ URL.revokeObjectURL(cropSrc);
1053
+ cropSrc = undefined;
1054
+ }
1055
+ const resolve = cropResolve;
1056
+ cropResolve = null;
1057
+ cropCurrentFile = null;
1058
+ resolve?.(result);
1059
+ }
1060
+
1061
+ // 组装单项传给 FileCard 的公共 props。url/style 仅在有值时带上(exactOptionalPropertyTypes)。
1062
+ function cardProps(item: UploadFileItem, index: number, url: string | undefined, style: string | undefined) {
1063
+ return {
1064
+ item,
1065
+ index,
1066
+ listType,
1067
+ disabled,
1068
+ showRetry,
1069
+ showReplace,
1070
+ showPicInfo,
1071
+ preview: itemPreviewEnabled(item),
1072
+ showTooltip,
1073
+ ...(url !== undefined ? { url } : {}),
1074
+ ...(style !== undefined ? { style } : {}),
1075
+ ...(picWidth !== undefined ? { picWidth } : {}),
1076
+ ...(picHeight !== undefined ? { picHeight } : {}),
1077
+ onRemove: () => remove(item.uid),
1078
+ onRetry: () => retryItem(item),
1079
+ onReplace: () => openReplace(item.uid),
1080
+ ...(onPreviewClick ? { onPreviewClick: () => onPreviewClick(item) } : {}),
1081
+ };
1082
+ }
1083
+
1084
+ function renderProps(item: UploadFileItem, index: number): RenderFileItemProps {
1085
+ return {
1086
+ ...item,
1087
+ index,
1088
+ listType,
1089
+ disabled,
1090
+ showRetry,
1091
+ showReplace,
1092
+ showPicInfo,
1093
+ onRemove: () => remove(item.uid),
1094
+ onRetry: () => retryItem(item),
1095
+ onReplace: () => openReplace(item.uid),
1096
+ ...(onPreviewClick ? { onPreviewClick: () => onPreviewClick(item) } : {}),
1097
+ };
1098
+ }
559
1099
  </script>
560
1100
 
561
1101
  <div
562
- class="cd-upload cd-upload--{size} cd-upload--{status}"
563
- class:cd-upload--disabled={disabled}
564
- data-status={status !== 'default' ? status : undefined}
1102
+ class={['cd-upload', isPicture && 'cd-upload-picture', disabled && 'cd-upload-disabled', validateStatus === 'default' && 'cd-upload-default', validateStatus === 'error' && 'cd-upload-error', validateStatus === 'warning' && 'cd-upload-warning', validateStatus === 'success' && 'cd-upload-success', className]
1103
+ .filter(Boolean)
1104
+ .join(' ')}
1105
+ style={styleProp}
1106
+ {...{ 'x-prompt-pos': promptPosition }}
565
1107
  >
566
1108
  <input
567
1109
  bind:this={inputEl}
568
- class="cd-upload__input"
1110
+ class="cd-upload-hidden-input"
569
1111
  type="file"
570
1112
  {accept}
571
1113
  {multiple}
572
1114
  {disabled}
573
1115
  tabindex="-1"
1116
+ autocomplete="off"
574
1117
  aria-hidden="true"
575
1118
  onchange={handleInputChange}
576
1119
  />
1120
+ <input
1121
+ bind:this={replaceInputEl}
1122
+ class="cd-upload-hidden-input-replace"
1123
+ type="file"
1124
+ {accept}
1125
+ {disabled}
1126
+ tabindex="-1"
1127
+ autocomplete="off"
1128
+ aria-hidden="true"
1129
+ onchange={handleReplaceChange}
1130
+ />
577
1131
 
578
- {#snippet triggerArea()}
1132
+ <!-- ============ 添加区(对齐 Semi renderAddContent / renderDragArea) ============ -->
1133
+ {#snippet dragArea()}
579
1134
  <div
580
- class="cd-upload__trigger-wrap"
581
- class:cd-upload__trigger-wrap--row={promptRow}
582
- class:cd-upload__trigger-wrap--row-reverse={promptPosition === 'left'}
1135
+ class={['cd-upload-drag-area', dragOver && 'cd-upload-drag-area-legal', children && 'cd-upload-drag-area-custom']
1136
+ .filter(Boolean)
1137
+ .join(' ')}
1138
+ role="button"
1139
+ tabindex={disabled ? -1 : 0}
1140
+ aria-disabled={disabled || undefined}
1141
+ ondragover={(e) => e.preventDefault()}
1142
+ ondragenter={handleDragEnter}
1143
+ ondragleave={handleDragLeave}
1144
+ ondrop={handleDrop}
1145
+ onclick={openPicker}
1146
+ onkeydown={handleDragKeydown}
583
1147
  >
584
- {#if drag}
585
- <div
586
- class="cd-upload__dragger"
587
- role="button"
588
- tabindex={disabled ? -1 : 0}
589
- aria-disabled={disabled || undefined}
590
- ondragover={(e) => e.preventDefault()}
591
- ondrop={handleDrop}
592
- onclick={openPicker}
593
- onkeydown={handleDragKeydown}
594
- >
595
- {#if children}
596
- {@render children()}
597
- {:else}
598
- {#if dragIcon}{@render dragIcon()}{/if}
1148
+ {#if children}
1149
+ {@render children()}
1150
+ {:else}
1151
+ <div class="cd-upload-drag-area-icon">
1152
+ {#if dragIcon}{@render dragIcon()}{:else}<IconUpload size="extra-large" />{/if}
1153
+ </div>
1154
+ <div class="cd-upload-drag-area-text">
1155
+ <div class="cd-upload-drag-area-main-text">
599
1156
  {#if dragMainText}
600
- <span class="cd-upload__dragger-main">
601
- {#if typeof dragMainText === 'string'}{dragMainText}{:else}{@render dragMainText()}{/if}
602
- </span>
603
- {:else}
604
- <span class="cd-upload__dragger-text">{loc().t('Upload.draggerText')}</span>
605
- {/if}
606
- {#if dragSubText}
607
- <span class="cd-upload__dragger-sub">
608
- {#if typeof dragSubText === 'string'}{dragSubText}{:else}{@render dragSubText()}{/if}
609
- </span>
610
- {/if}
1157
+ {#if typeof dragMainText === 'string'}{dragMainText}{:else}{@render dragMainText()}{/if}
1158
+ {:else}{loc().t('Upload.draggerText')}{/if}
1159
+ </div>
1160
+ {#if dragSubText}
1161
+ <div class="cd-upload-drag-area-sub-text">
1162
+ {#if typeof dragSubText === 'string'}{dragSubText}{:else}{@render dragSubText()}{/if}
1163
+ </div>
611
1164
  {/if}
1165
+ <div class="cd-upload-drag-area-tips">
1166
+ {#if dragOver}
1167
+ <span class="cd-upload-drag-area-tips-legal">{loc().t('Upload.legalTips')}</span>
1168
+ {/if}
1169
+ </div>
612
1170
  </div>
613
- {:else}
614
- <button type="button" class="cd-upload__trigger" {disabled} onclick={openPicker}>
615
- {#if children}
616
- {@render children()}
617
- {:else}
618
- {loc().t('Upload.trigger')}
619
- {/if}
620
- </button>
621
1171
  {/if}
1172
+ </div>
1173
+ {/snippet}
622
1174
 
623
- {#if prompt}
624
- <div class="cd-upload__prompt">
625
- {#if typeof prompt === 'string'}{prompt}{:else}{@render prompt()}{/if}
626
- </div>
627
- {/if}
1175
+ {#snippet addContent()}
1176
+ {#if draggable}
1177
+ {@render dragArea()}
1178
+ {:else}
1179
+ <div
1180
+ role="button"
1181
+ tabindex="0"
1182
+ aria-disabled={disabled || undefined}
1183
+ class="cd-upload-add"
1184
+ onclick={openPicker}
1185
+ onkeydown={handleDragKeydown}
1186
+ >
1187
+ {#if children}
1188
+ {@render children()}
1189
+ {:else}
1190
+ {loc().t('Upload.trigger')}
1191
+ {/if}
1192
+ </div>
1193
+ {/if}
1194
+ {/snippet}
1195
+
1196
+ <!-- picture 添加瓦片(对齐 Semi picture renderFileListPic 的 addContent)。 -->
1197
+ {#snippet pictureAddContent()}
1198
+ <div
1199
+ role="button"
1200
+ tabindex="0"
1201
+ class={['cd-upload-add', 'cd-upload-picture-add', disabled && 'cd-upload-picture-add-disabled', draggable && dragOver && 'cd-upload-drag-area-legal']
1202
+ .filter(Boolean)
1203
+ .join(' ')}
1204
+ style={addTileStyle}
1205
+ onclick={openPicker}
1206
+ onkeydown={handleDragKeydown}
1207
+ ondragover={draggable ? (e) => e.preventDefault() : undefined}
1208
+ ondragenter={draggable ? handleDragEnter : undefined}
1209
+ ondragleave={draggable ? handleDragLeave : undefined}
1210
+ ondrop={draggable ? handleDrop : undefined}
1211
+ >
1212
+ {@render children?.()}
628
1213
  </div>
629
1214
  {/snippet}
630
1215
 
631
- {#if hotSpotLocation !== 'none' && hotSpotLocation !== 'end'}
632
- {@render triggerArea()}
1216
+ <!-- picture:添加区在文件列表前渲染(对齐 Semi render() 顺序)。 -->
1217
+ {#if !isPicture}
1218
+ {@render addContent()}
633
1219
  {/if}
634
1220
 
635
- {#if showClear && current.length > 0}
636
- <button
637
- type="button"
638
- class="cd-upload__clear-btn"
639
- {disabled}
640
- onclick={clearAll}
641
- >清除全部</button>
1221
+ {#if prompt}
1222
+ <div class="cd-upload-prompt">
1223
+ {#if typeof prompt === 'string'}{prompt}{:else}{@render prompt()}{/if}
1224
+ </div>
642
1225
  {/if}
643
1226
 
644
- {#if listType === 'text' && current.length > 0}
645
- {#if fileListTitle !== false && fileListTitle}
646
- <div class="cd-upload__list-title">{fileListTitle}</div>
647
- {/if}
648
- <ul class="cd-upload__list">
649
- {#each current as item (item.uid)}
650
- <li class="cd-upload__item" class:cd-upload__item--error={item.status === 'error'}>
651
- <div class="cd-upload__item-main">
652
- <span
653
- class="cd-upload__item-name"
654
- title={showTooltip !== false ? item.name : undefined}
655
- >{item.name}</span>
656
- <span class="cd-upload__item-size">{formatSize(item.size)}</span>
657
- {#if item.status !== 'uploading'}
658
- <span class="cd-upload__item-status">{item.error ?? item.status}</span>
659
- {/if}
660
- {#if item.status === 'error' && showRetry !== false}
661
- <button
662
- type="button"
663
- class="cd-upload__retry-btn"
664
- {disabled}
665
- onclick={() => retryItem(item)}
666
- >重试</button>
1227
+ {#if validateMessage && current.length === 0}
1228
+ <div class="cd-upload-validate-message">{validateMessage}</div>
1229
+ {/if}
1230
+
1231
+ <!-- ============ 文件列表(对齐 Semi renderFileList) ============ -->
1232
+ {#if listType === 'list' && showUploadList && current.length > 0}
1233
+ <div class="cd-upload-file-list">
1234
+ {#if showListTitle}
1235
+ <div class="cd-upload-file-list-title">
1236
+ {#if titleSnippet}
1237
+ {@render titleSnippet({ fileList: current, onClear: clearAll, clearText })}
1238
+ {:else}
1239
+ <span class="cd-upload-file-list-title-choosen">{titleText ?? loc().t('Upload.selectedFiles')}</span>
1240
+ {#if showClear && !disabled}
1241
+ <span role="button" tabindex="0" class="cd-upload-file-list-title-clear" onclick={clearAll} onkeydown={null}>{clearText}</span>
667
1242
  {/if}
668
- <button
669
- type="button"
670
- class="cd-upload__item-remove"
671
- aria-label={loc().t('Upload.remove')}
672
- {disabled}
673
- onclick={() => remove(item.uid)}
674
- >
675
- &times;
676
- </button>
677
- </div>
678
- {#if item.status === 'uploading'}
679
- <Progress
680
- percent={item.percent ?? 0}
681
- size="small"
682
- ariaLabel={loc().t('Upload.uploadingProgress', { name: item.name })}
1243
+ {/if}
1244
+ </div>
1245
+ {/if}
1246
+ <div class="cd-upload-file-list-main" role="list" aria-label="file list">
1247
+ {#each current as item, index (item.uid)}
1248
+ {#if renderFileItem}
1249
+ {@render renderFileItem(renderProps(item, index))}
1250
+ {:else}
1251
+ <FileCard
1252
+ {...cardProps(item, index, itemThumbUrl(item), itemStyleStr)}
1253
+ {...(previewFile ? { previewFile } : {})}
1254
+ {...(renderFileOperation ? { renderFileOperation } : {})}
683
1255
  />
684
1256
  {/if}
685
- </li>
686
- {/each}
687
- </ul>
1257
+ {/each}
1258
+ </div>
1259
+ </div>
688
1260
  {/if}
689
1261
 
690
- {#if isImageList && current.length > 0}
691
- <ul
692
- class="cd-upload__grid"
693
- class:cd-upload__grid--card={listType === 'picture-card'}
694
- >
695
- {#each current as item (item.uid)}
696
- {@const url = previewUrl(item)}
697
- <li
698
- class="cd-upload__card"
699
- class:cd-upload__card--error={item.status === 'error'}
700
- class:cd-upload__card--uploading={item.status === 'uploading'}
701
- >
702
- {#if url}
703
- {#if onPreviewClick}
704
- <button
705
- type="button"
706
- class="cd-upload__thumb-btn"
707
- aria-label={item.name}
708
- onclick={() => onPreviewClick(item)}
709
- >
710
- <img class="cd-upload__thumb" src={url} alt="" aria-hidden="true" />
711
- </button>
712
- {:else}
713
- <img class="cd-upload__thumb" src={url} alt={item.name} />
714
- {/if}
715
- {:else}
716
- <span class="cd-upload__thumb cd-upload__thumb--placeholder" aria-hidden="true"></span>
1262
+ {#if isPicture && ((showUploadList && current.length > 0) || (!current.length && showAddTrigger))}
1263
+ {#if !showUploadList || !current.length}
1264
+ <!-- 空列表:仅渲染添加瓦片(对齐 Semi renderFileListPic 空态返回 addContent)。 -->
1265
+ {#if showAddTrigger}
1266
+ {@render pictureAddContent()}
1267
+ {/if}
1268
+ {:else}
1269
+ <div class="cd-upload-file-list cd-upload-picture-file-list">
1270
+ <div class="cd-upload-file-list-main" role="list" aria-label="picture list">
1271
+ {#if showAddTrigger && hotSpotLocation === 'start'}
1272
+ {@render pictureAddContent()}
717
1273
  {/if}
718
- {#if item.status === 'uploading'}
719
- <div class="cd-upload__card-progress">
720
- <Progress
721
- percent={item.percent ?? 0}
722
- size="small"
723
- ariaLabel={loc().t('Upload.uploadingProgress', { name: item.name })}
1274
+ {#each current as item, index (item.uid)}
1275
+ {#if renderFileItem}
1276
+ {@render renderFileItem(renderProps(item, index))}
1277
+ {:else}
1278
+ <FileCard
1279
+ {...cardProps(item, index, previewUrl(item), cardStyleStr)}
1280
+ {...(renderThumbnail ? { renderThumbnail } : {})}
1281
+ {...(previewFile ? { previewFile } : {})}
1282
+ {...(renderPicInfo ? { renderPicInfo } : {})}
1283
+ {...(renderPicPreviewIcon ? { renderPicPreviewIcon } : {})}
1284
+ {...(renderPicClose ? { renderPicClose } : {})}
724
1285
  />
725
- </div>
1286
+ {/if}
1287
+ {/each}
1288
+ {#if showAddTrigger && hotSpotLocation !== 'start'}
1289
+ {@render pictureAddContent()}
726
1290
  {/if}
727
- <div class="cd-upload__card-overlay">
728
- <span class="cd-upload__card-name">{item.name}</span>
729
- <button
730
- type="button"
731
- class="cd-upload__card-remove"
732
- aria-label={loc().t('Upload.remove')}
733
- {disabled}
734
- onclick={() => remove(item.uid)}
735
- >
736
- &times;
737
- </button>
738
- </div>
739
- </li>
740
- {/each}
741
- </ul>
742
- {/if}
743
-
744
- {#if hotSpotLocation === 'end'}
745
- {@render triggerArea()}
1291
+ </div>
1292
+ </div>
1293
+ {/if}
746
1294
  {/if}
747
1295
  </div>
748
1296
 
1297
+ {#if crop}
1298
+ <Modal
1299
+ visible={cropOpen}
1300
+ title={cropConfig.modalTitle ?? loc().t('Upload.cropTitle')}
1301
+ confirmLoading={cropConfirming}
1302
+ onOk={confirmCrop}
1303
+ onCancel={cancelCrop}
1304
+ onVisibleChange={(o) => {
1305
+ if (!o && cropOpen) cancelCrop();
1306
+ }}
1307
+ {...cropModalTextProps}
1308
+ {...cropModalProps}
1309
+ >
1310
+ {#if cropSrc}
1311
+ <div class="cd-upload-crop-body">
1312
+ <Cropper
1313
+ bind:this={cropperRef}
1314
+ src={cropSrc}
1315
+ shape={cropConfig.shape ?? 'rect'}
1316
+ fill={cropConfig.fill ?? '#fff'}
1317
+ style="width: 100%; height: 320px;"
1318
+ {...cropperNumProps}
1319
+ />
1320
+ </div>
1321
+ {/if}
1322
+ </Modal>
1323
+ {/if}
1324
+
749
1325
  <style>
1326
+ /* ============ 根容器(对齐 Semi upload.scss .semi-upload) ============ */
750
1327
  .cd-upload {
751
1328
  display: flex;
752
- flex-direction: column;
753
- gap: var(--cd-spacing-base-tight);
754
- color: var(--cd-color-text-0);
1329
+ flex-wrap: wrap;
1330
+ color: var(--cd-color-upload-text);
755
1331
  }
756
- .cd-upload__input {
757
- position: absolute;
758
- inline-size: 1px;
759
- block-size: 1px;
760
- padding: 0;
761
- margin: 0;
762
- overflow: hidden;
763
- clip-path: inset(50%);
764
- white-space: nowrap;
765
- border: 0;
1332
+ .cd-upload-hidden-input,
1333
+ .cd-upload-hidden-input-replace {
1334
+ display: none;
766
1335
  }
767
- .cd-upload__trigger-wrap {
1336
+ .cd-upload-add {
768
1337
  display: flex;
769
- flex-direction: column;
770
- gap: var(--cd-spacing-tight);
771
- }
772
- .cd-upload__trigger-wrap--row {
773
- flex-direction: row;
774
1338
  align-items: center;
775
1339
  }
776
- .cd-upload__trigger-wrap--row-reverse {
777
- flex-direction: row-reverse;
1340
+ /* prompt-pos(对齐 Semi x-prompt-pos) */
1341
+ .cd-upload[x-prompt-pos='right'] .cd-upload-add,
1342
+ .cd-upload[x-prompt-pos='right'] .cd-upload-prompt {
1343
+ display: inline-flex;
778
1344
  }
779
- .cd-upload__prompt {
780
- color: var(--cd-color-text-2);
781
- font-size: var(--cd-font-size-small);
1345
+ .cd-upload[x-prompt-pos='bottom'] .cd-upload-add {
1346
+ display: flex;
1347
+ }
1348
+ .cd-upload[x-prompt-pos='bottom'] .cd-upload-prompt {
1349
+ display: flex;
1350
+ flex-basis: 100%;
1351
+ }
1352
+ .cd-upload[x-prompt-pos='bottom'] .cd-upload-file-list {
1353
+ flex-basis: 100%;
782
1354
  }
783
- .cd-upload__trigger {
784
- align-self: flex-start;
1355
+ .cd-upload[x-prompt-pos='left'] .cd-upload-add,
1356
+ .cd-upload[x-prompt-pos='left'] .cd-upload-prompt {
785
1357
  display: inline-flex;
786
- align-items: center;
787
- gap: var(--cd-spacing-tight);
788
- height: var(--cd-button-height-default);
789
- padding-inline: var(--cd-button-padding-x);
790
- background: var(--cd-color-fill-0);
791
- color: var(--cd-color-text-0);
792
- border: 1px solid var(--cd-color-border);
793
- border-radius: var(--cd-button-radius);
794
- font-size: var(--cd-button-font-size);
795
- cursor: pointer;
796
1358
  }
797
- .cd-upload__trigger:focus-visible {
798
- outline: none;
799
- box-shadow: var(--cd-focus-ring);
1359
+ .cd-upload[x-prompt-pos='left'] .cd-upload-prompt {
1360
+ order: -1;
800
1361
  }
801
- /* 组件级 size:触发按钮高度/字号档(区别于 file.size 体积)。 */
802
- .cd-upload--small .cd-upload__trigger {
803
- height: var(--cd-button-height-small);
804
- font-size: var(--cd-font-size-small);
1362
+ .cd-upload[x-prompt-pos='left'] .cd-upload-file-list {
1363
+ order: 2;
805
1364
  }
806
- .cd-upload--large .cd-upload__trigger {
807
- height: var(--cd-button-height-large);
808
- font-size: var(--cd-font-size-header-6);
1365
+ .cd-upload-prompt {
1366
+ color: var(--cd-color-upload-assist-text);
809
1367
  }
810
- .cd-upload__trigger:disabled {
811
- cursor: not-allowed;
812
- opacity: 0.5;
1368
+
1369
+ /* ============ 文件列表(对齐 Semi file-list 段) ============ */
1370
+ .cd-upload-file-list {
1371
+ flex-basis: 100%;
1372
+ flex-shrink: 0;
1373
+ display: block;
1374
+ margin-block: var(--cd-spacing-tight);
813
1375
  }
814
- .cd-upload__dragger {
1376
+ .cd-upload-file-list-main {
815
1377
  display: flex;
1378
+ flex-wrap: wrap;
1379
+ flex-shrink: 0;
1380
+ gap: var(--cd-spacing-upload-picture-file-card-gap);
1381
+ margin-block-end: var(--cd-spacing-upload-picture-file-card-marginbottom);
1382
+ }
1383
+ .cd-upload-file-list-title {
1384
+ font-size: var(--cd-font-size-small);
1385
+ color: var(--cd-color-upload-assist-text);
1386
+ margin-block-end: var(--cd-spacing-upload-title-marginbottom);
1387
+ }
1388
+ .cd-upload-file-list-title-choosen {
1389
+ margin-inline-end: var(--cd-spacing-upload-title-choosen-marginright);
1390
+ }
1391
+ .cd-upload-file-list-title-clear {
1392
+ cursor: pointer;
1393
+ color: var(--cd-color-upload-clear-text);
1394
+ }
1395
+
1396
+ /* list 卡片纵向堆叠(Semi file-list-main flex-wrap 下逐个换行)。 */
1397
+ .cd-upload-file-list:not(.cd-upload-picture-file-list) .cd-upload-file-list-main {
816
1398
  flex-direction: column;
1399
+ gap: var(--cd-spacing-extra-tight);
1400
+ }
1401
+
1402
+ /* ============ 拖拽区(对齐 Semi drag-area 段) ============ */
1403
+ .cd-upload-drag-area {
1404
+ border-radius: var(--cd-radius-upload-drag-area);
1405
+ border: var(--cd-width-upload-drag-area-border) dashed var(--cd-color-upload-border);
1406
+ width: 100%;
1407
+ padding: var(--cd-spacing-upload-drag-area-padding);
1408
+ background-color: var(--cd-color-upload-drag-area-bg);
1409
+ display: flex;
817
1410
  align-items: center;
818
1411
  justify-content: center;
819
- padding-block: var(--cd-spacing-loose);
820
- padding-inline: var(--cd-spacing-base);
821
- background: var(--cd-upload-dragger-bg);
822
- border: 1px dashed var(--cd-upload-dragger-border);
823
- border-radius: var(--cd-upload-dragger-radius);
824
- color: var(--cd-color-text-2);
1412
+ flex-direction: column;
825
1413
  cursor: pointer;
826
- transition:
827
- border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard),
828
- background-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
1414
+ box-sizing: border-box;
829
1415
  }
830
- .cd-upload__dragger:hover,
831
- .cd-upload__dragger:focus-visible {
832
- border-color: var(--cd-upload-dragger-border-active);
833
- background: var(--cd-upload-dragger-bg-active); /* 对齐 Semi 拖拽区 hover 背景 */
1416
+ .cd-upload-drag-area:hover {
1417
+ background-color: var(--cd-color-upload-drag-area-bg-hover);
1418
+ border-color: var(--cd-color-upload-drag-area-border-hover);
834
1419
  }
835
- .cd-upload__dragger:focus-visible {
1420
+ .cd-upload-drag-area:focus-visible {
836
1421
  outline: none;
837
1422
  box-shadow: var(--cd-focus-ring);
838
1423
  }
839
- .cd-upload--disabled .cd-upload__dragger {
840
- cursor: not-allowed;
841
- opacity: 0.5;
1424
+ .cd-upload-drag-area-custom {
1425
+ border: none;
1426
+ padding: 0;
1427
+ background-color: inherit;
842
1428
  }
843
- /* 组件级 size:拖拽区内边距/字号档。 */
844
- .cd-upload--small .cd-upload__dragger {
845
- padding-block: var(--cd-spacing-base);
846
- font-size: var(--cd-font-size-small);
1429
+ .cd-upload-drag-area-custom:hover {
1430
+ background-color: inherit;
847
1431
  }
848
- .cd-upload--large .cd-upload__dragger {
849
- padding-block: var(--cd-spacing-extra-loose, var(--cd-spacing-loose));
850
- font-size: var(--cd-font-size-header-6);
1432
+ .cd-upload-drag-area-legal {
1433
+ background-color: var(--cd-color-upload-drag-area-bg-hover);
1434
+ border-color: var(--cd-color-upload-drag-area-border-hover);
851
1435
  }
852
- /* 组件级 status:校验态影响上传区/卡片边框色(区别于 file.status 进度态)。 */
853
- .cd-upload--warning .cd-upload__dragger {
854
- border-color: var(--cd-upload-border-warning, var(--cd-color-warning));
1436
+ .cd-upload-drag-area-legal .cd-upload-drag-area-sub-text {
1437
+ display: none;
855
1438
  }
856
- .cd-upload--error .cd-upload__dragger {
857
- border-color: var(--cd-upload-border-error, var(--cd-color-danger));
1439
+ .cd-upload-drag-area-icon {
1440
+ color: var(--cd-color-upload-drag-area-icon);
858
1441
  }
859
- .cd-upload--warning .cd-upload__trigger {
860
- border-color: var(--cd-upload-border-warning, var(--cd-color-warning));
1442
+ .cd-upload-drag-area-text {
1443
+ text-align: center;
861
1444
  }
862
- .cd-upload--error .cd-upload__trigger {
863
- border-color: var(--cd-upload-border-error, var(--cd-color-danger));
1445
+ .cd-upload-drag-area-main-text {
1446
+ cursor: pointer;
1447
+ font-size: var(--cd-font-size-regular);
1448
+ margin-block-end: var(--cd-spacing-upload-drag-area-main-text-marginbottom);
1449
+ color: var(--cd-color-upload-drag-area-main-text-default);
864
1450
  }
865
- .cd-upload--warning .cd-upload__card,
866
- .cd-upload--error .cd-upload__card {
867
- border-color: var(--cd-upload-border-warning, var(--cd-color-warning));
1451
+ .cd-upload-drag-area:hover .cd-upload-drag-area-main-text {
1452
+ color: var(--cd-color-upload-drag-area-main-text-hover);
868
1453
  }
869
- .cd-upload--error .cd-upload__card {
870
- border-color: var(--cd-upload-border-error, var(--cd-color-danger));
1454
+ .cd-upload-drag-area:active .cd-upload-drag-area-main-text {
1455
+ color: var(--cd-color-upload-drag-area-main-text-active);
871
1456
  }
872
- .cd-upload__list-title {
1457
+ .cd-upload-drag-area-sub-text {
1458
+ cursor: pointer;
873
1459
  font-size: var(--cd-font-size-small);
874
- color: var(--cd-color-text-1);
875
- font-weight: 500;
876
- margin-block-end: var(--cd-spacing-extra-tight);
1460
+ color: var(--cd-color-upload-drag-area-sub-text-default);
877
1461
  }
878
- .cd-upload__list {
879
- display: flex;
880
- flex-direction: column;
881
- gap: var(--cd-spacing-extra-tight);
882
- margin: 0;
883
- padding: 0;
884
- list-style: none;
1462
+ .cd-upload-drag-area:hover .cd-upload-drag-area-sub-text {
1463
+ color: var(--cd-color-upload-drag-area-sub-text-hover);
885
1464
  }
886
- .cd-upload__item {
887
- display: flex;
888
- flex-direction: column;
889
- gap: var(--cd-spacing-extra-tight);
890
- padding-block: var(--cd-spacing-extra-tight);
891
- padding-inline: var(--cd-spacing-tight);
892
- border-radius: var(--cd-border-radius-small);
1465
+ .cd-upload-drag-area:active .cd-upload-drag-area-sub-text {
1466
+ color: var(--cd-color-upload-drag-area-sub-text-active);
893
1467
  }
894
- .cd-upload__item-main {
895
- display: flex;
896
- align-items: center;
897
- gap: var(--cd-spacing-tight);
898
- }
899
- .cd-upload__item:hover {
900
- background: var(--cd-upload-item-bg-hover);
1468
+ .cd-upload-drag-area-tips {
1469
+ font-size: var(--cd-font-size-small);
1470
+ font-weight: var(--cd-font-upload-drag-area-tips-fontweight);
901
1471
  }
902
- .cd-upload__item--error {
903
- color: var(--cd-upload-item-color-error);
1472
+ .cd-upload-drag-area-tips-legal {
1473
+ color: var(--cd-color-upload-drag-area-tips-text);
904
1474
  }
905
- .cd-upload__item-name {
906
- flex: 1 1 auto;
907
- min-inline-size: 0;
908
- overflow: hidden;
909
- text-overflow: ellipsis;
910
- white-space: nowrap;
1475
+
1476
+ /* ============ picture 添加瓦片(对齐 Semi picture-add 段) ============ */
1477
+ .cd-upload-picture {
1478
+ display: flex;
911
1479
  }
912
- .cd-upload__item-size,
913
- .cd-upload__item-status {
914
- flex: 0 0 auto;
915
- color: var(--cd-color-text-2);
916
- font-size: var(--cd-font-size-small);
1480
+ .cd-upload-picture[x-prompt-pos='bottom'] {
1481
+ flex-direction: column;
917
1482
  }
918
- .cd-upload__item--error .cd-upload__item-status {
919
- color: var(--cd-upload-item-color-error);
1483
+ .cd-upload-picture[x-prompt-pos='bottom'] .cd-upload-prompt,
1484
+ .cd-upload-picture[x-prompt-pos='right'] .cd-upload-prompt {
1485
+ order: 1;
920
1486
  }
921
- .cd-upload__item-remove {
922
- flex: 0 0 auto;
1487
+ .cd-upload-picture-add {
1488
+ background-color: var(--cd-color-upload-pic-add-bg);
1489
+ height: var(--cd-height-upload-file-pic-card);
1490
+ width: var(--cd-width-upload-file-pic-card);
1491
+ box-sizing: border-box;
923
1492
  display: inline-flex;
924
- align-items: center;
925
1493
  justify-content: center;
926
- padding: 0;
927
- border: none;
928
- background: transparent;
929
- color: var(--cd-color-text-2);
1494
+ align-items: center;
1495
+ border: var(--cd-width-upload-picture-add-border) dashed var(--cd-color-upload-border);
1496
+ color: var(--cd-color-upload-icon);
1497
+ border-radius: var(--cd-radius-upload-picture-add);
930
1498
  cursor: pointer;
931
- border-radius: var(--cd-border-radius-small);
932
- font-size: var(--cd-font-size-header-6);
933
- line-height: 1;
934
1499
  }
935
- .cd-upload__item-remove:hover {
936
- color: var(--cd-color-text-0);
1500
+ .cd-upload-picture-add:hover {
1501
+ background-color: var(--cd-color-upload-pic-add-bg-hover);
1502
+ }
1503
+ .cd-upload-picture-add:active {
1504
+ background-color: var(--cd-color-upload-pic-add-bg-active);
937
1505
  }
938
- .cd-upload__item-remove:focus-visible {
1506
+ .cd-upload-picture-add:focus-visible {
939
1507
  outline: none;
940
1508
  box-shadow: var(--cd-focus-ring);
941
1509
  }
942
- .cd-upload__item-remove:disabled {
1510
+ .cd-upload-picture-add-disabled {
943
1511
  cursor: not-allowed;
944
- opacity: 0.5;
945
1512
  }
946
- .cd-upload__retry-btn {
947
- flex: 0 0 auto;
948
- display: inline-flex;
949
- align-items: center;
950
- padding: 0 var(--cd-spacing-extra-tight);
951
- border: none;
952
- background: transparent;
953
- color: var(--cd-color-primary);
954
- cursor: pointer;
955
- font-size: var(--cd-font-size-small);
956
- border-radius: var(--cd-border-radius-small);
1513
+ .cd-upload-picture-add-disabled:hover,
1514
+ .cd-upload-picture-add-disabled:active {
1515
+ background-color: var(--cd-color-upload-pic-add-bg);
957
1516
  }
958
- .cd-upload__retry-btn:hover {
959
- text-decoration: underline;
1517
+ .cd-upload-picture-file-list {
1518
+ flex-basis: inherit;
1519
+ margin-block: 0;
960
1520
  }
961
- .cd-upload__retry-btn:disabled {
1521
+
1522
+ /* ============ 校验态 / disabled(对齐 Semi) ============ */
1523
+ .cd-upload-warning .cd-upload-drag-area,
1524
+ .cd-upload-warning .cd-upload-add,
1525
+ .cd-upload-warning .cd-upload-picture-add {
1526
+ border-color: var(--cd-color-warning);
1527
+ }
1528
+ .cd-upload-error .cd-upload-drag-area,
1529
+ .cd-upload-error .cd-upload-add,
1530
+ .cd-upload-error .cd-upload-picture-add {
1531
+ border-color: var(--cd-color-danger);
1532
+ }
1533
+ .cd-upload-disabled {
962
1534
  cursor: not-allowed;
963
- opacity: 0.5;
964
1535
  }
965
- .cd-upload__clear-btn {
966
- align-self: flex-end;
967
- display: inline-flex;
968
- align-items: center;
969
- gap: var(--cd-spacing-extra-tight);
970
- padding: var(--cd-spacing-extra-tight) var(--cd-spacing-tight);
1536
+ .cd-upload-disabled .cd-upload-drag-area {
971
1537
  border: none;
972
- background: transparent;
973
- color: var(--cd-color-text-2);
974
- cursor: pointer;
975
- font-size: var(--cd-font-size-small);
976
- border-radius: var(--cd-border-radius-small);
977
- }
978
- .cd-upload__clear-btn:hover {
979
- color: var(--cd-color-danger);
980
- background: var(--cd-color-fill-1);
981
- }
982
- .cd-upload__clear-btn:disabled {
983
1538
  cursor: not-allowed;
984
- opacity: 0.5;
985
1539
  }
986
- .cd-upload__dragger-main {
987
- display: block;
988
- font-size: var(--cd-font-size-regular);
989
- color: var(--cd-color-text-1);
1540
+ .cd-upload-disabled .cd-upload-drag-area:hover {
1541
+ background-color: var(--cd-color-upload-drag-area-bg);
990
1542
  }
991
- .cd-upload__dragger-sub {
992
- display: block;
993
- font-size: var(--cd-font-size-small);
994
- color: var(--cd-color-text-2);
1543
+ .cd-upload-disabled .cd-upload-drag-area-main-text,
1544
+ .cd-upload-disabled .cd-upload-drag-area-sub-text,
1545
+ .cd-upload-disabled .cd-upload-drag-area-icon {
1546
+ cursor: not-allowed;
1547
+ color: var(--cd-color-upload-drag-area-disabled-text);
995
1548
  }
996
1549
 
997
- /* --- image / picture-card 缩略图网格 --- */
998
- .cd-upload__grid {
999
- display: flex;
1000
- flex-wrap: wrap;
1001
- gap: var(--cd-spacing-tight);
1002
- margin: 0;
1003
- padding: 0;
1004
- list-style: none;
1005
- }
1006
- .cd-upload__card {
1007
- position: relative;
1008
- inline-size: 96px;
1009
- block-size: 96px;
1010
- border: 1px solid var(--cd-color-border);
1011
- border-radius: var(--cd-border-radius-medium);
1012
- overflow: hidden;
1013
- background: var(--cd-color-fill-0);
1014
- }
1015
- .cd-upload__card--error {
1016
- border-color: var(--cd-upload-item-color-error, var(--cd-color-danger));
1017
- }
1018
- .cd-upload__thumb-btn {
1550
+ .cd-upload-validate-message {
1551
+ flex-basis: 100%;
1552
+ flex-shrink: 0;
1019
1553
  display: block;
1020
- inline-size: 100%;
1021
- block-size: 100%;
1022
- padding: 0;
1023
- border: none;
1024
- background: transparent;
1025
- cursor: pointer;
1026
- }
1027
- .cd-upload__thumb-btn:focus-visible {
1028
- outline: none;
1029
- box-shadow: var(--cd-focus-ring);
1554
+ color: var(--cd-color-upload-file-card-fail-info-text);
1030
1555
  }
1031
- .cd-upload__thumb {
1556
+ .cd-upload-crop-body {
1032
1557
  inline-size: 100%;
1033
- block-size: 100%;
1034
- object-fit: cover;
1035
- display: block;
1036
- }
1037
- .cd-upload__thumb--placeholder {
1038
- background: var(--cd-color-fill-1);
1039
- }
1040
- .cd-upload__card-progress {
1041
- position: absolute;
1042
- inset-inline: var(--cd-spacing-extra-tight);
1043
- inset-block-end: var(--cd-spacing-extra-tight);
1044
- }
1045
- .cd-upload__card-overlay {
1046
- position: absolute;
1047
- inset-block-start: 0;
1048
- inset-inline: 0;
1049
- display: flex;
1050
- align-items: center;
1051
- gap: var(--cd-spacing-extra-tight);
1052
- padding: var(--cd-spacing-extra-tight);
1053
- background: linear-gradient(to bottom, rgba(0, 0, 0, 0.55), transparent);
1054
- opacity: 0;
1055
- transition: opacity var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
1056
- }
1057
- .cd-upload__card:hover .cd-upload__card-overlay,
1058
- .cd-upload__card:focus-within .cd-upload__card-overlay {
1059
- opacity: 1;
1060
- }
1061
- .cd-upload__card-name {
1062
- flex: 1 1 auto;
1063
- min-inline-size: 0;
1064
- overflow: hidden;
1065
- text-overflow: ellipsis;
1066
- white-space: nowrap;
1067
- color: #fff;
1068
- font-size: var(--cd-font-size-small);
1069
- }
1070
- .cd-upload__card-remove {
1071
- flex: 0 0 auto;
1072
- display: inline-flex;
1073
- align-items: center;
1074
- justify-content: center;
1075
- padding: 0;
1076
- inline-size: 1.25rem;
1077
- block-size: 1.25rem;
1078
- border: none;
1079
- background: transparent;
1080
- color: #fff;
1081
- cursor: pointer;
1082
- font-size: var(--cd-font-size-header-6);
1083
- line-height: 1;
1084
- }
1085
- .cd-upload__card-remove:focus-visible {
1086
- outline: none;
1087
- box-shadow: var(--cd-focus-ring);
1088
- }
1089
- @media (prefers-reduced-motion: reduce) {
1090
- .cd-upload__card-overlay {
1091
- transition: none;
1092
- }
1093
- .cd-upload__dragger {
1094
- transition: none;
1095
- }
1096
1558
  }
1097
1559
  </style>