@ai-group/chat-sdk 3.7.0 → 3.7.1-alpha10

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 (235) hide show
  1. package/README.md +22 -0
  2. package/dist/cjs/components/FileGallery/index.js +59 -40
  3. package/dist/cjs/components/FileGallery/index.js.map +2 -2
  4. package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
  5. package/dist/cjs/components/FileGallery/styles.js +78 -0
  6. package/dist/cjs/components/FileGallery/styles.js.map +2 -2
  7. package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
  8. package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
  9. package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
  10. package/dist/cjs/components/Sources/index.d.ts +5 -0
  11. package/dist/cjs/components/Sources/index.js +162 -0
  12. package/dist/cjs/components/Sources/index.js.map +7 -0
  13. package/dist/cjs/components/Sources/styles.d.ts +59 -0
  14. package/dist/cjs/components/Sources/styles.js +179 -0
  15. package/dist/cjs/components/Sources/styles.js.map +7 -0
  16. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
  17. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +232 -22
  18. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  19. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  20. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +83 -0
  21. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  22. package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
  23. package/dist/cjs/components/XAdkChatbot/index.js +75 -8
  24. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  25. package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
  26. package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
  27. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
  28. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +30 -12
  29. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
  30. package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -1
  31. package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
  32. package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
  33. package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
  34. package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
  35. package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
  36. package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
  37. package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
  38. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  39. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
  40. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
  41. package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
  42. package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
  43. package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
  44. package/dist/cjs/components/XAdkProvider/index.js +11 -10
  45. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  46. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +31 -0
  47. package/dist/cjs/components/XAdkSender/InlineTagInput.js +759 -0
  48. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
  49. package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
  50. package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
  51. package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
  52. package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
  53. package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
  54. package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
  55. package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
  56. package/dist/cjs/components/XAdkSender/index.js +422 -150
  57. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  58. package/dist/cjs/components/XAdkSender/styles.d.ts +19 -0
  59. package/dist/cjs/components/XAdkSender/styles.js +225 -5
  60. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  61. package/dist/cjs/components/XAiConversations/styles.js +11 -1
  62. package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
  63. package/dist/cjs/hooks/useADKChat.js +5 -1
  64. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  65. package/dist/cjs/index.d.ts +8 -3
  66. package/dist/cjs/index.js +44 -10
  67. package/dist/cjs/index.js.map +3 -3
  68. package/dist/cjs/presets/base.d.ts +6 -0
  69. package/dist/cjs/presets/base.js +50 -0
  70. package/dist/cjs/presets/base.js.map +7 -0
  71. package/dist/cjs/presets/define.d.ts +11 -0
  72. package/dist/cjs/presets/define.js +58 -0
  73. package/dist/cjs/presets/define.js.map +7 -0
  74. package/dist/cjs/presets/index.d.ts +3 -0
  75. package/dist/cjs/presets/index.js +28 -0
  76. package/dist/cjs/presets/index.js.map +7 -0
  77. package/dist/cjs/presets/runtime.d.ts +22 -0
  78. package/dist/cjs/presets/runtime.js +75 -0
  79. package/dist/cjs/presets/runtime.js.map +7 -0
  80. package/dist/cjs/presets/xgroup/index.d.ts +5 -0
  81. package/dist/cjs/presets/xgroup/index.js +10 -0
  82. package/dist/cjs/presets/xgroup/index.js.map +2 -2
  83. package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
  84. package/dist/cjs/presets/xgroup/knowledgeReference.js +162 -0
  85. package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
  86. package/dist/cjs/presets/xgroup/preset.d.ts +1 -13
  87. package/dist/cjs/presets/xgroup/preset.js +16 -37
  88. package/dist/cjs/presets/xgroup/preset.js.map +2 -2
  89. package/dist/cjs/presets/xgroup/strategies.d.ts +5 -4
  90. package/dist/cjs/presets/xgroup/strategies.js +11 -15
  91. package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
  92. package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
  93. package/dist/cjs/presets/xgroup/webReference.js +85 -0
  94. package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
  95. package/dist/cjs/types/ChatStrategies.d.ts +11 -2
  96. package/dist/cjs/types/ChatStrategies.js.map +1 -1
  97. package/dist/cjs/types/FileGallery.d.ts +3 -0
  98. package/dist/cjs/types/FileGallery.js.map +1 -1
  99. package/dist/cjs/types/Sources.d.ts +30 -0
  100. package/dist/cjs/types/Sources.js +18 -0
  101. package/dist/cjs/types/Sources.js.map +7 -0
  102. package/dist/cjs/types/XAdkChatbot.d.ts +33 -0
  103. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  104. package/dist/cjs/types/XAdkSender.d.ts +154 -8
  105. package/dist/cjs/types/XAdkSender.js.map +1 -1
  106. package/dist/cjs/types/index.d.ts +1 -0
  107. package/dist/cjs/types/index.js +3 -1
  108. package/dist/cjs/types/index.js.map +2 -2
  109. package/dist/cjs/utils/index.d.ts +1 -0
  110. package/dist/cjs/utils/index.js +3 -1
  111. package/dist/cjs/utils/index.js.map +2 -2
  112. package/dist/cjs/utils/markdownResource.d.ts +14 -0
  113. package/dist/cjs/utils/markdownResource.js +131 -0
  114. package/dist/cjs/utils/markdownResource.js.map +7 -0
  115. package/dist/esm/components/FileGallery/index.js +22 -16
  116. package/dist/esm/components/FileGallery/index.js.map +1 -1
  117. package/dist/esm/components/FileGallery/styles.d.ts +7 -0
  118. package/dist/esm/components/FileGallery/styles.js +24 -17
  119. package/dist/esm/components/FileGallery/styles.js.map +1 -1
  120. package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
  121. package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
  122. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
  123. package/dist/esm/components/Sources/index.d.ts +5 -0
  124. package/dist/esm/components/Sources/index.js +127 -0
  125. package/dist/esm/components/Sources/index.js.map +1 -0
  126. package/dist/esm/components/Sources/styles.d.ts +59 -0
  127. package/dist/esm/components/Sources/styles.js +34 -0
  128. package/dist/esm/components/Sources/styles.js.map +1 -0
  129. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
  130. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +190 -11
  131. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  132. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  133. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
  134. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  135. package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
  136. package/dist/esm/components/XAdkChatbot/index.js +55 -10
  137. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  138. package/dist/esm/components/XAdkChatbot/styles.js +1 -1
  139. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  140. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
  141. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +40 -17
  142. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
  143. package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -1
  144. package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -6
  145. package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
  146. package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
  147. package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
  148. package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
  149. package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
  150. package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
  151. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  152. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
  153. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
  154. package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
  155. package/dist/esm/components/XAdkProvider/context/index.js +1 -0
  156. package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
  157. package/dist/esm/components/XAdkProvider/index.js +7 -3
  158. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  159. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +31 -0
  160. package/dist/esm/components/XAdkSender/InlineTagInput.js +734 -0
  161. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
  162. package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
  163. package/dist/esm/components/XAdkSender/InputTags.js +37 -0
  164. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
  165. package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
  166. package/dist/esm/components/XAdkSender/QuickList.js +96 -0
  167. package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
  168. package/dist/esm/components/XAdkSender/index.d.ts +1 -6
  169. package/dist/esm/components/XAdkSender/index.js +476 -143
  170. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  171. package/dist/esm/components/XAdkSender/styles.d.ts +19 -0
  172. package/dist/esm/components/XAdkSender/styles.js +34 -12
  173. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  174. package/dist/esm/components/XAiConversations/styles.js +3 -3
  175. package/dist/esm/components/XAiConversations/styles.js.map +1 -1
  176. package/dist/esm/hooks/useADKChat.js +8 -2
  177. package/dist/esm/hooks/useADKChat.js.map +1 -1
  178. package/dist/esm/index.d.ts +8 -3
  179. package/dist/esm/index.js +7 -4
  180. package/dist/esm/index.js.map +1 -1
  181. package/dist/esm/presets/base.d.ts +6 -0
  182. package/dist/esm/presets/base.js +28 -0
  183. package/dist/esm/presets/base.js.map +1 -0
  184. package/dist/esm/presets/define.d.ts +11 -0
  185. package/dist/esm/presets/define.js +33 -0
  186. package/dist/esm/presets/define.js.map +1 -0
  187. package/dist/esm/presets/index.d.ts +3 -0
  188. package/dist/esm/presets/index.js +4 -0
  189. package/dist/esm/presets/index.js.map +1 -0
  190. package/dist/esm/presets/runtime.d.ts +22 -0
  191. package/dist/esm/presets/runtime.js +45 -0
  192. package/dist/esm/presets/runtime.js.map +1 -0
  193. package/dist/esm/presets/xgroup/index.d.ts +5 -0
  194. package/dist/esm/presets/xgroup/index.js +6 -0
  195. package/dist/esm/presets/xgroup/index.js.map +1 -1
  196. package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
  197. package/dist/esm/presets/xgroup/knowledgeReference.js +95 -0
  198. package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
  199. package/dist/esm/presets/xgroup/preset.d.ts +1 -13
  200. package/dist/esm/presets/xgroup/preset.js +9 -29
  201. package/dist/esm/presets/xgroup/preset.js.map +1 -1
  202. package/dist/esm/presets/xgroup/strategies.d.ts +5 -4
  203. package/dist/esm/presets/xgroup/strategies.js +8 -20
  204. package/dist/esm/presets/xgroup/strategies.js.map +1 -1
  205. package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
  206. package/dist/esm/presets/xgroup/webReference.js +46 -0
  207. package/dist/esm/presets/xgroup/webReference.js.map +1 -0
  208. package/dist/esm/types/ChatStrategies.d.ts +11 -2
  209. package/dist/esm/types/ChatStrategies.js.map +1 -1
  210. package/dist/esm/types/FileGallery.d.ts +3 -0
  211. package/dist/esm/types/FileGallery.js.map +1 -1
  212. package/dist/esm/types/Sources.d.ts +30 -0
  213. package/dist/esm/types/Sources.js +2 -0
  214. package/dist/esm/types/Sources.js.map +1 -0
  215. package/dist/esm/types/XAdkChatbot.d.ts +33 -0
  216. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  217. package/dist/esm/types/XAdkSender.d.ts +154 -8
  218. package/dist/esm/types/XAdkSender.js.map +1 -1
  219. package/dist/esm/types/index.d.ts +1 -0
  220. package/dist/esm/types/index.js +1 -0
  221. package/dist/esm/types/index.js.map +1 -1
  222. package/dist/esm/utils/index.d.ts +1 -0
  223. package/dist/esm/utils/index.js +1 -0
  224. package/dist/esm/utils/index.js.map +1 -1
  225. package/dist/esm/utils/markdownResource.d.ts +14 -0
  226. package/dist/esm/utils/markdownResource.js +101 -0
  227. package/dist/esm/utils/markdownResource.js.map +1 -0
  228. package/dist/umd/chat-sdk.min.js +1 -1
  229. package/package.json +6 -1
  230. package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
  231. package/dist/cjs/components/XAdkSender/Switch.js +0 -95
  232. package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
  233. package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
  234. package/dist/esm/components/XAdkSender/Switch.js +0 -53
  235. package/dist/esm/components/XAdkSender/Switch.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","prologue","_templateObject3","suggestion","_templateObject4","suggestContent","_templateObject5","userMsg","_templateObject6","userContainer","_templateObject7","card","_templateObject8","botMsg","_templateObject9","emptyWrapper","_templateObject10","welcomeWrapper","_templateObject11","welcomeIcon","_templateObject12","welcomeTitle","_templateObject13","welcomeDesc","_templateObject14","suggestionWrapper","_templateObject15","successBadge","_templateObject16","fileSection","_templateObject17","fileHeader","_templateObject18","metaFooter","_templateObject19","actionIcons","_templateObject20","fnCall","_templateObject21","confirm","_templateObject22","footer","_templateObject23","sender","_templateObject24","senderWrap","_templateObject25","tip","_templateObject26","input","_templateObject27"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n min-height: 300px;\n height: 100%;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n `,\n\n list: css`\n flex: 1;\n margin-top: 16px;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n `,\n\n prologue: css`\n margin-bottom: 12px;\n `,\n\n suggestion: css`\n margin-bottom: 12px;\n `,\n\n suggestContent: css`\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n `,\n\n userMsg: css`\n display: flex;\n justify-content: flex-end;\n margin-bottom: 24px;\n `,\n\n userContainer: css`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n `,\n\n card: css`\n display: inline-flex;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n word-break: break-all;\n `,\n\n botMsg: css`\n margin-bottom: 12px;\n `,\n\n emptyWrapper: css`\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n `,\n\n // 新增样式\n welcomeWrapper: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n `,\n\n welcomeIcon: css`\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n `,\n\n welcomeTitle: css`\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n `,\n\n welcomeDesc: css`\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n `,\n\n suggestionWrapper: css`\n margin-top: 16px;\n `,\n\n successBadge: css`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n `,\n\n fileSection: css`\n margin: 12px 0;\n `,\n\n fileHeader: css`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n `,\n\n metaFooter: css`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n `,\n\n actionIcons: css`\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n footer: css`\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n `,\n\n sender: css`\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n `,\n\n senderWrap: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n `,\n\n tip: css`\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n `,\n\n input: css`\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,ouBA2BX;IAEDC,IAAI,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,wQAYR;IAEDG,QAAQ,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sCAEZ;IAEDK,UAAU,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,sCAEd;IAEDO,cAAc,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,gGAIlB;IAEDS,OAAO,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,0FAIX;IAEDW,aAAa,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,yHAKjB;IAEDa,IAAI,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,kMAQR;IAEDe,MAAM,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,sCAEV;IAEDiB,YAAY,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,8HAMhB;IAED;IACAmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,yIAMlB;IAEDqB,WAAW,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,qGAKf;IAEDuB,YAAY,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,mHAKhB;IAEDyB,WAAW,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,6FAIf;IAED2B,iBAAiB,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,mCAErB;IAED6B,YAAY,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,gQAWhB;IAED+B,WAAW,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,iCAEf;IAEDiC,UAAU,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,4FAId;IAEDmC,UAAU,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,mLAQd;IAEDqC,WAAW,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,kLAWf;IAEDuC,MAAM,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,yMASV;IAEDyC,OAAO,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,0FAIX;IAED2C,MAAM,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA,sJAGV;IAED6C,MAAM,EAAElD,GAAG,CAAAmD,iBAAA,KAAAA,iBAAA,GAAA9C,sBAAA,kQAUV;IAED+C,UAAU,EAAEpD,GAAG,CAAAqD,iBAAA,KAAAA,iBAAA,GAAAhD,sBAAA,8GAKd;IAEDiD,GAAG,EAAEtD,GAAG,CAAAuD,iBAAA,KAAAA,iBAAA,GAAAlD,sBAAA,8GAKP;IAEDmD,KAAK,EAAExD,GAAG,CAAAyD,iBAAA,KAAAA,iBAAA,GAAApD,sBAAA;EAYZ,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","prologue","_templateObject3","suggestion","_templateObject4","suggestContent","_templateObject5","userMsg","_templateObject6","userContainer","_templateObject7","card","_templateObject8","botMsg","_templateObject9","emptyWrapper","_templateObject10","welcomeWrapper","_templateObject11","welcomeIcon","_templateObject12","welcomeTitle","_templateObject13","welcomeDesc","_templateObject14","suggestionWrapper","_templateObject15","successBadge","_templateObject16","fileSection","_templateObject17","fileHeader","_templateObject18","metaFooter","_templateObject19","actionIcons","_templateObject20","fnCall","_templateObject21","confirm","_templateObject22","footer","_templateObject23","sender","_templateObject24","senderWrap","_templateObject25","tip","_templateObject26","input","_templateObject27"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n min-height: 300px;\n height: 100%;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n `,\n\n list: css`\n flex: 1;\n margin-top: 16px;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n `,\n\n prologue: css`\n margin-bottom: 12px;\n `,\n\n suggestion: css`\n margin-bottom: 12px;\n `,\n\n suggestContent: css`\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n `,\n\n userMsg: css`\n display: flex;\n justify-content: flex-end;\n margin-bottom: 24px;\n `,\n\n userContainer: css`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n `,\n\n card: css`\n display: inline-block;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n word-break: break-all;\n `,\n\n botMsg: css`\n margin-bottom: 12px;\n `,\n\n emptyWrapper: css`\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n `,\n\n // 新增样式\n welcomeWrapper: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n `,\n\n welcomeIcon: css`\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n `,\n\n welcomeTitle: css`\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n `,\n\n welcomeDesc: css`\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n `,\n\n suggestionWrapper: css`\n margin-top: 16px;\n `,\n\n successBadge: css`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n `,\n\n fileSection: css`\n margin: 12px 0;\n `,\n\n fileHeader: css`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n `,\n\n metaFooter: css`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n `,\n\n actionIcons: css`\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n footer: css`\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n `,\n\n sender: css`\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n `,\n\n senderWrap: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n `,\n\n tip: css`\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n `,\n\n input: css`\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,ouBA2BX;IAEDC,IAAI,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,wQAYR;IAEDG,QAAQ,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sCAEZ;IAEDK,UAAU,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,sCAEd;IAEDO,cAAc,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,gGAIlB;IAEDS,OAAO,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,0FAIX;IAEDW,aAAa,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,yHAKjB;IAEDa,IAAI,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,mMAQR;IAEDe,MAAM,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,sCAEV;IAEDiB,YAAY,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,8HAMhB;IAED;IACAmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,yIAMlB;IAEDqB,WAAW,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,qGAKf;IAEDuB,YAAY,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,mHAKhB;IAEDyB,WAAW,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,6FAIf;IAED2B,iBAAiB,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,mCAErB;IAED6B,YAAY,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,gQAWhB;IAED+B,WAAW,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,iCAEf;IAEDiC,UAAU,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,4FAId;IAEDmC,UAAU,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,mLAQd;IAEDqC,WAAW,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,kLAWf;IAEDuC,MAAM,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,yMASV;IAEDyC,OAAO,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,0FAIX;IAED2C,MAAM,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA,sJAGV;IAED6C,MAAM,EAAElD,GAAG,CAAAmD,iBAAA,KAAAA,iBAAA,GAAA9C,sBAAA,kQAUV;IAED+C,UAAU,EAAEpD,GAAG,CAAAqD,iBAAA,KAAAA,iBAAA,GAAAhD,sBAAA,8GAKd;IAEDiD,GAAG,EAAEtD,GAAG,CAAAuD,iBAAA,KAAAA,iBAAA,GAAAlD,sBAAA,8GAKP;IAEDmD,KAAK,EAAExD,GAAG,CAAAyD,iBAAA,KAAAA,iBAAA,GAAApD,sBAAA;EAYZ,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
@@ -14,9 +14,14 @@ export interface DefaultLayoutProps {
14
14
  header?: React.ReactNode;
15
15
  /** 自定义底部 (替代默认 Sender) */
16
16
  footer?: React.ReactNode;
17
- /** 是否允许上传文件 */
17
+ /**
18
+ * 是否启用内置上传入口(上传按钮 + 隐藏 file input + 拖拽)。
19
+ * 未传时继承 XAdkProvider config.allowUpload。
20
+ * 内核 XAdkSender 不再内置上传逻辑,上传能力统一由 DefaultLayout 管理。
21
+ * 业务方自定义 footer 时可自行控制上传。
22
+ */
18
23
  allowUpload?: boolean;
19
- /** 是否启用拖拽上传,拖拽区域为整个聊天区域(不含侧边栏),需 allowUpload 为 true */
24
+ /** 是否启用拖拽上传;未传时继承 config.draggable */
20
25
  draggable?: boolean;
21
26
  /** 是否显示清空按钮 */
22
27
  clearBtnShow?: boolean;
@@ -1,7 +1,9 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { useRef, useCallback, useState } from "react";
2
+ import React, { useRef, useCallback, useState, useMemo } from "react";
3
3
  import { Attachments } from "@ant-design/x";
4
4
  import { useChatState } from "../context/ChatStateContext";
5
+ import { useChatSenderState } from "../context/ChatSenderStateContext";
6
+ import { DefaultLayoutContext } from "../context/DefaultLayoutContext";
5
7
  import Sidebar from "./Sidebar";
6
8
  import Messages from "./Messages";
7
9
  import Welcome from "./Welcome";
@@ -22,10 +24,8 @@ var DefaultLayout = function DefaultLayout(_ref) {
22
24
  showSessionList = _ref$showSessionList === void 0 ? false : _ref$showSessionList,
23
25
  header = _ref.header,
24
26
  footer = _ref.footer,
25
- _ref$allowUpload = _ref.allowUpload,
26
- allowUpload = _ref$allowUpload === void 0 ? false : _ref$allowUpload,
27
- _ref$draggable = _ref.draggable,
28
- draggable = _ref$draggable === void 0 ? true : _ref$draggable,
27
+ allowUpload = _ref.allowUpload,
28
+ draggable = _ref.draggable,
29
29
  _ref$clearBtnShow = _ref.clearBtnShow,
30
30
  clearBtnShow = _ref$clearBtnShow === void 0 ? true : _ref$clearBtnShow,
31
31
  showFnCallDetail = _ref.showFnCallDetail,
@@ -36,6 +36,12 @@ var DefaultLayout = function DefaultLayout(_ref) {
36
36
  messages = _useChatState.messages,
37
37
  prologue = _useChatState.prologue,
38
38
  suggestions = _useChatState.suggestions;
39
+ var _useChatSenderState = useChatSenderState(),
40
+ providerAllowUpload = _useChatSenderState.allowUpload,
41
+ providerDraggable = _useChatSenderState.draggable;
42
+ // Layout props 用于局部覆盖;未传时继承 Provider config,保证 NPM 与 UMD 接入一致。
43
+ var mergedAllowUpload = allowUpload !== null && allowUpload !== void 0 ? allowUpload : providerAllowUpload;
44
+ var mergedDraggable = draggable !== null && draggable !== void 0 ? draggable : providerDraggable;
39
45
  var styles = useStyles();
40
46
  var chatAreaRef = useRef(null);
41
47
  var senderRef = useRef(null);
@@ -43,22 +49,36 @@ var DefaultLayout = function DefaultLayout(_ref) {
43
49
  _useState2 = _slicedToArray(_useState, 2),
44
50
  dropFileList = _useState2[0],
45
51
  setDropFileList = _useState2[1];
52
+ var registerSender = useCallback(function (sender) {
53
+ senderRef.current = sender;
54
+ }, []);
55
+ var layoutContextValue = useMemo(function () {
56
+ return {
57
+ allowUpload: mergedAllowUpload,
58
+ registerSender: registerSender
59
+ };
60
+ }, [mergedAllowUpload, registerSender]);
61
+
62
+ // 拖拽上传只有在上传能力开启时生效,避免关闭上传后仍响应文件拖入。
63
+ var enableDragUpload = mergedAllowUpload && mergedDraggable;
46
64
 
47
- // 拖拽上传是否启用
48
- var enableDragUpload = allowUpload && draggable;
65
+ // 文件注入到 Sender(按钮点击 + 拖拽统一走这里)
66
+ var handleFiles = useCallback(function (files) {
67
+ if (files.length > 0) {
68
+ var _senderRef$current;
69
+ (_senderRef$current = senderRef.current) === null || _senderRef$current === void 0 || _senderRef$current.addFiles(files);
70
+ }
71
+ }, []);
49
72
 
50
73
  // Attachments 拖拽文件后的回调
51
74
  var handleDropFiles = useCallback(function (info) {
52
75
  var rawFiles = info.fileList.map(function (f) {
53
76
  return f.originFileObj;
54
77
  }).filter(Boolean);
55
- if (rawFiles.length > 0) {
56
- var _senderRef$current;
57
- (_senderRef$current = senderRef.current) === null || _senderRef$current === void 0 || _senderRef$current.addFiles(rawFiles);
58
- }
78
+ handleFiles(rawFiles);
59
79
  // 清空 Attachments 文件列表,避免累积
60
80
  setDropFileList([]);
61
- }, []);
81
+ }, [handleFiles]);
62
82
 
63
83
  // 判断是否为空状态(展示Welcome)
64
84
  var isEmpty = messages.length === 0 && !prologue && (!suggestions || suggestions.length === 0);
@@ -155,11 +175,14 @@ var DefaultLayout = function DefaultLayout(_ref) {
155
175
  padding: isEmpty ? "0 24px" : "0",
156
176
  transition: "all 0.4s cubic-bezier(0.4, 0, 0.2, 1)"
157
177
  },
158
- children: footer || /*#__PURE__*/_jsx(Sender, {
159
- ref: senderRef,
160
- allowUpload: allowUpload,
161
- draggable: !enableDragUpload,
162
- clearBtnShow: clearBtnShow
178
+ children: /*#__PURE__*/_jsx(DefaultLayoutContext.Provider, {
179
+ value: layoutContextValue,
180
+ children: footer || /*#__PURE__*/_jsx(Sender, {
181
+ ref: senderRef,
182
+ draggable: false,
183
+ onFileSelect: handleFiles,
184
+ clearBtnShow: clearBtnShow
185
+ })
163
186
  })
164
187
  }), /*#__PURE__*/_jsx("div", {
165
188
  style: {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useCallback","useState","Attachments","useChatState","Sidebar","Messages","Welcome","Sender","useStyles","jsx","_jsx","jsxs","_jsxs","DefaultLayout","_ref","_ref$showSessionList","showSessionList","header","footer","_ref$allowUpload","allowUpload","_ref$draggable","draggable","_ref$clearBtnShow","clearBtnShow","showFnCallDetail","renderFunctionCall","strategies","_useChatState","appInfo","messages","prologue","suggestions","styles","chatAreaRef","senderRef","_useState","_useState2","_slicedToArray","dropFileList","setDropFileList","enableDragUpload","handleDropFiles","info","rawFiles","fileList","map","f","originFileObj","filter","Boolean","length","_senderRef$current","current","addFiles","isEmpty","style","display","height","width","position","overflow","children","isNarrow","ref","flex","justifyContent","alignItems","flexDirection","maxWidth","padding","background","gap","appName","fontSize","fontWeight","color","transition","marginBottom","className","sendWrapper","alignSelf","items","getDropContainer","multiple","beforeUpload","onChange","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/DefaultLayout.tsx"],"sourcesContent":["import React, { useRef, useCallback, useState } from \"react\";\nimport { Attachments } from \"@ant-design/x\";\nimport type { UploadFile } from \"antd\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport Sidebar from \"./Sidebar\";\nimport Messages from \"./Messages\";\nimport Welcome from \"./Welcome\";\nimport Sender from \"./Sender\";\nimport { useStyles } from \"./styles\";\nimport type { ChatStrategies } from \"@/types\";\nimport type { XAdkSenderHandle } from \"@/types/XAdkSender\";\n\n/**\n * XAdkProvider 默认布局\n *\n * 提供类似 ChatGPT/DeepSeek 的默认布局:\n * - 左侧: 会话列表侧边栏 (可选,支持展开/收起)\n * - 右侧: 聊天区域 (标题 + 消息 + 输入框,居中显示,最大宽度800px)\n */\nexport interface DefaultLayoutProps {\n /** 是否显示会话列表 */\n showSessionList?: boolean;\n /** 自定义头部 */\n header?: React.ReactNode;\n /** 自定义底部 (替代默认 Sender) */\n footer?: React.ReactNode;\n /** 是否允许上传文件 */\n allowUpload?: boolean;\n /** 是否启用拖拽上传,拖拽区域为整个聊天区域(不含侧边栏),需 allowUpload 为 true */\n draggable?: boolean;\n /** 是否显示清空按钮 */\n clearBtnShow?: boolean;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义消息 Footer */\n messagesFooter?: (msg: any) => React.ReactNode;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (\n msg: import(\"@/types\").IMessage,\n ) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\nconst DefaultLayout: React.FC<DefaultLayoutProps> = ({\n showSessionList = false,\n header,\n footer,\n allowUpload = false,\n draggable = true,\n clearBtnShow = true,\n showFnCallDetail,\n renderFunctionCall,\n strategies,\n}) => {\n const { appInfo, messages, prologue, suggestions } = useChatState();\n const styles = useStyles();\n const chatAreaRef = useRef<HTMLDivElement>(null);\n const senderRef = useRef<XAdkSenderHandle>(null);\n const [dropFileList, setDropFileList] = useState<UploadFile[]>([]);\n\n // 拖拽上传是否启用\n const enableDragUpload = allowUpload && draggable;\n\n // Attachments 拖拽文件后的回调\n const handleDropFiles = useCallback((info: { fileList: UploadFile[] }) => {\n const rawFiles = info.fileList\n .map((f) => f.originFileObj)\n .filter(Boolean) as File[];\n if (rawFiles.length > 0) {\n senderRef.current?.addFiles(rawFiles);\n }\n // 清空 Attachments 文件列表,避免累积\n setDropFileList([]);\n }, []);\n\n // 判断是否为空状态(展示Welcome)\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\n >\n {/* 左侧会话列表 - XAiConversations 组件会处理展开/收起 */}\n {showSessionList && <Sidebar isNarrow={false} />}\n\n {/* 右侧聊天区域 - 使用 flex: 1 自动占据剩余空间 */}\n <div\n ref={chatAreaRef}\n style={{\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n {/* 居中容器 - 最大宽度 800px */}\n <div\n style={{\n width: \"100%\",\n maxWidth: \"800px\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 头部 */}\n {header ||\n (appInfo && (\n <div\n style={{\n padding: \"16px 24px\",\n display: \"flex\",\n justifyContent: \"center\",\n background: \"white\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {appInfo.appName && (\n <div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n color: \"#000\",\n }}\n >\n {appInfo.appName}\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n\n {/* 消息区域或Welcome区域 */}\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 上方弹性占位 - Welcome状态时占据空间 */}\n <div\n style={{\n flex: isEmpty ? 1 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n\n {/* Welcome 组件 - 只在空状态显示 */}\n {isEmpty && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"0 24px\",\n marginBottom: \"24px\",\n }}\n >\n <Welcome />\n </div>\n )}\n\n {/* Messages 组件 - 只在非空状态显示 */}\n {!isEmpty && (\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <Messages\n showFnCallDetail={showFnCallDetail}\n renderFunctionCall={renderFunctionCall}\n strategies={strategies}\n />\n </div>\n )}\n {/* 输入区域 - 始终存在,通过样式控制位置 */}\n <div\n className={styles.sendWrapper}\n style={{\n maxWidth: isEmpty ? \"600px\" : \"100%\",\n alignSelf: \"center\",\n padding: isEmpty ? \"0 24px\" : \"0\",\n transition: \"all 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n {footer || (\n <Sender\n ref={senderRef}\n allowUpload={allowUpload}\n draggable={!enableDragUpload}\n clearBtnShow={clearBtnShow}\n />\n )}\n </div>\n\n {/* 下方弹性占位 - Welcome状态时占据更多空间,让内容偏上 */}\n <div\n style={{\n flex: isEmpty ? 1.5 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n </div>\n </div>\n\n {/* Attachments 拖拽遮罩 - 仅用于拖拽上传功能 */}\n {enableDragUpload && (\n <Attachments\n style={{ display: \"none\" }}\n items={dropFileList}\n getDropContainer={() => chatAreaRef.current}\n multiple\n beforeUpload={() => false}\n onChange={handleDropFiles}\n />\n )}\n </div>\n </div>\n );\n};\n\nDefaultLayout.displayName = \"XAdkProvider.DefaultLayout\";\n\nexport default DefaultLayout;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useRef","useCallback","useState","useMemo","Attachments","useChatState","useChatSenderState","DefaultLayoutContext","Sidebar","Messages","Welcome","Sender","useStyles","jsx","_jsx","jsxs","_jsxs","DefaultLayout","_ref","_ref$showSessionList","showSessionList","header","footer","allowUpload","draggable","_ref$clearBtnShow","clearBtnShow","showFnCallDetail","renderFunctionCall","strategies","_useChatState","appInfo","messages","prologue","suggestions","_useChatSenderState","providerAllowUpload","providerDraggable","mergedAllowUpload","mergedDraggable","styles","chatAreaRef","senderRef","_useState","_useState2","_slicedToArray","dropFileList","setDropFileList","registerSender","sender","current","layoutContextValue","enableDragUpload","handleFiles","files","length","_senderRef$current","addFiles","handleDropFiles","info","rawFiles","fileList","map","f","originFileObj","filter","Boolean","isEmpty","style","display","height","width","position","overflow","children","isNarrow","ref","flex","justifyContent","alignItems","flexDirection","maxWidth","padding","background","gap","appName","fontSize","fontWeight","color","transition","marginBottom","className","sendWrapper","alignSelf","Provider","value","onFileSelect","items","getDropContainer","multiple","beforeUpload","onChange","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/DefaultLayout.tsx"],"sourcesContent":["import React, { useRef, useCallback, useState, useMemo } from \"react\";\nimport { Attachments } from \"@ant-design/x\";\nimport type { UploadFile } from \"antd\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport { DefaultLayoutContext } from \"../context/DefaultLayoutContext\";\nimport Sidebar from \"./Sidebar\";\nimport Messages from \"./Messages\";\nimport Welcome from \"./Welcome\";\nimport Sender from \"./Sender\";\nimport { useStyles } from \"./styles\";\nimport type { ChatStrategies } from \"@/types\";\nimport type { XAdkSenderHandle } from \"@/types/XAdkSender\";\n\n/**\n * XAdkProvider 默认布局\n *\n * 提供类似 ChatGPT/DeepSeek 的默认布局:\n * - 左侧: 会话列表侧边栏 (可选,支持展开/收起)\n * - 右侧: 聊天区域 (标题 + 消息 + 输入框,居中显示,最大宽度800px)\n */\nexport interface DefaultLayoutProps {\n /** 是否显示会话列表 */\n showSessionList?: boolean;\n /** 自定义头部 */\n header?: React.ReactNode;\n /** 自定义底部 (替代默认 Sender) */\n footer?: React.ReactNode;\n /**\n * 是否启用内置上传入口(上传按钮 + 隐藏 file input + 拖拽)。\n * 未传时继承 XAdkProvider config.allowUpload。\n * 内核 XAdkSender 不再内置上传逻辑,上传能力统一由 DefaultLayout 管理。\n * 业务方自定义 footer 时可自行控制上传。\n */\n allowUpload?: boolean;\n /** 是否启用拖拽上传;未传时继承 config.draggable */\n draggable?: boolean;\n /** 是否显示清空按钮 */\n clearBtnShow?: boolean;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义消息 Footer */\n messagesFooter?: (msg: any) => React.ReactNode;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (\n msg: import(\"@/types\").IMessage,\n ) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\nconst DefaultLayout: React.FC<DefaultLayoutProps> = ({\n showSessionList = false,\n header,\n footer,\n allowUpload,\n draggable,\n clearBtnShow = true,\n showFnCallDetail,\n renderFunctionCall,\n strategies,\n}) => {\n const { appInfo, messages, prologue, suggestions } = useChatState();\n const { allowUpload: providerAllowUpload, draggable: providerDraggable } =\n useChatSenderState();\n // Layout props 用于局部覆盖;未传时继承 Provider config,保证 NPM 与 UMD 接入一致。\n const mergedAllowUpload = allowUpload ?? providerAllowUpload;\n const mergedDraggable = draggable ?? providerDraggable;\n const styles = useStyles();\n const chatAreaRef = useRef<HTMLDivElement>(null);\n const senderRef = useRef<XAdkSenderHandle>(null);\n const [dropFileList, setDropFileList] = useState<UploadFile[]>([]);\n const registerSender = useCallback((sender: XAdkSenderHandle | null) => {\n senderRef.current = sender;\n }, []);\n const layoutContextValue = useMemo(\n () => ({ allowUpload: mergedAllowUpload, registerSender }),\n [mergedAllowUpload, registerSender],\n );\n\n // 拖拽上传只有在上传能力开启时生效,避免关闭上传后仍响应文件拖入。\n const enableDragUpload = mergedAllowUpload && mergedDraggable;\n\n // 文件注入到 Sender(按钮点击 + 拖拽统一走这里)\n const handleFiles = useCallback((files: File[]) => {\n if (files.length > 0) {\n senderRef.current?.addFiles(files);\n }\n }, []);\n\n // Attachments 拖拽文件后的回调\n const handleDropFiles = useCallback(\n (info: { fileList: UploadFile[] }) => {\n const rawFiles = info.fileList\n .map((f) => f.originFileObj)\n .filter(Boolean) as File[];\n handleFiles(rawFiles);\n // 清空 Attachments 文件列表,避免累积\n setDropFileList([]);\n },\n [handleFiles],\n );\n\n // 判断是否为空状态(展示Welcome)\n const isEmpty =\n messages.length === 0 &&\n !prologue &&\n (!suggestions || suggestions.length === 0);\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\n >\n {/* 左侧会话列表 - XAiConversations 组件会处理展开/收起 */}\n {showSessionList && <Sidebar isNarrow={false} />}\n\n {/* 右侧聊天区域 - 使用 flex: 1 自动占据剩余空间 */}\n <div\n ref={chatAreaRef}\n style={{\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n {/* 居中容器 - 最大宽度 800px */}\n <div\n style={{\n width: \"100%\",\n maxWidth: \"800px\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 头部 */}\n {header ||\n (appInfo && (\n <div\n style={{\n padding: \"16px 24px\",\n display: \"flex\",\n justifyContent: \"center\",\n background: \"white\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {appInfo.appName && (\n <div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n color: \"#000\",\n }}\n >\n {appInfo.appName}\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n\n {/* 消息区域或Welcome区域 */}\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {/* 上方弹性占位 - Welcome状态时占据空间 */}\n <div\n style={{\n flex: isEmpty ? 1 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n\n {/* Welcome 组件 - 只在空状态显示 */}\n {isEmpty && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"0 24px\",\n marginBottom: \"24px\",\n }}\n >\n <Welcome />\n </div>\n )}\n\n {/* Messages 组件 - 只在非空状态显示 */}\n {!isEmpty && (\n <div\n style={{\n flex: 1,\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <Messages\n showFnCallDetail={showFnCallDetail}\n renderFunctionCall={renderFunctionCall}\n strategies={strategies}\n />\n </div>\n )}\n {/* 输入区域 - 始终存在,通过样式控制位置 */}\n <div\n className={styles.sendWrapper}\n style={{\n maxWidth: isEmpty ? \"600px\" : \"100%\",\n alignSelf: \"center\",\n padding: isEmpty ? \"0 24px\" : \"0\",\n transition: \"all 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n >\n <DefaultLayoutContext.Provider value={layoutContextValue}>\n {footer || (\n <Sender\n ref={senderRef}\n draggable={false}\n onFileSelect={handleFiles}\n clearBtnShow={clearBtnShow}\n />\n )}\n </DefaultLayoutContext.Provider>\n </div>\n\n {/* 下方弹性占位 - Welcome状态时占据更多空间,让内容偏上 */}\n <div\n style={{\n flex: isEmpty ? 1.5 : 0,\n transition: \"flex 0.4s cubic-bezier(0.4, 0, 0.2, 1)\",\n }}\n />\n </div>\n </div>\n\n {/* Attachments 拖拽遮罩 - 仅用于拖拽上传功能 */}\n {enableDragUpload && (\n <Attachments\n style={{ display: \"none\" }}\n items={dropFileList}\n getDropContainer={() => chatAreaRef.current}\n multiple\n beforeUpload={() => false}\n onChange={handleDropFiles}\n />\n )}\n </div>\n </div>\n );\n};\n\nDefaultLayout.displayName = \"XAdkProvider.DefaultLayout\";\n\nexport default DefaultLayout;\n"],"mappings":"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"}
@@ -10,14 +10,16 @@ import type { XAdkSenderProps, XAdkSenderHandle } from "../../../types";
10
10
  * ```tsx
