@ai-group/chat-sdk 2.1.13 → 3.0.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.d.ts +9 -2
  2. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js +564 -10
  3. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js.map +2 -2
  4. package/dist/cjs/components/XAdkChatbot/components/FileGallery/index.d.ts +12 -0
  5. package/dist/cjs/components/XAdkChatbot/components/FileGallery/index.js +92 -0
  6. package/dist/cjs/components/XAdkChatbot/components/FileGallery/index.js.map +7 -0
  7. package/dist/cjs/components/XAdkChatbot/components/FileGallery/styles.d.ts +44 -0
  8. package/dist/cjs/components/XAdkChatbot/components/FileGallery/styles.js +137 -0
  9. package/dist/cjs/components/XAdkChatbot/components/FileGallery/styles.js.map +7 -0
  10. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -1
  11. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +41 -5
  12. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
  13. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +1 -0
  14. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js +14 -3
  15. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +2 -2
  16. package/dist/cjs/components/XAdkChatbot/index.d.ts +11 -1
  17. package/dist/cjs/components/XAdkChatbot/index.js +294 -108
  18. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  19. package/dist/cjs/components/XAdkChatbot/styles.d.ts +10 -0
  20. package/dist/cjs/components/XAdkChatbot/styles.js +67 -3
  21. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  22. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.d.ts +10 -0
  23. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js +394 -0
  24. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js.map +7 -0
  25. package/dist/cjs/components/XAdkProvider/compound/Chatbot.d.ts +30 -0
  26. package/dist/cjs/components/XAdkProvider/compound/Chatbot.js +64 -0
  27. package/dist/cjs/components/XAdkProvider/compound/Chatbot.js.map +7 -0
  28. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +26 -0
  29. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +199 -0
  30. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +7 -0
  31. package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.d.ts +8 -0
  32. package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js +117 -0
  33. package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js.map +7 -0
  34. package/dist/cjs/components/XAdkProvider/compound/FeedbackTags.d.ts +7 -0
  35. package/dist/cjs/components/XAdkProvider/compound/FeedbackTags.js +64 -0
  36. package/dist/cjs/components/XAdkProvider/compound/FeedbackTags.js.map +7 -0
  37. package/dist/cjs/components/XAdkProvider/compound/Header.d.ts +25 -0
  38. package/dist/cjs/components/XAdkProvider/compound/Header.js +70 -0
  39. package/dist/cjs/components/XAdkProvider/compound/Header.js.map +7 -0
  40. package/dist/cjs/components/XAdkProvider/compound/Messages.d.ts +17 -0
  41. package/dist/cjs/components/XAdkProvider/compound/Messages.js +70 -0
  42. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +7 -0
  43. package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +27 -0
  44. package/dist/cjs/components/XAdkProvider/compound/Sender.js +55 -0
  45. package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +7 -0
  46. package/dist/cjs/components/XAdkProvider/compound/Sidebar.d.ts +24 -0
  47. package/dist/cjs/components/XAdkProvider/compound/Sidebar.js +151 -0
  48. package/dist/cjs/components/XAdkProvider/compound/Sidebar.js.map +7 -0
  49. package/dist/cjs/components/XAdkProvider/compound/Welcome.d.ts +6 -0
  50. package/dist/cjs/components/XAdkProvider/compound/Welcome.js +60 -0
  51. package/dist/cjs/components/XAdkProvider/compound/Welcome.js.map +7 -0
  52. package/dist/cjs/components/XAdkProvider/compound/index.d.ts +17 -0
  53. package/dist/cjs/components/XAdkProvider/compound/index.js +55 -0
  54. package/dist/cjs/components/XAdkProvider/compound/index.js.map +7 -0
  55. package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +36 -0
  56. package/dist/cjs/components/XAdkProvider/compound/styles.js +49 -0
  57. package/dist/cjs/components/XAdkProvider/compound/styles.js.map +7 -0
  58. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.d.ts +30 -0
  59. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.js +40 -0
  60. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.js.map +7 -0
  61. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +35 -0
  62. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js +42 -0
  63. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +7 -0
  64. package/dist/cjs/components/XAdkProvider/context/SessionContext.d.ts +29 -0
  65. package/dist/cjs/components/XAdkProvider/context/SessionContext.js +40 -0
  66. package/dist/cjs/components/XAdkProvider/context/SessionContext.js.map +7 -0
  67. package/dist/cjs/components/XAdkProvider/context/index.d.ts +7 -0
  68. package/dist/cjs/components/XAdkProvider/context/index.js +28 -0
  69. package/dist/cjs/components/XAdkProvider/context/index.js.map +7 -0
  70. package/dist/cjs/components/XAdkProvider/index.d.ts +55 -0
  71. package/dist/cjs/components/XAdkProvider/index.js +221 -0
  72. package/dist/cjs/components/XAdkProvider/index.js.map +7 -0
  73. package/dist/cjs/components/{XAdkWebProvider → XAdkProvider}/styles.js +2 -1
  74. package/dist/cjs/components/XAdkProvider/styles.js.map +7 -0
  75. package/dist/cjs/components/XAdkSender/FileGallery.d.ts +8 -0
  76. package/dist/cjs/components/XAdkSender/FileGallery.js +381 -0
  77. package/dist/cjs/components/XAdkSender/FileGallery.js.map +7 -0
  78. package/dist/cjs/components/XAdkSender/index.js +95 -81
  79. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  80. package/dist/cjs/components/XAdkSender/styles.d.ts +0 -9
  81. package/dist/cjs/components/XAdkSender/styles.js +21 -150
  82. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  83. package/dist/cjs/components/XAiConversations/index.js +1 -1
  84. package/dist/cjs/components/XAiConversations/index.js.map +2 -2
  85. package/dist/cjs/components/XAiConversations/styles.js +5 -0
  86. package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
  87. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +6 -0
  88. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js +180 -0
  89. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +7 -0
  90. package/dist/cjs/components/XAiThoughtChain/index.d.ts +4 -0
  91. package/dist/cjs/components/XAiThoughtChain/index.js +155 -0
  92. package/dist/cjs/components/XAiThoughtChain/index.js.map +7 -0
  93. package/dist/cjs/components/XAiThoughtChain/styles.d.ts +60 -0
  94. package/dist/cjs/components/XAiThoughtChain/styles.js +195 -0
  95. package/dist/cjs/components/XAiThoughtChain/styles.js.map +7 -0
  96. package/dist/cjs/hooks/useADKChat.d.ts +9 -3
  97. package/dist/cjs/hooks/useADKChat.js +246 -182
  98. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  99. package/dist/cjs/index.d.ts +25 -9
  100. package/dist/cjs/index.js +37 -0
  101. package/dist/cjs/index.js.map +3 -3
  102. package/dist/cjs/styles/common.js +1 -1
  103. package/dist/cjs/styles/common.js.map +2 -2
  104. package/dist/cjs/types/ChatHook.d.ts +81 -0
  105. package/dist/cjs/types/ChatHook.js +18 -0
  106. package/dist/cjs/types/ChatHook.js.map +7 -0
  107. package/dist/cjs/types/XAdkChatbot.d.ts +80 -15
  108. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  109. package/dist/cjs/types/XAdkProvider.d.ts +10 -27
  110. package/dist/cjs/types/XAdkProvider.js.map +2 -2
  111. package/dist/cjs/types/XAdkSender.d.ts +18 -0
  112. package/dist/cjs/types/XAdkSender.js.map +1 -1
  113. package/dist/cjs/types/XAiConversations.d.ts +4 -2
  114. package/dist/cjs/types/XAiConversations.js.map +1 -1
  115. package/dist/cjs/types/XAiThoughtChain.d.ts +25 -0
  116. package/dist/cjs/types/XAiThoughtChain.js +18 -0
  117. package/dist/cjs/types/XAiThoughtChain.js.map +7 -0
  118. package/dist/cjs/types/index.d.ts +9 -8
  119. package/dist/cjs/types/index.js +2 -0
  120. package/dist/cjs/types/index.js.map +2 -2
  121. package/dist/cjs/utils/index.d.ts +2 -0
  122. package/dist/cjs/utils/index.js +11 -1
  123. package/dist/cjs/utils/index.js.map +2 -2
  124. package/dist/cjs/utils/parseAgentMessage.d.ts +81 -0
  125. package/dist/cjs/utils/parseAgentMessage.js +180 -0
  126. package/dist/cjs/utils/parseAgentMessage.js.map +7 -0
  127. package/dist/cjs/utils/umdEntry.d.ts +91 -0
  128. package/dist/cjs/utils/umdEntry.js +108 -6
  129. package/dist/cjs/utils/umdEntry.js.map +3 -3
  130. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.d.ts +9 -2
  131. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js +485 -8
  132. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js.map +1 -1
  133. package/dist/esm/components/XAdkChatbot/components/FileGallery/index.d.ts +12 -0
  134. package/dist/esm/components/XAdkChatbot/components/FileGallery/index.js +104 -0
  135. package/dist/esm/components/XAdkChatbot/components/FileGallery/index.js.map +1 -0
  136. package/dist/esm/components/XAdkChatbot/components/FileGallery/styles.d.ts +44 -0
  137. package/dist/esm/components/XAdkChatbot/components/FileGallery/styles.js +20 -0
  138. package/dist/esm/components/XAdkChatbot/components/FileGallery/styles.js.map +1 -0
  139. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -1
  140. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +17 -15
  141. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
  142. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +1 -0
  143. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js +7 -6
  144. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +1 -1
  145. package/dist/esm/components/XAdkChatbot/index.d.ts +11 -1
  146. package/dist/esm/components/XAdkChatbot/index.js +392 -174
  147. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  148. package/dist/esm/components/XAdkChatbot/styles.d.ts +10 -0
  149. package/dist/esm/components/XAdkChatbot/styles.js +23 -12
  150. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  151. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.d.ts +10 -0
  152. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js +338 -0
  153. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js.map +1 -0
  154. package/dist/esm/components/XAdkProvider/compound/Chatbot.d.ts +30 -0
  155. package/dist/esm/components/XAdkProvider/compound/Chatbot.js +47 -0
  156. package/dist/esm/components/XAdkProvider/compound/Chatbot.js.map +1 -0
  157. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +26 -0
  158. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +142 -0
  159. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -0
  160. package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.d.ts +8 -0
  161. package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js +122 -0
  162. package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js.map +1 -0
  163. package/dist/esm/components/XAdkProvider/compound/FeedbackTags.d.ts +7 -0
  164. package/dist/esm/components/XAdkProvider/compound/FeedbackTags.js +34 -0
  165. package/dist/esm/components/XAdkProvider/compound/FeedbackTags.js.map +1 -0
  166. package/dist/esm/components/XAdkProvider/compound/Header.d.ts +25 -0
  167. package/dist/esm/components/XAdkProvider/compound/Header.js +79 -0
  168. package/dist/esm/components/XAdkProvider/compound/Header.js.map +1 -0
  169. package/dist/esm/components/XAdkProvider/compound/Messages.d.ts +17 -0
  170. package/dist/esm/components/XAdkProvider/compound/Messages.js +53 -0
  171. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -0
  172. package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +27 -0
  173. package/dist/esm/components/XAdkProvider/compound/Sender.js +41 -0
  174. package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -0
  175. package/dist/esm/components/XAdkProvider/compound/Sidebar.d.ts +24 -0
  176. package/dist/esm/components/XAdkProvider/compound/Sidebar.js +142 -0
  177. package/dist/esm/components/XAdkProvider/compound/Sidebar.js.map +1 -0
  178. package/dist/esm/components/XAdkProvider/compound/Welcome.d.ts +6 -0
  179. package/dist/esm/components/XAdkProvider/compound/Welcome.js +36 -0
  180. package/dist/esm/components/XAdkProvider/compound/Welcome.js.map +1 -0
  181. package/dist/esm/components/XAdkProvider/compound/index.d.ts +17 -0
  182. package/dist/esm/components/XAdkProvider/compound/index.js +13 -0
  183. package/dist/esm/components/XAdkProvider/compound/index.js.map +1 -0
  184. package/dist/esm/components/XAdkProvider/compound/styles.d.ts +36 -0
  185. package/dist/esm/components/XAdkProvider/compound/styles.js +10 -0
  186. package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -0
  187. package/dist/esm/components/XAdkProvider/context/ChatActionContext.d.ts +30 -0
  188. package/dist/esm/components/XAdkProvider/context/ChatActionContext.js +23 -0
  189. package/dist/esm/components/XAdkProvider/context/ChatActionContext.js.map +1 -0
  190. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +35 -0
  191. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js +23 -0
  192. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -0
  193. package/dist/esm/components/XAdkProvider/context/SessionContext.d.ts +29 -0
  194. package/dist/esm/components/XAdkProvider/context/SessionContext.js +22 -0
  195. package/dist/esm/components/XAdkProvider/context/SessionContext.js.map +1 -0
  196. package/dist/esm/components/XAdkProvider/context/index.d.ts +7 -0
  197. package/dist/esm/components/XAdkProvider/context/index.js +9 -0
  198. package/dist/esm/components/XAdkProvider/context/index.js.map +1 -0
  199. package/dist/esm/components/XAdkProvider/index.d.ts +55 -0
  200. package/dist/esm/components/XAdkProvider/index.js +220 -0
  201. package/dist/esm/components/XAdkProvider/index.js.map +1 -0
  202. package/dist/esm/components/{XAdkWebProvider → XAdkProvider}/styles.js +2 -2
  203. package/dist/esm/components/XAdkProvider/styles.js.map +1 -0
  204. package/dist/esm/components/XAdkSender/FileGallery.d.ts +8 -0
  205. package/dist/esm/components/XAdkSender/FileGallery.js +236 -0
  206. package/dist/esm/components/XAdkSender/FileGallery.js.map +1 -0
  207. package/dist/esm/components/XAdkSender/index.js +92 -109
  208. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  209. package/dist/esm/components/XAdkSender/styles.d.ts +0 -9
  210. package/dist/esm/components/XAdkSender/styles.js +14 -31
  211. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  212. package/dist/esm/components/XAiConversations/index.js +1 -1
  213. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  214. package/dist/esm/components/XAiConversations/styles.js +2 -2
  215. package/dist/esm/components/XAiConversations/styles.js.map +1 -1
  216. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +6 -0
  217. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js +159 -0
  218. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +1 -0
  219. package/dist/esm/components/XAiThoughtChain/index.d.ts +4 -0
  220. package/dist/esm/components/XAiThoughtChain/index.js +180 -0
  221. package/dist/esm/components/XAiThoughtChain/index.js.map +1 -0
  222. package/dist/esm/components/XAiThoughtChain/styles.d.ts +60 -0
  223. package/dist/esm/components/XAiThoughtChain/styles.js +40 -0
  224. package/dist/esm/components/XAiThoughtChain/styles.js.map +1 -0
  225. package/dist/esm/hooks/useADKChat.d.ts +9 -3
  226. package/dist/esm/hooks/useADKChat.js +75 -54
  227. package/dist/esm/hooks/useADKChat.js.map +1 -1
  228. package/dist/esm/index.d.ts +25 -9
  229. package/dist/esm/index.js +28 -2
  230. package/dist/esm/index.js.map +1 -1
  231. package/dist/esm/styles/common.js +11 -11
  232. package/dist/esm/styles/common.js.map +1 -1
  233. package/dist/esm/types/ChatHook.d.ts +81 -0
  234. package/dist/esm/types/ChatHook.js +2 -0
  235. package/dist/esm/types/ChatHook.js.map +1 -0
  236. package/dist/esm/types/XAdkChatbot.d.ts +80 -15
  237. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  238. package/dist/esm/types/XAdkProvider.d.ts +10 -27
  239. package/dist/esm/types/XAdkProvider.js.map +1 -1
  240. package/dist/esm/types/XAdkSender.d.ts +18 -0
  241. package/dist/esm/types/XAdkSender.js.map +1 -1
  242. package/dist/esm/types/XAiConversations.d.ts +4 -2
  243. package/dist/esm/types/XAiConversations.js.map +1 -1
  244. package/dist/esm/types/XAiThoughtChain.d.ts +25 -0
  245. package/dist/esm/types/XAiThoughtChain.js +2 -0
  246. package/dist/esm/types/XAiThoughtChain.js.map +1 -0
  247. package/dist/esm/types/index.d.ts +9 -8
  248. package/dist/esm/types/index.js +1 -0
  249. package/dist/esm/types/index.js.map +1 -1
  250. package/dist/esm/utils/index.d.ts +2 -0
  251. package/dist/esm/utils/index.js +7 -0
  252. package/dist/esm/utils/index.js.map +1 -1
  253. package/dist/esm/utils/parseAgentMessage.d.ts +81 -0
  254. package/dist/esm/utils/parseAgentMessage.js +286 -0
  255. package/dist/esm/utils/parseAgentMessage.js.map +1 -0
  256. package/dist/esm/utils/umdEntry.d.ts +91 -0
  257. package/dist/esm/utils/umdEntry.js +154 -16
  258. package/dist/esm/utils/umdEntry.js.map +1 -1
  259. package/dist/umd/chat-sdk.min.css +1 -1
  260. package/dist/umd/chat-sdk.min.js +1 -1
  261. package/package.json +20 -11
  262. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +0 -7
  263. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +0 -160
  264. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +0 -7
  265. package/dist/cjs/components/XAdkWebProvider/index.d.ts +0 -4
  266. package/dist/cjs/components/XAdkWebProvider/index.js +0 -372
  267. package/dist/cjs/components/XAdkWebProvider/index.js.map +0 -7
  268. package/dist/cjs/components/XAdkWebProvider/styles.js.map +0 -7
  269. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +0 -7
  270. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +0 -158
  271. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +0 -1
  272. package/dist/esm/components/XAdkWebProvider/index.d.ts +0 -4
  273. package/dist/esm/components/XAdkWebProvider/index.js +0 -480
  274. package/dist/esm/components/XAdkWebProvider/index.js.map +0 -1
  275. package/dist/esm/components/XAdkWebProvider/styles.js.map +0 -1
  276. /package/dist/cjs/components/{XAdkWebProvider → XAdkProvider}/styles.d.ts +0 -0
  277. /package/dist/esm/components/{XAdkWebProvider → XAdkProvider}/styles.d.ts +0 -0
