@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.
- package/README.md +22 -0
- package/dist/cjs/components/FileGallery/index.js +59 -40
- package/dist/cjs/components/FileGallery/index.js.map +2 -2
- package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
- package/dist/cjs/components/FileGallery/styles.js +78 -0
- package/dist/cjs/components/FileGallery/styles.js.map +2 -2
- package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
- package/dist/cjs/components/Sources/index.d.ts +5 -0
- package/dist/cjs/components/Sources/index.js +162 -0
- package/dist/cjs/components/Sources/index.js.map +7 -0
- package/dist/cjs/components/Sources/styles.d.ts +59 -0
- package/dist/cjs/components/Sources/styles.js +179 -0
- package/dist/cjs/components/Sources/styles.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +232 -22
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +83 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +75 -8
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
- package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +30 -12
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
- package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
- package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +11 -10
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +759 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
- package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
- package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
- package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
- package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
- package/dist/cjs/components/XAdkSender/index.js +422 -150
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.d.ts +19 -0
- package/dist/cjs/components/XAdkSender/styles.js +225 -5
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.js +11 -1
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.js +5 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/index.d.ts +8 -3
- package/dist/cjs/index.js +44 -10
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/presets/base.d.ts +6 -0
- package/dist/cjs/presets/base.js +50 -0
- package/dist/cjs/presets/base.js.map +7 -0
- package/dist/cjs/presets/define.d.ts +11 -0
- package/dist/cjs/presets/define.js +58 -0
- package/dist/cjs/presets/define.js.map +7 -0
- package/dist/cjs/presets/index.d.ts +3 -0
- package/dist/cjs/presets/index.js +28 -0
- package/dist/cjs/presets/index.js.map +7 -0
- package/dist/cjs/presets/runtime.d.ts +22 -0
- package/dist/cjs/presets/runtime.js +75 -0
- package/dist/cjs/presets/runtime.js.map +7 -0
- package/dist/cjs/presets/xgroup/index.d.ts +5 -0
- package/dist/cjs/presets/xgroup/index.js +10 -0
- package/dist/cjs/presets/xgroup/index.js.map +2 -2
- package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js +162 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
- package/dist/cjs/presets/xgroup/preset.d.ts +1 -13
- package/dist/cjs/presets/xgroup/preset.js +16 -37
- package/dist/cjs/presets/xgroup/preset.js.map +2 -2
- package/dist/cjs/presets/xgroup/strategies.d.ts +5 -4
- package/dist/cjs/presets/xgroup/strategies.js +11 -15
- package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
- package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
- package/dist/cjs/presets/xgroup/webReference.js +85 -0
- package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
- package/dist/cjs/types/ChatStrategies.d.ts +11 -2
- package/dist/cjs/types/ChatStrategies.js.map +1 -1
- package/dist/cjs/types/FileGallery.d.ts +3 -0
- package/dist/cjs/types/FileGallery.js.map +1 -1
- package/dist/cjs/types/Sources.d.ts +30 -0
- package/dist/cjs/types/Sources.js +18 -0
- package/dist/cjs/types/Sources.js.map +7 -0
- package/dist/cjs/types/XAdkChatbot.d.ts +33 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +154 -8
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +3 -1
- package/dist/cjs/utils/index.js.map +2 -2
- package/dist/cjs/utils/markdownResource.d.ts +14 -0
- package/dist/cjs/utils/markdownResource.js +131 -0
- package/dist/cjs/utils/markdownResource.js.map +7 -0
- package/dist/esm/components/FileGallery/index.js +22 -16
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FileGallery/styles.d.ts +7 -0
- package/dist/esm/components/FileGallery/styles.js +24 -17
- package/dist/esm/components/FileGallery/styles.js.map +1 -1
- package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
- package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
- package/dist/esm/components/Sources/index.d.ts +5 -0
- package/dist/esm/components/Sources/index.js +127 -0
- package/dist/esm/components/Sources/index.js.map +1 -0
- package/dist/esm/components/Sources/styles.d.ts +59 -0
- package/dist/esm/components/Sources/styles.js +34 -0
- package/dist/esm/components/Sources/styles.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +190 -11
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/index.js +55 -10
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +40 -17
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -6
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
- package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
- package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/esm/components/XAdkProvider/context/index.js +1 -0
- package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +7 -3
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js +734 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
- package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/esm/components/XAdkSender/InputTags.js +37 -0
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
- package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/esm/components/XAdkSender/QuickList.js +96 -0
- package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.d.ts +1 -6
- package/dist/esm/components/XAdkSender/index.js +476 -143
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.d.ts +19 -0
- package/dist/esm/components/XAdkSender/styles.js +34 -12
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.js +3 -3
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/hooks/useADKChat.js +8 -2
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/index.d.ts +8 -3
- package/dist/esm/index.js +7 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/presets/base.d.ts +6 -0
- package/dist/esm/presets/base.js +28 -0
- package/dist/esm/presets/base.js.map +1 -0
- package/dist/esm/presets/define.d.ts +11 -0
- package/dist/esm/presets/define.js +33 -0
- package/dist/esm/presets/define.js.map +1 -0
- package/dist/esm/presets/index.d.ts +3 -0
- package/dist/esm/presets/index.js +4 -0
- package/dist/esm/presets/index.js.map +1 -0
- package/dist/esm/presets/runtime.d.ts +22 -0
- package/dist/esm/presets/runtime.js +45 -0
- package/dist/esm/presets/runtime.js.map +1 -0
- package/dist/esm/presets/xgroup/index.d.ts +5 -0
- package/dist/esm/presets/xgroup/index.js +6 -0
- package/dist/esm/presets/xgroup/index.js.map +1 -1
- package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js +95 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
- package/dist/esm/presets/xgroup/preset.d.ts +1 -13
- package/dist/esm/presets/xgroup/preset.js +9 -29
- package/dist/esm/presets/xgroup/preset.js.map +1 -1
- package/dist/esm/presets/xgroup/strategies.d.ts +5 -4
- package/dist/esm/presets/xgroup/strategies.js +8 -20
- package/dist/esm/presets/xgroup/strategies.js.map +1 -1
- package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
- package/dist/esm/presets/xgroup/webReference.js +46 -0
- package/dist/esm/presets/xgroup/webReference.js.map +1 -0
- package/dist/esm/types/ChatStrategies.d.ts +11 -2
- package/dist/esm/types/ChatStrategies.js.map +1 -1
- package/dist/esm/types/FileGallery.d.ts +3 -0
- package/dist/esm/types/FileGallery.js.map +1 -1
- package/dist/esm/types/Sources.d.ts +30 -0
- package/dist/esm/types/Sources.js +2 -0
- package/dist/esm/types/Sources.js.map +1 -0
- package/dist/esm/types/XAdkChatbot.d.ts +33 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +154 -8
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/markdownResource.d.ts +14 -0
- package/dist/esm/utils/markdownResource.js +101 -0
- package/dist/esm/utils/markdownResource.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +6 -1
- package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/cjs/components/XAdkSender/Switch.js +0 -95
- package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
- package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/esm/components/XAdkSender/Switch.js +0 -53
- 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-
|
|
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
|
-
/**
|
|
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
|
-
|
|
26
|
-
|
|
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
|
|
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
|
-
|
|
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:
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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","
|
|
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,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;
|
|
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
|
|
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
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
5
|
+
export * from "./ChatStateContext";
|
|
6
|
+
export * from "./ChatActionContext";
|
|
7
|
+
export * from "./SessionContext";
|
|
8
|
+
export * from "./ChatSenderStateContext";
|
|
9
|
+
export * from "./DefaultLayoutContext";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../../../src/components/XAdkProvider/context/index.ts"],"sourcesContent":["/**\n * XAdkProvider Context 导出\n * 提供拆分的 Context 和对应的 Hooks\n */\n\nexport * from
|
|
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/
|
|
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: {
|