11
11
  * <XAdkProvider url="..." token="...">
12
12
  * <XAdkProvider.Sender
13
- * allowUpload={true}
14
13
  * clearBtnShow={true}
14
+ * allowUpload
15
15
  * uploadRequest={myUploadHandler}
16
16
  * />
17
17
  * </XAdkProvider>
18
18
  * ```
19
19
  */
20
20
  export interface XAdkSenderCompoundProps extends Partial<Omit<XAdkSenderProps, "loading" | "onSubmit" | "onStop" | "onClear">> {
21
+ /** 是否显示内置上传按钮;未传时依次继承 DefaultLayout 与 Provider 配置。 */
22
+ allowUpload?: boolean;
21
23
  /** 额外的样式 */
22
24
  style?: React.CSSProperties;
23
25
  /** 额外的类名 */
@@ -1,8 +1,14 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
- import React, { forwardRef } from "react";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ var _excluded = ["allowUpload", "uploadRequest", "footerLeft"];
4
+ import React, { forwardRef, useCallback, useRef } from "react";
5
+ import { PaperClipOutlined } from "@ant-design/icons";
6
+ import { Tooltip } from "antd";
3
7
  import XAdkSender from "../../XAdkSender";
4
8
  import { useChatSenderState } from "../context/ChatSenderStateContext";
9
+ import { useDefaultLayoutContext } from "../context/DefaultLayoutContext";
5
10
  import { useChatActions } from "../context/ChatActionContext";
11
+ import { useStyles } from "./styles";
6
12
 
7
13
  /**
8
14
  * XAdkProvider.Sender - 输入框组件
@@ -14,26 +20,83 @@ import { useChatActions } from "../context/ChatActionContext";
14
20
  * ```tsx