@@ -0,0 +1,381 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/XAdkSender/FileGallery.tsx
20
+ var FileGallery_exports = {};
21
+ __export(FileGallery_exports, {
22
+ default: () => FileGallery_default
23
+ });
24
+ module.exports = __toCommonJS(FileGallery_exports);
25
+ var import_antd = require("antd");
26
+ var import_icons = require("@ant-design/icons");
27
+ var import_css = require("@emotion/css");
28
+ var import_jsx_runtime = require("react/jsx-runtime");
29
+ var isImageFile = (file) => {
30
+ if (!file.type)
31
+ return false;
32
+ return file.type.startsWith("image/");
33
+ };
34
+ var getFileExtension = (filename) => {
35
+ const ext = filename.split(".").pop();
36
+ return ext ? ext.toLowerCase() : "";
37
+ };
38
+ var getFileIcon = (file) => {
39
+ const ext = getFileExtension(file.name);
40
+ if (ext === "pdf") {
41
+ return { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.FilePdfOutlined, {}), color: "#ff4d4f" };
42
+ }
43
+ if (["doc", "docx"].includes(ext)) {
44
+ return { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.FileWordOutlined, {}), color: "#1677ff" };
45
+ }
46
+ if (["xls", "xlsx", "csv"].includes(ext)) {
47
+ return { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.FileExcelOutlined, {}), color: "#22b35e" };
48
+ }
49
+ if (["ppt", "pptx"].includes(ext)) {
50
+ return { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.FilePptOutlined, {}), color: "#ff6e31" };
51
+ }
52
+ if (isImageFile(file)) {
53
+ return { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.FileImageOutlined, {}), color: "#8c8c8c" };
54
+ }
55
+ return { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.FileOutlined, {}), color: "#8c8c8c" };
56
+ };
57
+ var formatFileSize = (bytes) => {
58
+ if (bytes < 1024)
59
+ return bytes + " B";
60
+ if (bytes < 1024 * 1024)
61
+ return (bytes / 1024).toFixed(1) + " KB";
62
+ return (bytes / (1024 * 1024)).toFixed(1) + " MB";
63
+ };
64
+ var styles = {
65
+ container: import_css.css`
66
+ padding: 12px 0;
67
+ display: flex;
68
+ flex-direction: column;
69
+ gap: 12px;
70
+ `,
71
+ // 图片九宫格容器
72
+ imageGrid: import_css.css`
73
+ display: grid;
74
+ gap: 8px;
75
+ width: fit-content;
76
+ min-width: 80px;
77
+ max-width: 100%;
78
+ /* 默认3列布局 */
79
+ grid-template-columns: repeat(3, 1fr);
80
+
81
+ /* 单张图 */
82
+ &[data-count="1"] {
83
+ grid-template-columns: 1fr;
84
+ min-width: 100px;
85
+ max-width: 200px;
86
+ }
87
+
88
+ /* 2张、4张 -> 2列 */
89
+ &[data-count="2"],
90
+ &[data-count="4"] {
91
+ grid-template-columns: repeat(2, 1fr);
92
+ min-width: 180px;
93
+ max-width: 240px;
94
+ }
95
+
96
+ /* 3张、5-9张 -> 3列 */
97
+ &[data-count="3"],
98
+ &[data-count="5"],
99
+ &[data-count="6"],
100
+ &[data-count="7"],
101
+ &[data-count="8"],
102
+ &[data-count="9"] {
103
+ grid-template-columns: repeat(3, 1fr);
104
+ min-width: 260px;
105
+ max-width: 320px;
106
+ }
107
+ `,
108
+ imageItem: import_css.css`
109
+ position: relative;
110
+ width: 100%;
111
+ min-width: 80px;
112
+ padding-top: 100%; /* 1:1 正方形 */
113
+ height: 0;
114
+ overflow: hidden;
115
+ border-radius: 8px;
116
+ background-color: #f5f5f5;
117
+ border: 1px solid rgba(0, 0, 0, 0.06);
118
+
119
+ .ant-image {
120
+ position: absolute !important;
121
+ top: 0;
122
+ left: 0;
123
+ width: 100% !important;
124
+ height: 100% !important;
125
+ display: flex !important;
126
+ justify-content: center;
127
+ align-items: center;
128
+ }
129
+
130
+ img {
131
+ width: 100% !important;
132
+ height: 100% !important;
133
+ object-fit: cover !important;
134
+ display: block !important;
135
+ }
136
+ `,
137
+ imageOverlay: import_css.css`
138
+ position: absolute;
139
+ top: 0;
140
+ left: 0;
141
+ right: 0;
142
+ bottom: 0;
143
+ background: rgba(0, 0, 0, 0.05);
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ z-index: 10;
148
+ `,
149
+ removeBtn: import_css.css`
150
+ position: absolute;
151
+ top: 4px;
152
+ right: 4px;
153
+ width: 20px;
154
+ height: 20px;
155
+ border-radius: 50%;
156
+ background: rgba(0, 0, 0, 0.6);
157
+ color: #fff;
158
+ border: none;
159
+ display: flex;
160
+ align-items: center;
161
+ justify-content: center;
162
+ cursor: pointer;
163
+ z-index: 20;
164
+ padding: 0;
165
+ font-size: 10px;
166
+ transition: all 0.2s ease;
167
+
168
+ &:hover {
169
+ background: rgba(0, 0, 0, 0.8);
170
+ transform: scale(1.1);
171
+ }
172
+ `,
173
+ // 文件列表
174
+ fileList: import_css.css`
175
+ display: flex;
176
+ flex-wrap: wrap;
177
+ gap: 8px;
178
+ `,
179
+ fileCard: import_css.css`
180
+ position: relative;
181
+ display: flex;
182
+ align-items: center;
183
+ gap: 10px;
184
+ padding: 10px 12px;
185
+ background: #fafafa;
186
+ border: 1px solid #f0f0f0;
187
+ border-radius: 8px;
188
+ min-width: 200px;
189
+ max-width: 280px;
190
+ min-height: 64px;
191
+ transition: all 0.2s ease;
192
+
193
+ &:hover {
194
+ background: #f5f5f5;
195
+ border-color: #e0e0e0;
196
+ }
197
+ `,
198
+ // 图片缩略图容器
199
+ imageThumbnail: import_css.css`
200
+ position: relative;
201
+ width: 44px;
202
+ height: 44px;
203
+ flex-shrink: 0;
204
+ border-radius: 4px;
205
+ overflow: hidden;
206
+ background-color: #f5f5f5;
207
+ border: 1px solid rgba(0, 0, 0, 0.06);
208
+
209
+ .ant-image {
210
+ width: 100% !important;
211
+ height: 100% !important;
212
+ display: flex !important;
213
+ justify-content: center;
214
+ align-items: center;
215
+ }
216
+
217
+ img {
218
+ width: 100% !important;
219
+ height: 100% !important;
220
+ object-fit: cover !important;
221
+ display: block !important;
222
+ }
223
+ `,
224
+ fileIcon: import_css.css`
225
+ font-size: 24px;
226
+ flex-shrink: 0;
227
+ width: 44px;
228
+ height: 44px;
229
+ display: flex;
230
+ align-items: center;
231
+ justify-content: center;
232
+ `,
233
+ fileInfo: import_css.css`
234
+ flex: 1;
235
+ min-width: 0;
236
+ overflow: hidden;
237
+ `,
238
+ fileName: import_css.css`
239
+ font-size: 13px;
240
+ font-weight: 500;
241
+ color: #262626;
242
+ margin-bottom: 4px;
243
+ overflow: hidden;
244
+ text-overflow: ellipsis;
245
+ white-space: nowrap;
246
+ `,
247
+ fileSize: import_css.css`
248
+ font-size: 11px;
249
+ color: #8c8c8c;
250
+ `,
251
+ progress: import_css.css`
252
+ margin-top: 4px;
253
+
254
+ .ant-progress-inner {
255
+ height: 4px !important;
256
+ }
257
+
258
+ .ant-progress-bg {
259
+ height: 4px !important;
260
+ }
261
+ `,
262
+ fileRemoveBtn: import_css.css`
263
+ position: absolute;
264
+ top: -6px;
265
+ right: -6px;
266
+ width: 18px;
267
+ height: 18px;
268
+ border-radius: 50%;
269
+ background: rgba(0, 0, 0, 0.75);
270
+ color: #fff;
271
+ border: none;
272
+ display: flex;
273
+ align-items: center;
274
+ justify-content: center;
275
+ cursor: pointer;
276
+ z-index: 1;
277
+ padding: 0;
278
+ font-size: 10px;
279
+ transition: all 0.2s ease;
280
+
281
+ &:hover {
282
+ background: rgba(0, 0, 0, 0.9);
283
+ transform: scale(1.1);
284
+ }
285
+
286
+ &:disabled {
287
+ opacity: 0.5;
288
+ cursor: not-allowed;
289
+ }
290
+ `
291
+ };
292
+ var FileGallery = ({ files, onRemove }) => {
293
+ if (files.length === 0)
294
+ return null;
295
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.container, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileList, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Image.PreviewGroup, { children: files.map((file) => {
296
+ var _a, _b;
297
+ const isImage = isImageFile(file);
298
+ if (isImage) {
299
+ const url = ((_a = file.response) == null ? void 0 : _a.fileUrl) || ((_b = file.response) == null ? void 0 : _b.tempUrl) || file.tempUrl || (file.file ? URL.createObjectURL(file.file) : "");
300
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.fileCard, children: [
301
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.imageThumbnail, children: [
302
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
303
+ import_antd.Image,
304
+ {
305
+ src: url,
306
+ alt: file.name,
307
+ fallback: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
308
+ preview: {
309
+ src: url
310
+ }
311
+ }
312
+ ),
313
+ file.status === "uploading" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.imageOverlay, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
314
+ import_antd.Progress,
315
+ {
316
+ type: "circle",
317
+ percent: file.progress,
318
+ size: 30,
319
+ strokeColor: "#1677ff"
320
+ }
321
+ ) })
322
+ ] }),
323
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.fileInfo, children: [
324
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: file.name, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileName, children: file.name.length > 15 ? `${file.name.substring(0, 15)}...` : file.name }) }),
325
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileSize, children: formatFileSize(file.size) })
326
+ ] }),
327
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
328
+ "button",
329
+ {
330
+ className: styles.fileRemoveBtn,
331
+ onClick: () => onRemove(file.id),
332
+ disabled: file.status === "uploading",
333
+ "aria-label": "删除文件",
334
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CloseOutlined, {})
335
+ }
336
+ )
337
+ ] }, file.id);
338
+ } else {
339
+ const { icon, color } = getFileIcon(file);
340
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.fileCard, children: [
341
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileIcon, style: { color }, children: icon }),
342
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.fileInfo, children: [
343
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: file.name, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileName, children: file.name.length > 15 ? `${file.name.substring(0, 15)}...` : file.name }) }),
344
+ file.status === "uploading" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
345
+ import_antd.Progress,
346
+ {
347
+ percent: file.progress,
348
+ size: "small",
349
+ showInfo: false,
350
+ strokeColor: "#1677ff",
351
+ className: styles.progress
352
+ }
353
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileSize, children: formatFileSize(file.size) }),
354
+ file.status === "error" && file.errorMessage && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
355
+ "div",
356
+ {
357
+ style: {
358
+ fontSize: "11px",
359
+ color: "#ff4d4f",
360
+ marginTop: "2px"
361
+ },
362
+ children: file.errorMessage
363
+ }
364
+ )
365
+ ] }),
366
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
367
+ "button",
368
+ {
369
+ className: styles.fileRemoveBtn,
370
+ onClick: () => onRemove(file.id),
371
+ disabled: file.status === "uploading",
372
+ "aria-label": "删除文件",
373
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CloseOutlined, {})
374
+ }
375
+ )
376
+ ] }, file.id);
377
+ }
378
+ }) }) }) });
379
+ };
380
+ var FileGallery_default = FileGallery;
381
+ //# sourceMappingURL=FileGallery.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/XAdkSender/FileGallery.tsx"],
4
+ "sourcesContent": ["import React from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n} from \"@ant-design/icons\";\nimport { LocalFile } from \"../../types/XAdkSender\";\nimport { css } from \"@emotion/css\";\n\ninterface FileGalleryProps {\n files: LocalFile[];\n onRemove: (id: string) => void;\n}\n\n// 判断是否是图片文件\nconst isImageFile = (file: LocalFile): boolean => {\n if (!file.type) return false;\n return file.type.startsWith(\"image/\");\n};\n\n// 获取文件扩展名\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\n// 获取文件图标和颜色\nconst getFileIcon = (\n file: LocalFile,\n): { icon: React.ReactNode; color: string } => {\n const ext = getFileExtension(file.name);\n\n // PDF\n if (ext === \"pdf\") {\n return { icon: <FilePdfOutlined />, color: \"#ff4d4f\" };\n }\n\n // Word\n if ([\"doc\", \"docx\"].includes(ext)) {\n return { icon: <FileWordOutlined />, color: \"#1677ff\" };\n }\n\n // Excel\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) {\n return { icon: <FileExcelOutlined />, color: \"#22b35e\" };\n }\n\n // PPT\n if ([\"ppt\", \"pptx\"].includes(ext)) {\n return { icon: <FilePptOutlined />, color: \"#ff6e31\" };\n }\n\n // 图片\n if (isImageFile(file)) {\n return { icon: <FileImageOutlined />, color: \"#8c8c8c\" };\n }\n\n // 默认\n return { icon: <FileOutlined />, color: \"#8c8c8c\" };\n};\n\n// 格式化文件大小\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst styles = {\n container: css`\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n `,\n\n // 图片九宫格容器\n imageGrid: css`\n display: grid;\n gap: 8px;\n width: fit-content;\n min-width: 80px;\n max-width: 100%;\n /* 默认3列布局 */\n grid-template-columns: repeat(3, 1fr);\n\n /* 单张图 */\n &[data-count=\"1\"] {\n grid-template-columns: 1fr;\n min-width: 100px;\n max-width: 200px;\n }\n\n /* 2张、4张 -> 2列 */\n &[data-count=\"2\"],\n &[data-count=\"4\"] {\n grid-template-columns: repeat(2, 1fr);\n min-width: 180px;\n max-width: 240px;\n }\n\n /* 3张、5-9张 -> 3列 */\n &[data-count=\"3\"],\n &[data-count=\"5\"],\n &[data-count=\"6\"],\n &[data-count=\"7\"],\n &[data-count=\"8\"],\n &[data-count=\"9\"] {\n grid-template-columns: repeat(3, 1fr);\n min-width: 260px;\n max-width: 320px;\n }\n `,\n\n imageItem: css`\n position: relative;\n width: 100%;\n min-width: 80px;\n padding-top: 100%; /* 1:1 正方形 */\n height: 0;\n overflow: hidden;\n border-radius: 8px;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n\n .ant-image {\n position: absolute !important;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n justify-content: center;\n align-items: center;\n }\n\n img {\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n display: block !important;\n }\n `,\n\n imageOverlay: css`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.05);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n `,\n\n removeBtn: css`\n position: absolute;\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 20;\n padding: 0;\n font-size: 10px;\n transition: all 0.2s ease;\n\n &:hover {\n background: rgba(0, 0, 0, 0.8);\n transform: scale(1.1);\n }\n `,\n\n // 文件列表\n fileList: css`\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n `,\n\n fileCard: css`\n position: relative;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n border-radius: 8px;\n min-width: 200px;\n max-width: 280px;\n min-height: 64px;\n transition: all 0.2s ease;\n\n &:hover {\n background: #f5f5f5;\n border-color: #e0e0e0;\n }\n `,\n\n // 图片缩略图容器\n imageThumbnail: css`\n position: relative;\n width: 44px;\n height: 44px;\n flex-shrink: 0;\n border-radius: 4px;\n overflow: hidden;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n\n .ant-image {\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n justify-content: center;\n align-items: center;\n }\n\n img {\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n display: block !important;\n }\n `,\n\n fileIcon: css`\n font-size: 24px;\n flex-shrink: 0;\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n\n fileInfo: css`\n flex: 1;\n min-width: 0;\n overflow: hidden;\n `,\n\n fileName: css`\n font-size: 13px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n\n fileSize: css`\n font-size: 11px;\n color: #8c8c8c;\n `,\n\n progress: css`\n margin-top: 4px;\n\n .ant-progress-inner {\n height: 4px !important;\n }\n\n .ant-progress-bg {\n height: 4px !important;\n }\n `,\n\n fileRemoveBtn: css`\n position: absolute;\n top: -6px;\n right: -6px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.75);\n color: #fff;\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 1;\n padding: 0;\n font-size: 10px;\n transition: all 0.2s ease;\n\n &:hover {\n background: rgba(0, 0, 0, 0.9);\n transform: scale(1.1);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `,\n};\n\nconst FileGallery: React.FC<FileGalleryProps> = ({ files, onRemove }) => {\n if (files.length === 0) return null;\n\n // 调试日志\n // if (process.env.NODE_ENV === \"development\") {\n // console.log(\n // \"[FileGallery] Rendering files:\",\n // files.map((f) => ({\n // id: f.id,\n // name: f.name,\n // type: f.type,\n // status: f.status,\n // hasFile: !!f.file,\n // response: f.response,\n // })),\n // );\n // }\n\n return (\n <div className={styles.container}>\n {/* 统一的文件列表 */}\n <div className={styles.fileList}>\n <Image.PreviewGroup>\n {files.map((file) => {\n const isImage = isImageFile(file);\n\n if (isImage) {\n // 图片卡片\n const url =\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n (file.file ? URL.createObjectURL(file.file) : \"\");\n\n // if (process.env.NODE_ENV === 'development') {\n // console.log('[FileGallery] Image URL for', file.name, ':', {\n // url,\n // 'response.fileUrl': file.response?.fileUrl,\n // 'response.tempUrl': file.response?.tempUrl,\n // 'tempUrl': file.tempUrl,\n // 'hasFile': !!file.file,\n // });\n // }\n\n return (\n <div key={file.id} className={styles.fileCard}>\n {/* 图片缩略图 */}\n <div className={styles.imageThumbnail}>\n <Image\n src={url}\n alt={file.name}\n fallback=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n preview={{\n src: url,\n }}\n />\n\n {/* 上传进度遮罩 */}\n {file.status === \"uploading\" && (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n )}\n </div>\n\n {/* 文件信息 */}\n <div className={styles.fileInfo}>\n <Tooltip title={file.name}>\n <div className={styles.fileName}>\n {file.name.length > 15\n ? `${file.name.substring(0, 15)}...`\n : file.name}\n </div>\n </Tooltip>\n <div className={styles.fileSize}>\n {formatFileSize(file.size)}\n </div>\n </div>\n\n {/* 删除按钮 */}\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(file.id)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n </div>\n );\n } else {\n // 文件卡片\n const { icon, color } = getFileIcon(file);\n\n return (\n <div key={file.id} className={styles.fileCard}>\n <div className={styles.fileIcon} style={{ color }}>\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={file.name}>\n <div className={styles.fileName}>\n {file.name.length > 15\n ? `${file.name.substring(0, 15)}...`\n : file.name}\n </div>\n </Tooltip>\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={styles.progress}\n />\n ) : (\n <div className={styles.fileSize}>\n {formatFileSize(file.size)}\n </div>\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{\n fontSize: \"11px\",\n color: \"#ff4d4f\",\n marginTop: \"2px\",\n }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(file.id)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n </div>\n );\n }\n })}\n </Image.PreviewGroup>\n </div>\n </div>\n );\n};\n\nexport default FileGallery;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
 
19
29
  // src/components/XAdkSender/index.tsx
@@ -26,14 +36,13 @@ var import_react = require("react");
26
36
  var import_antd = require("antd");
27
37
  var import_icons = require("@ant-design/icons");
28
38
  var import_styles = require("./styles");
39
+ var import_FileGallery = __toESM(require("./FileGallery"));
29
40
  var import_jsx_runtime = require("react/jsx-runtime");
30
- var FILE_ICONS = {
31
- // ... 保持不变
32
- };
33
41
  var XAdkSender = ({
34
42
  clearBtnShow = true,
35
43
  allowUpload = false,
36
44
  loading = false,
45
+ disabled = false,
37
46
  uploadRequest = () => {
38
47
  },
39
48
  onClear,
@@ -43,7 +52,11 @@ var XAdkSender = ({
43
52
  onFilesChange,
44
53
  maxFileSize = 10,
45
54
  allowedFileTypes = ["image/*", "application/pdf", "text/plain"],
46
- maxFiles = 5
55
+ maxFiles = 5,
56
+ suffix,
57
+ header,
58
+ prefix,
59
+ footer
47
60
  }) => {
48
61
  const styles = (0, import_styles.useStyles)();
49
62
  const [value, setValue] = (0, import_react.useState)("");
@@ -55,16 +68,6 @@ var XAdkSender = ({
55
68
  const generateId = () => {
56
69
  return Date.now().toString(36) + Math.random().toString(36).substr(2);
57
70
  };
58
- const getFileIcon = (fileType) => {
59
- return FILE_ICONS[fileType] || FILE_ICONS.default;
60
- };
61
- const formatFileSize = (bytes) => {
62
- if (bytes < 1024)
63
- return bytes + " Bytes";
64
- if (bytes < 1024 * 1024)
65
- return (bytes / 1024).toFixed(1) + " KB";
66
- return (bytes / (1024 * 1024)).toFixed(1) + " MB";
67
- };
68
71
  const checkFileType = (file) => {
69
72
  if (!allowedFileTypes.length)
70
73
  return true;
@@ -301,34 +304,80 @@ var XAdkSender = ({
301
304
  const renderFileList = () => {
302
305
  if (files.length === 0)
303
306
  return null;
304
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileListArea, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileList, children: files.map((file) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.fileCard, children: [
305
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileIcon, children: getFileIcon(file.type) }),
306
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.fileInfo, children: [
307
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileName, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: file.name, children: file.name.length > 15 ? `${file.name.substring(0, 15)}...` : file.name }) }),
308
- file.status === "uploading" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.uploadProgress, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
309
- import_antd.Progress,
310
- {
311
- percent: file.progress,
312
- size: "small",
313
- showInfo: false,
314
- strokeColor: "#1890ff"
315
- }
316
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.fileSize, children: formatFileSize(file.size) })
317
- ] }),
318
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
307
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
308
+ import_FileGallery.default,
309
+ {
310
+ files,
311
+ onRemove: handleRemoveFile
312
+ }
313
+ );
314
+ };
315
+ const containerClass = `${styles.container} ${isDragOver ? "drag-over" : ""}`;
316
+ const uploading = files.some((f) => f.status === "uploading");
317
+ const isDisabled = disabled || uploading || loading;
318
+ const SendButton = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: loading ? "停止生成" : "发送消息", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
319
+ "button",
320
+ {
321
+ className: `${styles.iconButton} ${styles.sendButton} ${loading ? "stop" : ""}`,
322
+ onClick: loading ? onStop : handleSubmit,
323
+ disabled: uploading || disabled,
324
+ "aria-label": loading ? "停止生成" : "发送消息",
325
+ ...props,
326
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.LoadingOutlined, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ArrowUpOutlined, {})
327
+ }
328
+ ) });
329
+ const UploadButton = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: "上传文件", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
330
+ "button",
331
+ {
332
+ className: `${styles.iconButton} ${styles.uploadButton}`,
333
+ onClick: triggerFileSelect,
334
+ disabled: isDisabled,
335
+ "aria-label": "上传文件",
336
+ ...props,
337
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.PaperClipOutlined, {})
338
+ }
339
+ ) });
340
+ const ClearButton = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
341
+ import_antd.Popconfirm,
342
+ {
343
+ title: "确定要清空聊天记录吗?",
344
+ onConfirm: onClear,
345
+ placement: "top",
346
+ okText: "确定",
347
+ cancelText: "取消",
348
+ disabled: isDisabled,
349
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
319
350
  "button",
320
351
  {
321
- className: styles.fileRemoveBtn,
322
- onClick: () => handleRemoveFile(file.id),
323
- disabled: file.status === "uploading",
324
- "aria-label": "删除文件",
325
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CloseOutlined, { style: { fontSize: 8 } })
352
+ className: `${styles.iconButton} ${styles.clearButton}`,
353
+ disabled: isDisabled,
354
+ "aria-label": "清空聊天记录",
355
+ ...props,
356
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ClearOutlined, {})
326
357
  }
327
358
  )
328
- ] }, file.id)) }) });
359
+ }
360
+ );
361
+ const actionsComponents = {
362
+ SendButton,
363
+ UploadButton,
364
+ ClearButton
329
365
  };
330
- const containerClass = `${styles.container} ${isDragOver ? "drag-over" : ""}`;
331
- const uploading = files.some((f) => f.status === "uploading");
366
+ const renderSlot = (slot, oriNode) => {
367
+ if (slot === false)
368
+ return null;
369
+ if (slot === void 0)
370
+ return oriNode;
371
+ if (typeof slot === "function") {
372
+ const result = slot(oriNode, { components: actionsComponents });
373
+ return result === false ? null : result;
374
+ }
375
+ return slot;
376
+ };
377
+ const defaultSuffix = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.buttonGroup, children: [
378
+ allowUpload && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UploadButton, {}),
379
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SendButton, {})
380
+ ] });
332
381
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
333
382
  "div",
334
383
  {
@@ -338,6 +387,7 @@ var XAdkSender = ({
338
387
  onDragLeave: allowUpload ? handleDragLeave : void 0,
339
388
  onDrop: allowUpload ? handleDrop : void 0,
340
389
  children: [
390
+ renderSlot(header, false),
341
391
  allowUpload && files.length > 0 && renderFileList(),
342
392
  allowUpload && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
343
393
  "input",
@@ -357,27 +407,9 @@ var XAdkSender = ({
357
407
  ),
358
408
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.mainArea, children: [
359
409
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.senderWrap, children: [
360
- clearBtnShow && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
361
- import_antd.Popconfirm,
362
- {
363
- title: "确定要清空聊天记录吗?",
364
- onConfirm: onClear,
365
- placement: "top",
366
- okText: "确定",
367
- cancelText: "取消",
368
- disabled: uploading || loading,
369
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
370
- "button",
371
- {
372
- className: `${styles.iconButton} ${styles.clearButton}`,
373
- disabled: uploading || loading,
374
- "aria-label": "清空聊天记录",
375
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ClearOutlined, {})
376
- }
377
- )
378
- }
379
- ),
410
+ clearBtnShow && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ClearButton, {}),
380
411
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.inputAndButtons, children: [
412
+ renderSlot(prefix, false),
381
413
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.textAreaWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
382
414
  import_antd.Input.TextArea,
383
415
  {
@@ -386,7 +418,7 @@ var XAdkSender = ({
386
418
  onChange: handleInputChange,
387
419
  onKeyDown: handleKeyDown,
388
420
  placeholder: "请输入消息...",
389
- disabled: uploading || loading,
421
+ disabled: isDisabled,
390
422
  autoSize: { minRows: 1, maxRows: 4 },
391
423
  style: {
392
424
  border: "none",
@@ -396,31 +428,13 @@ var XAdkSender = ({
396
428
  }
397
429
  }
398
430
  ) }),
399
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.buttonGroup, children: [
400
- allowUpload && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: "上传文件", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
401
- "button",
402
- {
403
- className: `${styles.iconButton} ${styles.uploadButton}`,
404
- onClick: triggerFileSelect,
405
- disabled: uploading || loading,
406
- "aria-label": "上传文件",
407
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.PaperClipOutlined, {})
408
- }
409
- ) }),
410
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: loading ? "停止生成" : "发送消息", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
411
- "button",
412
- {
413
- className: `${styles.iconButton} ${styles.sendButton} ${loading ? "stop" : ""}`,
414
- onClick: loading ? onStop : handleSubmit,
415
- disabled: uploading,
416
- "aria-label": loading ? "停止生成" : "发送消息",
417
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.LoadingOutlined, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ArrowUpOutlined, {})
418
- }
419
- ) })
420
- ] })
431
+ renderSlot(suffix, defaultSuffix)
421
432
  ] })
422
433
  ] }),
423
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.tip, children: "内容由AI生成,无法确保真实准确,仅供参考" })
434
+ renderSlot(
435
+ footer,
436
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.tip, children: "内容由AI生成,无法确保真实准确,仅供参考" })
437
+ )
424
438
  ] })
425
439
  ]
426
440
  }