15
21
  * <XAdkProvider url="..." token="...">
16
22
  * <XAdkProvider.Sender
17
- * allowUpload={true}
18
23
  * clearBtnShow={true}
24
+ * allowUpload
19
25
  * uploadRequest={myUploadHandler}
20
26
  * />
21
27
  * </XAdkProvider>
22
28
  * ```
23
29
  */
24
30
  import { jsx as _jsx } from "react/jsx-runtime";
25
- var Sender = /*#__PURE__*/forwardRef(function (props, ref) {
31
+ import { Fragment as _Fragment } from "react/jsx-runtime";
32
+ import { jsxs as _jsxs } from "react/jsx-runtime";
33
+ var Sender = /*#__PURE__*/forwardRef(function (_ref, ref) {
34
+ var _ref2;
35
+ var allowUpload = _ref.allowUpload,
36
+ customUploadRequest = _ref.uploadRequest,
37
+ footerLeft = _ref.footerLeft,
38
+ props = _objectWithoutProperties(_ref, _excluded);
26
39
  var _useChatSenderState = useChatSenderState(),
27
40
  loading = _useChatSenderState.loading,
28
- uploadRequest = _useChatSenderState.uploadRequest,
41
+ providerUploadRequest = _useChatSenderState.uploadRequest,
42
+ providerAllowUpload = _useChatSenderState.allowUpload,
29
43
  senderValue = _useChatSenderState.senderValue,
30
44
  setSenderValue = _useChatSenderState.setSenderValue;
45
+ var layout = useDefaultLayoutContext();
31
46
  var _useChatActions = useChatActions(),
32
47
  chat = _useChatActions.chat,
33
48
  stopChat = _useChatActions.stopChat,
34
49
  clearChat = _useChatActions.clearChat;
50
+ var styles = useStyles();
51
+ var senderRef = useRef(null);
52
+ var fileInputRef = useRef(null);
53
+ var mergedAllowUpload = (_ref2 = allowUpload !== null && allowUpload !== void 0 ? allowUpload : layout === null || layout === void 0 ? void 0 : layout.allowUpload) !== null && _ref2 !== void 0 ? _ref2 : providerAllowUpload;
54
+ var uploadRequest = customUploadRequest !== null && customUploadRequest !== void 0 ? customUploadRequest : providerUploadRequest;
55
+
56
+ // 同时维护业务 ref 与 DefaultLayout 的拖拽文件注入目标。
57
+ var setSenderRef = useCallback(function (sender) {
58
+ var _layout$registerSende;
59
+ senderRef.current = sender;
60
+ layout === null || layout === void 0 || (_layout$registerSende = layout.registerSender) === null || _layout$registerSende === void 0 || _layout$registerSende.call(layout, sender);
61
+ if (typeof ref === "function") ref(sender);else if (ref) ref.current = sender;
62
+ }, [layout, ref]);
63
+ var handleFileChange = useCallback(function (event) {
64
+ var _senderRef$current;
65
+ var files = event.target.files;
66
+ if (files !== null && files !== void 0 && files.length) (_senderRef$current = senderRef.current) === null || _senderRef$current === void 0 || _senderRef$current.addFiles(Array.from(files));
67
+ event.target.value = "";
68
+ }, []);
69
+ var renderCustomFooterLeft = useCallback(function (oriNode, info) {
70
+ if (footerLeft === false || footerLeft === undefined) return null;
71
+ return typeof footerLeft === "function" ? footerLeft(oriNode, info) : footerLeft;
72
+ }, [footerLeft]);
73
+ var mergedFooterLeft = mergedAllowUpload ? function (oriNode, info) {
74
+ var _props$allowedFileTyp;
75
+ return /*#__PURE__*/_jsxs(_Fragment, {
76
+ children: [/*#__PURE__*/_jsx("input", {
77
+ ref: fileInputRef,
78
+ type: "file",
79
+ multiple: true,
80
+ hidden: true,
81
+ accept: (_props$allowedFileTyp = props.allowedFileTypes) === null || _props$allowedFileTyp === void 0 ? void 0 : _props$allowedFileTyp.join(","),
82
+ onChange: handleFileChange
83
+ }), /*#__PURE__*/_jsx(Tooltip, {
84
+ title: "\u4E0A\u4F20\u6587\u4EF6",
85
+ children: /*#__PURE__*/_jsx("button", {
86
+ type: "button",
87
+ className: styles.uploadButton,
88
+ onClick: function onClick() {
89
+ var _fileInputRef$current;
90
+ return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
91
+ },
92
+ "aria-label": "\u4E0A\u4F20\u6587\u4EF6",
93
+ children: /*#__PURE__*/_jsx(PaperClipOutlined, {})
94
+ })
95
+ }), renderCustomFooterLeft(oriNode, info)]
96
+ });
97
+ } : footerLeft;
35
98
  return /*#__PURE__*/_jsx(XAdkSender, _objectSpread(_objectSpread({
36
- ref: ref
99
+ ref: setSenderRef
37
100
  }, props), {}, {
38
101
  loading: loading,
39
102
  value: senderValue,
@@ -41,7 +104,8 @@ var Sender = /*#__PURE__*/forwardRef(function (props, ref) {
41
104
  onSubmit: chat,
42
105
  onStop: stopChat,
43
106
  onClear: clearChat,
44
- uploadRequest: uploadRequest
107
+ uploadRequest: uploadRequest,
108
+ footerLeft: mergedFooterLeft
45
109
  }));
46
110
  });
47
111
  Sender.displayName = "XAdkProvider.Sender";
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","XAdkSender","useChatSenderState","useChatActions","jsx","_jsx","Sender","props","ref","_useChatSenderState","loading","uploadRequest","senderValue","setSenderValue","_useChatActions","chat","stopChat","clearChat","_objectSpread","value","onChange","onSubmit","onStop","onClear","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/Sender.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport XAdkSender from \"@/components/XAdkSender\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { XAdkSenderProps, XAdkSenderHandle } from \"@/types\";\n\n/**\n * XAdkProvider.Sender - 输入框组件\n *\n * 从 Context 获取聊天动作并提供输入界面\n * 基于 XAdkSender 组件实现\n *\n * @example\n * ```tsx\n * <XAdkProvider url=\"...\" token=\"...\">\n * <XAdkProvider.Sender\n * allowUpload={true}\n * clearBtnShow={true}\n * uploadRequest={myUploadHandler}\n * />\n * </XAdkProvider>\n * ```\n */\nexport interface XAdkSenderCompoundProps extends Partial<\n Omit<XAdkSenderProps, \"loading\" | \"onSubmit\" | \"onStop\" | \"onClear\">\n> {\n /** 额外的样式 */\n style?: React.CSSProperties;\n /** 额外的类名 */\n className?: string;\n}\n\nconst Sender = forwardRef<XAdkSenderHandle, XAdkSenderCompoundProps>(\n (props, ref) => {\n const { loading, uploadRequest, senderValue, setSenderValue } = useChatSenderState();\n const { chat, stopChat, clearChat } = useChatActions();\n\n return (\n <XAdkSender\n ref={ref}\n {...props}\n loading={loading}\n value={senderValue}\n onChange={setSenderValue}\n onSubmit={chat}\n onStop={stopChat}\n onClear={clearChat}\n uploadRequest={uploadRequest}\n />\n );\n },\n);\n\nSender.displayName = \"XAdkProvider.Sender\";\n\nexport default Sender;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,UAAU;AACjB,SAASC,kBAAkB;AAC3B,SAASC,cAAc;;AAGvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhBA,SAAAC,GAAA,IAAAC,IAAA;AA0BA,IAAMC,MAAM,gBAAGN,UAAU,CACvB,UAACO,KAAK,EAAEC,GAAG,EAAK;EACd,IAAAC,mBAAA,GAAgEP,kBAAkB,CAAC,CAAC;IAA5EQ,OAAO,GAAAD,mBAAA,CAAPC,OAAO;IAAEC,aAAa,GAAAF,mBAAA,CAAbE,aAAa;IAAEC,WAAW,GAAAH,mBAAA,CAAXG,WAAW;IAAEC,cAAc,GAAAJ,mBAAA,CAAdI,cAAc;EAC3D,IAAAC,eAAA,GAAsCX,cAAc,CAAC,CAAC;IAA9CY,IAAI,GAAAD,eAAA,CAAJC,IAAI;IAAEC,QAAQ,GAAAF,eAAA,CAARE,QAAQ;IAAEC,SAAS,GAAAH,eAAA,CAATG,SAAS;EAEjC,oBACEZ,IAAA,CAACJ,UAAU,EAAAiB,aAAA,CAAAA,aAAA;IACTV,GAAG,EAAEA;EAAI,GACLD,KAAK;IACTG,OAAO,EAAEA,OAAQ;IACjBS,KAAK,EAAEP,WAAY;IACnBQ,QAAQ,EAAEP,cAAe;IACzBQ,QAAQ,EAAEN,IAAK;IACfO,MAAM,EAAEN,QAAS;IACjBO,OAAO,EAAEN,SAAU;IACnBN,aAAa,EAAEA;EAAc,EAC9B,CAAC;AAEN,CACF,CAAC;AAEDL,MAAM,CAACkB,WAAW,GAAG,qBAAqB;AAE1C,eAAelB,MAAM"}
1
+ {"version":3,"names":["React","forwardRef","useCallback","useRef","PaperClipOutlined","Tooltip","XAdkSender","useChatSenderState","useDefaultLayoutContext","useChatActions","useStyles","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Sender","_ref","ref","_ref2","allowUpload","customUploadRequest","uploadRequest","footerLeft","props","_objectWithoutProperties","_excluded","_useChatSenderState","loading","providerUploadRequest","providerAllowUpload","senderValue","setSenderValue","layout","_useChatActions","chat","stopChat","clearChat","styles","senderRef","fileInputRef","mergedAllowUpload","setSenderRef","sender","_layout$registerSende","current","registerSender","call","handleFileChange","event","_senderRef$current","files","target","length","addFiles","Array","from","value","renderCustomFooterLeft","oriNode","info","undefined","mergedFooterLeft","_props$allowedFileTyp","children","type","multiple","hidden","accept","allowedFileTypes","join","onChange","title","className","uploadButton","onClick","_fileInputRef$current","click","_objectSpread","onSubmit","onStop","onClear","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/Sender.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useRef } from \"react\";\nimport { PaperClipOutlined } from \"@ant-design/icons\";\nimport { Tooltip } from \"antd\";\nimport XAdkSender from \"@/components/XAdkSender\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport { useDefaultLayoutContext } from \"../context/DefaultLayoutContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type {\n ActionsComponents,\n SlotRenderFunction,\n XAdkSenderProps,\n XAdkSenderHandle,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n/**\n * XAdkProvider.Sender - 输入框组件\n *\n * 从 Context 获取聊天动作并提供输入界面\n * 基于 XAdkSender 组件实现\n *\n * @example\n * ```tsx\n * <XAdkProvider url=\"...\" token=\"...\">\n * <XAdkProvider.Sender\n * clearBtnShow={true}\n * allowUpload\n * uploadRequest={myUploadHandler}\n * />\n * </XAdkProvider>\n * ```\n */\nexport interface XAdkSenderCompoundProps extends Partial<\n Omit<XAdkSenderProps, \"loading\" | \"onSubmit\" | \"onStop\" | \"onClear\">\n> {\n /** 是否显示内置上传按钮;未传时依次继承 DefaultLayout 与 Provider 配置。 */\n allowUpload?: boolean;\n /** 额外的样式 */\n style?: React.CSSProperties;\n /** 额外的类名 */\n className?: string;\n}\n\nconst Sender = forwardRef<XAdkSenderHandle, XAdkSenderCompoundProps>(\n (\n { allowUpload, uploadRequest: customUploadRequest, footerLeft, ...props },\n ref,\n ) => {\n const {\n loading,\n uploadRequest: providerUploadRequest,\n allowUpload: providerAllowUpload,\n senderValue,\n setSenderValue,\n } = useChatSenderState();\n const layout = useDefaultLayoutContext();\n const { chat, stopChat, clearChat } = useChatActions();\n const styles = useStyles();\n const senderRef = useRef<XAdkSenderHandle | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const mergedAllowUpload =\n allowUpload ?? layout?.allowUpload ?? providerAllowUpload;\n const uploadRequest = customUploadRequest ?? providerUploadRequest;\n\n // 同时维护业务 ref 与 DefaultLayout 的拖拽文件注入目标。\n const setSenderRef = useCallback(\n (sender: XAdkSenderHandle | null) => {\n senderRef.current = sender;\n layout?.registerSender?.(sender);\n if (typeof ref === \"function\") ref(sender);\n else if (ref) ref.current = sender;\n },\n [layout, ref],\n );\n\n const handleFileChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (files?.length) senderRef.current?.addFiles(Array.from(files));\n event.target.value = \"\";\n },\n [],\n );\n\n const renderCustomFooterLeft = useCallback(\n (oriNode: React.ReactNode, info: { components: ActionsComponents }) => {\n if (footerLeft === false || footerLeft === undefined) return null;\n return typeof footerLeft === \"function\"\n ? footerLeft(oriNode, info)\n : footerLeft;\n },\n [footerLeft],\n );\n\n const mergedFooterLeft: SlotRenderFunction | React.ReactNode =\n mergedAllowUpload\n ? (oriNode, info) => (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n hidden\n accept={props.allowedFileTypes?.join(\",\")}\n onChange={handleFileChange}\n />\n <Tooltip title=\"上传文件\">\n <button\n type=\"button\"\n className={styles.uploadButton}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"上传文件\"\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n {renderCustomFooterLeft(oriNode, info)}\n </>\n )\n : footerLeft;\n\n return (\n <XAdkSender\n ref={setSenderRef}\n {...props}\n loading={loading}\n value={senderValue}\n onChange={setSenderValue}\n onSubmit={chat}\n onStop={stopChat}\n onClear={clearChat}\n uploadRequest={uploadRequest}\n footerLeft={mergedFooterLeft}\n />\n );\n },\n);\n\nSender.displayName = \"XAdkProvider.Sender\";\n\nexport default Sender;\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export declare const useStyles: () => {
2
2
  logoText: string;
3
3
  sendWrapper: string;
4
+ uploadButton: string;
4
5
  } & {
5
6
  w: (width: string | number) => string;
6
7
  h: (height: string | number) => string;
@@ -1,11 +1,12 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
- var _templateObject, _templateObject2;
2
+ var _templateObject, _templateObject2, _templateObject3;
3
3
  import { css } from "@emotion/css";
4
4
  import { withBasicStyles } from "../../../styles/common";
5
5
  export var useStyles = withBasicStyles(function () {
6
6
  return {
7
7
  logoText: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n "]))),
8
- sendWrapper: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n "])))
8
+ sendWrapper: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n "]))),
9
+ uploadButton: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n border: 0;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n border-radius: 50%;\n color: #6b7280;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n "])))
9
10
  };
10
11
  });
11
12
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["css","withBasicStyles","useStyles","logoText","_templateObject","_taggedTemplateLiteral","sendWrapper","_templateObject2"],"sources":["../../../../../src/components/XAdkProvider/compound/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n logoText: css`\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n `,\n\n sendWrapper: css`\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n `,\n}));\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,QAAQ,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,wYAeZ;IAEDC,WAAW,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA;EAMlB,CAAC;AAAA,CAAC,CAAC"}
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","logoText","_templateObject","_taggedTemplateLiteral","sendWrapper","_templateObject2","uploadButton","_templateObject3"],"sources":["../../../../../src/components/XAdkProvider/compound/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n logoText: css`\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n `,\n\n sendWrapper: css`\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n `,\n\n uploadButton: css`\n border: 0;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n border-radius: 50%;\n color: #6b7280;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n `,\n}));\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,QAAQ,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,wYAeZ;IAEDC,WAAW,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,wIAKf;IAEDG,YAAY,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA;EAgBnB,CAAC;AAAA,CAAC,CAAC"}
@@ -7,6 +7,10 @@ import type { UploadRequestFn } from "../../../types";
7
7
  export interface ChatSenderStateContextType {
8
8
  loading: boolean;
9
9
  uploadRequest?: UploadRequestFn;
10
+ /** Provider 级上传开关,默认布局可直接继承 config.allowUpload。 */
11
+ allowUpload: boolean;
12
+ /** Provider 级拖拽上传开关,默认布局仍可通过同名 prop 局部覆盖。 */
13
+ draggable: boolean;
10
14
  /** Sender 输入框受控值 */
11
15
  senderValue: string;
12
16
  /** 更新 Sender 输入框值 */
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","ChatSenderStateContext","useChatSenderState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatSenderStateContext.tsx"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport type { UploadRequestFn } from \"@/types\";\n\n/**\n * Sender 专用状态 Context\n * 仅包含 Sender 需要的字段,避免 messages 变化导致 Sender 重渲染和焦点丢失\n */\nexport interface ChatSenderStateContextType {\n loading: boolean;\n uploadRequest?: UploadRequestFn;\n /** Sender 输入框受控值 */\n senderValue: string;\n /** 更新 Sender 输入框值 */\n setSenderValue: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport const ChatSenderStateContext = createContext<ChatSenderStateContextType | null>(null);\n\nexport const useChatSenderState = () => {\n const context = useContext(ChatSenderStateContext);\n if (!context) {\n throw new Error(\"useChatSenderState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAAgBA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGxD;AACA;AACA;AACA;;AAUA,OAAO,IAAMC,sBAAsB,gBAAGF,aAAa,CAAoC,IAAI,CAAC;AAE5F,OAAO,IAAMG,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA,EAAS;EACtC,IAAMC,OAAO,GAAGH,UAAU,CAACC,sBAAsB,CAAC;EAClD,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;EACxE;EACA,OAAOD,OAAO;AAChB,CAAC"}
1
+ {"version":3,"names":["createContext","useContext","ChatSenderStateContext","useChatSenderState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatSenderStateContext.tsx"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport type { UploadRequestFn } from \"@/types\";\n\n/**\n * Sender 专用状态 Context\n * 仅包含 Sender 需要的字段,避免 messages 变化导致 Sender 重渲染和焦点丢失\n */\nexport interface ChatSenderStateContextType {\n loading: boolean;\n uploadRequest?: UploadRequestFn;\n /** Provider 级上传开关,默认布局可直接继承 config.allowUpload。 */\n allowUpload: boolean;\n /** Provider 级拖拽上传开关,默认布局仍可通过同名 prop 局部覆盖。 */\n draggable: boolean;\n /** Sender 输入框受控值 */\n senderValue: string;\n /** 更新 Sender 输入框值 */\n setSenderValue: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport const ChatSenderStateContext =\n createContext<ChatSenderStateContextType | null>(null);\n\nexport const useChatSenderState = () => {\n const context = useContext(ChatSenderStateContext);\n if (!context) {\n throw new Error(\"useChatSenderState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAAgBA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGxD;AACA;AACA;AACA;;AAcA,OAAO,IAAMC,sBAAsB,gBACjCF,aAAa,CAAoC,IAAI,CAAC;AAExD,OAAO,IAAMG,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA,EAAS;EACtC,IAAMC,OAAO,GAAGH,UAAU,CAACC,sBAAsB,CAAC;EAClD,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;EACxE;EACA,OAAOD,OAAO;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import type { XAdkSenderHandle } from "../../../types";
3
+ /** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */
4
+ export interface DefaultLayoutContextType {
5
+ allowUpload?: boolean;
6
+ registerSender?: (sender: XAdkSenderHandle | null) => void;
7
+ }
8
+ export declare const DefaultLayoutContext: import("react").Context<DefaultLayoutContextType | null>;
9
+ export declare const useDefaultLayoutContext: () => DefaultLayoutContextType | null;
@@ -0,0 +1,9 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+ /** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */
4
+
5
+ export var DefaultLayoutContext = /*#__PURE__*/createContext(null);
6
+ export var useDefaultLayoutContext = function useDefaultLayoutContext() {
7
+ return useContext(DefaultLayoutContext);
8
+ };
9
+ //# sourceMappingURL=DefaultLayoutContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","useContext","DefaultLayoutContext","useDefaultLayoutContext"],"sources":["../../../../../src/components/XAdkProvider/context/DefaultLayoutContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { XAdkSenderHandle } from \"@/types\";\n\n/** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */\nexport interface DefaultLayoutContextType {\n allowUpload?: boolean;\n registerSender?: (sender: XAdkSenderHandle | null) => void;\n}\n\nexport const DefaultLayoutContext =\n createContext<DefaultLayoutContextType | null>(null);\n\nexport const useDefaultLayoutContext = () => useContext(DefaultLayoutContext);\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGjD;;AAMA,OAAO,IAAMC,oBAAoB,gBAC/BF,aAAa,CAAkC,IAAI,CAAC;AAEtD,OAAO,IAAMG,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAA;EAAA,OAASF,UAAU,CAACC,oBAAoB,CAAC;AAAA"}
@@ -2,7 +2,8 @@
2
2
  * XAdkProvider Context 导出
3
3
  * 提供拆分的 Context 和对应的 Hooks
4
4
  */
5
- export * from './ChatStateContext';
6
- export * from './ChatActionContext';
7
- export * from './SessionContext';
8
- export * from './ChatSenderStateContext';
5
+ export * from "./ChatStateContext";
6
+ export * from "./ChatActionContext";
7
+ export * from "./SessionContext";
8
+ export * from "./ChatSenderStateContext";
9
+ export * from "./DefaultLayoutContext";
@@ -7,4 +7,5 @@ export * from "./ChatStateContext";
7
7
  export * from "./ChatActionContext";
8
8
  export * from "./SessionContext";
9
9
  export * from "./ChatSenderStateContext";
10
+ export * from "./DefaultLayoutContext";
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../../../src/components/XAdkProvider/context/index.ts"],"sourcesContent":["/**\n * XAdkProvider Context 导出\n * 提供拆分的 Context 和对应的 Hooks\n */\n\nexport * from './ChatStateContext';\nexport * from './ChatActionContext';\nexport * from './SessionContext';\nexport * from './ChatSenderStateContext';\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA"}
1
+ {"version":3,"names":[],"sources":["../../../../../src/components/XAdkProvider/context/index.ts"],"sourcesContent":["/**\n * XAdkProvider Context 导出\n * 提供拆分的 Context 和对应的 Hooks\n */\n\nexport * from \"./ChatStateContext\";\nexport * from \"./ChatActionContext\";\nexport * from \"./SessionContext\";\nexport * from \"./ChatSenderStateContext\";\nexport * from \"./DefaultLayoutContext\";\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA"}
@@ -12,7 +12,7 @@ import { ChatSenderStateContext } from "./context/ChatSenderStateContext";
12
12
  import useADKChat from "../../hooks/useADKChat";
13
13
  import { primaryBlue } from "../../styles/common";
14
14
  import { cssVarStyle } from "../../styles/tokens";
15
- import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/xgroup";
15
+ import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/runtime";
16
16
 
17
17
  /**
18
18
  * XAdkProvider Props (扩展版)
@@ -62,7 +62,7 @@ import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/x
62
62
  * </XAdkProvider>
63
63
  */
64
64
  var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
65
- var _config$showFeedback, _config$uploadRequest;
65
+ var _config$showFeedback, _config$allowUpload, _config$draggable, _config$uploadRequest;
66
66
  var _ref$url = _ref.url,
67
67
  url = _ref$url === void 0 ? window.location.origin : _ref$url,
68
68
  token = _ref.token,
@@ -134,6 +134,8 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
134
134
  setStateDelta = _data$setStateDelta === void 0 ? function () {} : _data$setStateDelta;
135
135
  var showFeedback = (_config$showFeedback = config === null || config === void 0 ? void 0 : config.showFeedback) !== null && _config$showFeedback !== void 0 ? _config$showFeedback : true;
136
136
  var onFileClick = config === null || config === void 0 ? void 0 : config.onFileClick;
137
+ var allowUpload = (_config$allowUpload = config === null || config === void 0 ? void 0 : config.allowUpload) !== null && _config$allowUpload !== void 0 ? _config$allowUpload : false;
138
+ var draggable = (_config$draggable = config === null || config === void 0 ? void 0 : config.draggable) !== null && _config$draggable !== void 0 ? _config$draggable : true;
137
139
  var presetUploadRequest = useMemo(function () {
138
140
  return resolvePresetUploadRequest(preset !== null && preset !== void 0 ? preset : config === null || config === void 0 ? void 0 : config.preset, {
139
141
  url: url,
@@ -224,10 +226,12 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
224
226
  return {
225
227
  loading: loading,
226
228
  uploadRequest: uploadRequest,
229
+ allowUpload: allowUpload,
230
+ draggable: draggable,
227
231
  senderValue: senderValue,
228
232
  setSenderValue: setSenderValue
229
233
  };
230
- }, [loading, uploadRequest, senderValue]);
234
+ }, [loading, uploadRequest, allowUpload, draggable, senderValue]);
231
235
  return /*#__PURE__*/_jsx(ConfigProvider, {
232
236
  theme: {
233
237
  token: {