@ai-group/chat-sdk 3.5.13 → 3.6.0

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 (38) hide show
  1. package/dist/cjs/components/FileGallery/index.js +1 -1
  2. package/dist/cjs/components/FileGallery/index.js.map +1 -1
  3. package/dist/cjs/components/FolderTree/styles.js +4 -1
  4. package/dist/cjs/components/FolderTree/styles.js.map +2 -2
  5. package/dist/cjs/components/XAdkProvider/index.js +2 -0
  6. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  7. package/dist/cjs/components/XAdkThoughtChain/index.js +75 -39
  8. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  9. package/dist/cjs/components/XAdkThoughtChain/styles.js +27 -26
  10. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  11. package/dist/cjs/index.d.ts +2 -1
  12. package/dist/cjs/index.js +9 -0
  13. package/dist/cjs/index.js.map +2 -2
  14. package/dist/cjs/styles/tokens.d.ts +27 -0
  15. package/dist/cjs/styles/tokens.js +72 -0
  16. package/dist/cjs/styles/tokens.js.map +7 -0
  17. package/dist/cjs/types/XAdkThoughtChain.d.ts +13 -0
  18. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  19. package/dist/esm/components/FileGallery/index.js +1 -1
  20. package/dist/esm/components/FileGallery/index.js.map +1 -1
  21. package/dist/esm/components/FolderTree/styles.js +2 -2
  22. package/dist/esm/components/FolderTree/styles.js.map +1 -1
  23. package/dist/esm/components/XAdkProvider/index.js +3 -2
  24. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  25. package/dist/esm/components/XAdkThoughtChain/index.js +100 -50
  26. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  27. package/dist/esm/components/XAdkThoughtChain/styles.js +20 -19
  28. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  29. package/dist/esm/index.d.ts +2 -1
  30. package/dist/esm/index.js +3 -0
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/styles/tokens.d.ts +27 -0
  33. package/dist/esm/styles/tokens.js +42 -0
  34. package/dist/esm/styles/tokens.js.map +1 -0
  35. package/dist/esm/types/XAdkThoughtChain.d.ts +13 -0
  36. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  37. package/dist/umd/chat-sdk.min.js +1 -1
  38. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkThoughtChain/styles.tsx"],
4
- "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { css, keyframes } from \"@emotion/css\";\nimport { withBasicStyles, lightBlue, primaryBlue } from \"@/styles/common\";\n\nconst blinkAnimation = keyframes`\n 0% { background-position-x: -200%; background-position-y: 100%; }\n 25% { background-position-x: -100%; background-position-y: 100%; }\n 50% { background-position-x: 0%; background-position-y: 100%; }\n 75% { background-position-x: 100%; background-position-y: 100%; }\n 100% { background-position-x: 200%; background-position-y: 100%; }\n`;\n\nexport const useStyles = withBasicStyles(() => ({\n /* --- ThoughtChain --- */\n\n thoughtChainBlock: css`\n margin-bottom: 16px;\n border-radius: 8px;\n overflow: hidden;\n `,\n\n thoughtHeader: css`\n display: flex;\n align-items: center;\n padding: 10px 14px;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n &:hover {\n background: #f0f0f0;\n border-color: #ccc;\n }\n `,\n\n headerLeft: css`\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n\n caret: css`\n font-size: 12px;\n color: #8194ad;\n transition: transform 0.2s;\n &.open {\n transform: rotate(90deg);\n }\n `,\n\n statusIcon: css`\n font-size: 14px;\n display: flex;\n align-items: center;\n `,\n\n headerTitle: css`\n font-size: 13px;\n color: #8194ad;\n font-weight: 500;\n `,\n\n headerRight: css``,\n\n thinkingBody: css`\n padding: 0 16px;\n animation: fadeIn 0.2s ease-in-out;\n `,\n\n /* --- Timeline --- */\n\n timeline: css`\n width: 100%;\n `,\n\n timelineItem: css`\n display: flex;\n gap: 12px;\n position: relative;\n `,\n\n timelineLeft: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 20px;\n flex-shrink: 0;\n `,\n\n timelineIcon: css`\n color: #8194ad;\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineIconTool: css`\n color: #faad14;\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineConnector: css`\n flex: 1;\n width: 1px;\n background-color: #e5e5e5;\n margin: 4px 0;\n min-height: 12px;\n `,\n\n /* Hide connector on last item */\n timelineItemLastConnector: css`\n display: none;\n `,\n\n timelineRight: css`\n flex: 1;\n padding-bottom: 8px;\n min-width: 0;\n `,\n\n collapsibleHeader: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 8px;\n margin: 0 -8px 4px -8px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n\n &:hover {\n background: #f5f5f5;\n }\n `,\n\n titleText: css`\n font-size: 13px;\n font-weight: 600;\n color: #8194ad;\n `,\n\n toolTitleGroup: css`\n display: flex;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n `,\n\n toolName: css`\n font-size: 13px;\n font-weight: 600;\n color: #8194ad;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n\n toolStatusTag: css`\n font-size: 11px;\n color: #52c41a;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n padding: 0 6px;\n border-radius: 4px;\n flex-shrink: 0;\n `,\n\n arrowIcon: css`\n font-size: 10px;\n color: #bbb;\n margin-left: 8px;\n `,\n\n stepContent: css`\n font-size: 13px;\n color: #8194ad;\n line-height: 1.6;\n padding-left: 4px;\n `,\n\n statusInfo: css`\n font-size: 12px;\n color: #8194ad;\n margin-bottom: 4px;\n font-style: italic;\n `,\n\n blink: css`\n color: #8194ad;\n background-image: linear-gradient(\n 90deg,\n transparent,\n rgba(0, 0, 0, 0.88),\n transparent\n );\n background-clip: text;\n -webkit-background-clip: text;\n background-size: 50%;\n background-repeat: no-repeat;\n animation-name: ${blinkAnimation};\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n `,\n}));\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA+B;AAC/B,oBAAwD;AAExD,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAG9C,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaf,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASP,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAMb,aAAa;AAAA,EAEb,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,UAAU;AAAA;AAAA;AAAA,EAIV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnB,2BAA2B;AAAA;AAAA;AAAA,EAI3B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBnB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASV,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUf,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAYa;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,EAAE;",
4
+ "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { css, keyframes } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\nimport { token, tokens } from \"@/styles/tokens\";\n\nconst blinkAnimation = keyframes`\n 0% { background-position-x: -200%; background-position-y: 100%; }\n 25% { background-position-x: -100%; background-position-y: 100%; }\n 50% { background-position-x: 0%; background-position-y: 100%; }\n 75% { background-position-x: 100%; background-position-y: 100%; }\n 100% { background-position-x: 200%; background-position-y: 100%; }\n`;\n\nexport const useStyles = withBasicStyles(() => ({\n /* --- ThoughtChain --- */\n\n thoughtChainBlock: css`\n margin-bottom: ${token(tokens.spacingMd)};\n border-radius: ${token(tokens.borderRadius)};\n overflow: hidden;\n `,\n\n thoughtHeader: css`\n display: flex;\n align-items: center;\n padding: 10px 14px;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n &:hover {\n background: ${token(tokens.colorBgHover)};\n border-color: #ccc;\n }\n `,\n\n headerLeft: css`\n display: flex;\n align-items: center;\n gap: ${token(tokens.spacingSm)};\n `,\n\n caret: css`\n font-size: ${token(tokens.fontSizeSm)};\n color: ${token(tokens.colorTextSecondary)};\n transition: transform 0.2s;\n &.open {\n transform: rotate(90deg);\n }\n `,\n\n statusIcon: css`\n font-size: 14px;\n display: flex;\n align-items: center;\n `,\n\n headerTitle: css`\n font-size: ${token(tokens.fontSizeBase)};\n color: ${token(tokens.colorTextSecondary)};\n font-weight: 500;\n `,\n\n headerRight: css``,\n\n thinkingBody: css`\n padding: 0 ${token(tokens.spacingMd)};\n animation: fadeIn 0.2s ease-in-out;\n `,\n\n /* --- Timeline --- */\n\n timeline: css`\n width: 100%;\n `,\n\n timelineItem: css`\n display: flex;\n gap: 12px;\n position: relative;\n `,\n\n timelineLeft: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 20px;\n flex-shrink: 0;\n `,\n\n timelineIcon: css`\n color: ${token(tokens.colorTextSecondary)};\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineIconTool: css`\n color: ${token(tokens.colorWarning)};\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineConnector: css`\n flex: 1;\n width: 1px;\n background-color: ${token(tokens.colorBorder)};\n margin: 4px 0;\n min-height: 12px;\n `,\n\n /* Hide connector on last item */\n timelineItemLastConnector: css`\n display: none;\n `,\n\n timelineRight: css`\n flex: 1;\n padding-bottom: ${token(tokens.spacingSm)};\n min-width: 0;\n `,\n\n collapsibleHeader: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 8px;\n margin: 0 -8px 4px -8px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n\n &:hover {\n background: ${token(tokens.colorBgHover)};\n }\n `,\n\n titleText: css`\n font-size: ${token(tokens.fontSizeBase)};\n font-weight: 600;\n color: ${token(tokens.colorTextSecondary)};\n `,\n\n toolTitleGroup: css`\n display: flex;\n align-items: center;\n gap: ${token(tokens.spacingSm)};\n overflow: hidden;\n `,\n\n toolName: css`\n font-size: ${token(tokens.fontSizeBase)};\n font-weight: 600;\n color: ${token(tokens.colorTextSecondary)};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n\n toolStatusTag: css`\n font-size: 11px;\n color: ${token(tokens.colorSuccess)};\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n padding: 0 6px;\n border-radius: 4px;\n flex-shrink: 0;\n `,\n\n arrowIcon: css`\n font-size: 10px;\n color: #bbb;\n margin-left: ${token(tokens.spacingSm)};\n `,\n\n stepContent: css`\n font-size: ${token(tokens.fontSizeBase)};\n color: ${token(tokens.colorTextSecondary)};\n line-height: 1.6;\n padding-left: 4px;\n `,\n\n statusInfo: css`\n font-size: ${token(tokens.fontSizeSm)};\n color: ${token(tokens.colorTextSecondary)};\n margin-bottom: 4px;\n font-style: italic;\n `,\n\n blink: css`\n color: ${token(tokens.colorTextSecondary)};\n background-image: linear-gradient(\n 90deg,\n transparent,\n rgba(0, 0, 0, 0.88),\n transparent\n );\n background-clip: text;\n -webkit-background-clip: text;\n background-size: 50%;\n background-repeat: no-repeat;\n animation-name: ${blinkAnimation};\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n `,\n}));\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA+B;AAC/B,oBAAgC;AAChC,oBAA8B;AAE9B,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAG9C,mBAAmB;AAAA,yBACA,qBAAM,qBAAO,SAAS;AAAA,yBACtB,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA,EAI5C,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQG,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA,EAK3C,YAAY;AAAA;AAAA;AAAA,eAGH,qBAAM,qBAAO,SAAS;AAAA;AAAA,EAG/B,OAAO;AAAA,qBACQ,qBAAM,qBAAO,UAAU;AAAA,iBAC3B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA,qBACE,qBAAM,qBAAO,YAAY;AAAA,iBAC7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA,EAI1C,aAAa;AAAA,EAEb,cAAc;AAAA,qBACC,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA;AAAA,EAMrC,UAAU;AAAA;AAAA;AAAA,EAIV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,cAAc;AAAA,iBACH,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,kBAAkB;AAAA,iBACP,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA,EAKpC,mBAAmB;AAAA;AAAA;AAAA,4BAGG,qBAAM,qBAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9C,2BAA2B;AAAA;AAAA;AAAA,EAI3B,eAAe;AAAA;AAAA,0BAEK,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA,EAI1C,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAYD,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA,EAI3C,WAAW;AAAA,qBACI,qBAAM,qBAAO,YAAY;AAAA;AAAA,iBAE7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA,EAG1C,gBAAgB;AAAA;AAAA;AAAA,eAGP,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA,EAI/B,UAAU;AAAA,qBACK,qBAAM,qBAAO,YAAY;AAAA;AAAA,iBAE7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,eAAe;AAAA;AAAA,iBAEJ,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpC,WAAW;AAAA;AAAA;AAAA,uBAGM,qBAAM,qBAAO,SAAS;AAAA;AAAA,EAGvC,aAAa;AAAA,qBACE,qBAAM,qBAAO,YAAY;AAAA,iBAC7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,YAAY;AAAA,qBACG,qBAAM,qBAAO,UAAU;AAAA,iBAC3B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,OAAO;AAAA,iBACI,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAWtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,EAAE;",
6
6
  "names": []
7
7
  }
@@ -27,4 +27,5 @@ export { default as FunctionCallRender } from "./components/XAdkChatbot/componen
27
27
  export { default as ThinkRender } from "./components/XAdkChatbot/components/ThinkRender";
28
28
  export type { MarkdownRenderProps } from "./components/XAdkChatbot/components/MarkdownRender";
29
29
  export type { FunctionCallRenderProps } from "./types/FunctionCallRender";
30
- export type { XAdkThoughtChainProps, ThoughtChainItemType, } from "./types/XAdkThoughtChain";
30
+ export type { XAdkThoughtChainProps, ThoughtChainItemType, ThoughtChainStatus, } from "./types/XAdkThoughtChain";
31
+ export { tokens, tokenDefaults, token, cssVarStyle } from "./styles/tokens";
package/dist/cjs/index.js CHANGED
@@ -49,10 +49,14 @@ __export(src_exports, {
49
49
  basePreset: () => import_xGroupAdk.basePreset,
50
50
  baseToolKindResolver: () => import_xGroupAdk.baseToolKindResolver,
51
51
  createXGroupUploadRequest: () => import_xGroupAdk.createXGroupUploadRequest,
52
+ cssVarStyle: () => import_tokens.cssVarStyle,
52
53
  mergeChatStrategies: () => import_xGroupAdk.mergeChatStrategies,
53
54
  request: () => import_request.default,
54
55
  resolveChatPreset: () => import_xGroupAdk.resolveChatPreset,
55
56
  resolvePresetUploadRequest: () => import_xGroupAdk.resolvePresetUploadRequest,
57
+ token: () => import_tokens.token,
58
+ tokenDefaults: () => import_tokens.tokenDefaults,
59
+ tokens: () => import_tokens.tokens,
56
60
  useADKChat: () => import_useADKChat.default,
57
61
  useChatActions: () => import_context.useChatActions,
58
62
  useChatState: () => import_context.useChatState,
@@ -85,6 +89,7 @@ var import_FolderTree = __toESM(require("./components/FolderTree"));
85
89
  var import_MarkdownRender = __toESM(require("./components/XAdkChatbot/components/MarkdownRender"));
86
90
  var import_FunctionCallRender = __toESM(require("./components/XAdkChatbot/components/FunctionCallRender"));
87
91
  var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/ThinkRender"));
92
+ var import_tokens = require("./styles/tokens");
88
93
  // Annotate the CommonJS export names for ESM import in node:
89
94
  0 && (module.exports = {
90
95
  FileGallery,
@@ -106,10 +111,14 @@ var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/Th
106
111
  basePreset,
107
112
  baseToolKindResolver,
108
113
  createXGroupUploadRequest,
114
+ cssVarStyle,
109
115
  mergeChatStrategies,
110
116
  request,
111
117
  resolveChatPreset,
112
118
  resolvePresetUploadRequest,
119
+ token,
120
+ tokenDefaults,
121
+ tokens,
113
122
  useADKChat,
114
123
  useChatActions,
115
124
  useChatState,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n} from \"./types/XAdkThoughtChain\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
4
+ "sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n ThoughtChainStatus,\n} from \"./types/XAdkThoughtChain\";\n\n// 设计令牌导出 - 供引用方覆盖样式\nexport { tokens, tokenDefaults, token, cssVarStyle } from \"./styles/tokens\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;AAYvC,oBAA0D;",
6
6
  "names": ["FileGallery", "FolderTree", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkSenderSwitch", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
7
7
  }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * CSS Variables 设计令牌统一管理
3
+ *
4
+ * 引用方可通过在父容器设置同名 CSS 变量来覆盖组件样式:
5
+ * .my-app { --xadk-color-primary: #7c3aed; }
6
+ */
7
+ /** CSS 变量名常量 */
8
+ export declare const tokens: {
9
+ readonly colorPrimary: "--xadk-color-primary";
10
+ readonly colorSuccess: "--xadk-color-success";
11
+ readonly colorError: "--xadk-color-error";
12
+ readonly colorWarning: "--xadk-color-warning";
13
+ readonly colorTextSecondary: "--xadk-color-text-secondary";
14
+ readonly colorBorder: "--xadk-color-border";
15
+ readonly colorBgHover: "--xadk-color-bg-hover";
16
+ readonly fontSizeSm: "--xadk-font-size-sm";
17
+ readonly fontSizeBase: "--xadk-font-size-base";
18
+ readonly borderRadius: "--xadk-border-radius";
19
+ readonly spacingSm: "--xadk-spacing-sm";
20
+ readonly spacingMd: "--xadk-spacing-md";
21
+ };
22
+ /** 默认值映射 */
23
+ export declare const tokenDefaults: Record<string, string>;
24
+ /** 生成 var() 引用(带 fallback 默认值) */
25
+ export declare const token: (name: string, fallback?: string) => string;
26
+ /** 将 tokenDefaults 转为可注入到 style 属性的对象 */
27
+ export declare const cssVarStyle: Record<string, string>;
@@ -0,0 +1,72 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/styles/tokens.ts
20
+ var tokens_exports = {};
21
+ __export(tokens_exports, {
22
+ cssVarStyle: () => cssVarStyle,
23
+ token: () => token,
24
+ tokenDefaults: () => tokenDefaults,
25
+ tokens: () => tokens
26
+ });
27
+ module.exports = __toCommonJS(tokens_exports);
28
+ var tokens = {
29
+ // 颜色
30
+ colorPrimary: "--xadk-color-primary",
31
+ colorSuccess: "--xadk-color-success",
32
+ colorError: "--xadk-color-error",
33
+ colorWarning: "--xadk-color-warning",
34
+ colorTextSecondary: "--xadk-color-text-secondary",
35
+ colorBorder: "--xadk-color-border",
36
+ colorBgHover: "--xadk-color-bg-hover",
37
+ // 字体
38
+ fontSizeSm: "--xadk-font-size-sm",
39
+ fontSizeBase: "--xadk-font-size-base",
40
+ // 圆角
41
+ borderRadius: "--xadk-border-radius",
42
+ // 间距
43
+ spacingSm: "--xadk-spacing-sm",
44
+ spacingMd: "--xadk-spacing-md"
45
+ };
46
+ var tokenDefaults = {
47
+ [tokens.colorPrimary]: "#0078FF",
48
+ [tokens.colorSuccess]: "#52c41a",
49
+ [tokens.colorError]: "#ff4d4f",
50
+ [tokens.colorWarning]: "#faad14",
51
+ [tokens.colorTextSecondary]: "#8194ad",
52
+ [tokens.colorBorder]: "#e5e5e5",
53
+ [tokens.colorBgHover]: "#f5f5f5",
54
+ [tokens.fontSizeSm]: "12px",
55
+ [tokens.fontSizeBase]: "13px",
56
+ [tokens.borderRadius]: "8px",
57
+ [tokens.spacingSm]: "8px",
58
+ [tokens.spacingMd]: "16px"
59
+ };
60
+ var token = (name, fallback) => {
61
+ const defaultVal = fallback ?? tokenDefaults[name];
62
+ return defaultVal ? `var(${name}, ${defaultVal})` : `var(${name})`;
63
+ };
64
+ var cssVarStyle = { ...tokenDefaults };
65
+ // Annotate the CommonJS export names for ESM import in node:
66
+ 0 && (module.exports = {
67
+ cssVarStyle,
68
+ token,
69
+ tokenDefaults,
70
+ tokens
71
+ });
72
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/styles/tokens.ts"],
4
+ "sourcesContent": ["/**\n * CSS Variables 设计令牌统一管理\n *\n * 引用方可通过在父容器设置同名 CSS 变量来覆盖组件样式:\n * .my-app { --xadk-color-primary: #7c3aed; }\n */\n\n/** CSS 变量名常量 */\nexport const tokens = {\n // 颜色\n colorPrimary: \"--xadk-color-primary\",\n colorSuccess: \"--xadk-color-success\",\n colorError: \"--xadk-color-error\",\n colorWarning: \"--xadk-color-warning\",\n colorTextSecondary: \"--xadk-color-text-secondary\",\n colorBorder: \"--xadk-color-border\",\n colorBgHover: \"--xadk-color-bg-hover\",\n\n // 字体\n fontSizeSm: \"--xadk-font-size-sm\",\n fontSizeBase: \"--xadk-font-size-base\",\n\n // 圆角\n borderRadius: \"--xadk-border-radius\",\n\n // 间距\n spacingSm: \"--xadk-spacing-sm\",\n spacingMd: \"--xadk-spacing-md\",\n} as const;\n\n/** 默认值映射 */\nexport const tokenDefaults: Record<string, string> = {\n [tokens.colorPrimary]: \"#0078FF\",\n [tokens.colorSuccess]: \"#52c41a\",\n [tokens.colorError]: \"#ff4d4f\",\n [tokens.colorWarning]: \"#faad14\",\n [tokens.colorTextSecondary]: \"#8194ad\",\n [tokens.colorBorder]: \"#e5e5e5\",\n [tokens.colorBgHover]: \"#f5f5f5\",\n [tokens.fontSizeSm]: \"12px\",\n [tokens.fontSizeBase]: \"13px\",\n [tokens.borderRadius]: \"8px\",\n [tokens.spacingSm]: \"8px\",\n [tokens.spacingMd]: \"16px\",\n};\n\n/** 生成 var() 引用(带 fallback 默认值) */\nexport const token = (name: string, fallback?: string): string => {\n const defaultVal = fallback ?? tokenDefaults[name];\n return defaultVal ? `var(${name}, ${defaultVal})` : `var(${name})`;\n};\n\n/** 将 tokenDefaults 转为可注入到 style 属性的对象 */\nexport const cssVarStyle: Record<string, string> = { ...tokenDefaults };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,IAAM,SAAS;AAAA;AAAA,EAEpB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb,cAAc;AAAA;AAAA,EAGd,YAAY;AAAA,EACZ,cAAc;AAAA;AAAA,EAGd,cAAc;AAAA;AAAA,EAGd,WAAW;AAAA,EACX,WAAW;AACb;AAGO,IAAM,gBAAwC;AAAA,EACnD,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,UAAU,GAAG;AAAA,EACrB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,kBAAkB,GAAG;AAAA,EAC7B,CAAC,OAAO,WAAW,GAAG;AAAA,EACtB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,UAAU,GAAG;AAAA,EACrB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,SAAS,GAAG;AAAA,EACpB,CAAC,OAAO,SAAS,GAAG;AACtB;AAGO,IAAM,QAAQ,CAAC,MAAc,aAA8B;AAChE,QAAM,aAAa,YAAY,cAAc,IAAI;AACjD,SAAO,aAAa,OAAO,SAAS,gBAAgB,OAAO;AAC7D;AAGO,IAAM,cAAsC,EAAE,GAAG,cAAc;",
6
+ "names": []
7
+ }
@@ -1,7 +1,18 @@
1
1
  import React, { type ReactNode } from "react";
2
2
  import { IMessage, RenderFunctionCall, ToolRenderKind, ChatStrategies } from "./";
3
+ export type ThoughtChainStatus = "pending" | "loading" | "success" | "error";
3
4
  export interface XAdkThoughtChainProps {
5
+ /** 是否显示外层可折叠 header(默认 false) */
6
+ collapsible?: boolean;
7
+ /** 状态枚举,优先级高于 loading(默认 'success') */
8
+ status?: ThoughtChainStatus;
9
+ /** 标准 className */
10
+ className?: string;
11
+ /** 标准 style */
12
+ style?: React.CSSProperties;
13
+ /** 默认展开状态,仅在 collapsible=true 时生效 */
4
14
  defaultOpen?: boolean;
15
+ /** @deprecated 使用 status='loading' 替代,保留向后兼容 */
5
16
  loading?: boolean;
6
17
  title?: ReactNode;
7
18
  items: ThoughtChainItemType[];
@@ -32,4 +43,6 @@ export interface ThoughtChainItemType {
32
43
  title?: ReactNode;
33
44
  collapsible?: boolean;
34
45
  msg?: IMessage;
46
+ /** item 级别状态 */
47
+ status?: ThoughtChainStatus;
35
48
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAdkThoughtChain.ts"],
4
- "sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport {\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n ChatStrategies,\n} from \"@/types\";\n\nexport interface XAdkThoughtChainProps {\n defaultOpen?: boolean;\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean;\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */\n strategies?: ChatStrategies;\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n blink?: boolean;\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\";\n key: string;\n content: string;\n title?: ReactNode;\n collapsible?: boolean;\n msg?: IMessage;\n}\n"],
4
+ "sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport {\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n ChatStrategies,\n} from \"@/types\";\n\nexport type ThoughtChainStatus = \"pending\" | \"loading\" | \"success\" | \"error\";\n\nexport interface XAdkThoughtChainProps {\n /** 是否显示外层可折叠 header(默认 false) */\n collapsible?: boolean;\n /** 状态枚举,优先级高于 loading(默认 'success') */\n status?: ThoughtChainStatus;\n /** 标准 className */\n className?: string;\n /** 标准 style */\n style?: React.CSSProperties;\n /** 默认展开状态,仅在 collapsible=true 时生效 */\n defaultOpen?: boolean;\n /** @deprecated 使用 status='loading' 替代,保留向后兼容 */\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean;\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */\n strategies?: ChatStrategies;\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n blink?: boolean;\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\";\n key: string;\n content: string;\n title?: ReactNode;\n collapsible?: boolean;\n msg?: IMessage;\n /** item 级别状态 */\n status?: ThoughtChainStatus;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -276,7 +276,7 @@ var FileGallery = function FileGallery(_ref) {
276
276
  children: [/*#__PURE__*/_jsx(Image, {
277
277
  src: url,
278
278
  alt: fileName,
279
- fallback: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
279
+ fallback: "data:image/png;base64,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",
280
280
  preview: _onClick ? false : {
281
281
  src: url
282
282
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useEffect","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","FileZipOutlined","VideoCameraOutlined","FileMarkdownOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","isImageFile","startsWith","fileName","match","url","isAudioFile","isVideoFile","isZipFile","isMarkdownFile","getFileExtension","filename","ext","split","pop","toLowerCase","getFileIcon","icon","color","includes","formatFileSize","bytes","toFixed","styles","FileGallery","_ref","_ref$align","align","_ref$removable","removable","_ref$onRemove","onRemove","className","style","onClick","_useState","_useState2","_slicedToArray","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","isImage","isAudio","isVideo","isZip","isMarkdown","fileSize","fileId","concat","fileCard","_objectSpread","cursor","undefined","children","imageThumbnail","src","alt","fallback","preview","status","imageOverlay","percent","progress","strokeColor","fileInfo","title","length","substring","Number","fileRemoveBtn","disabled","fileIcon","controls","mediaWrapper","width","height","_getFileIcon","isExternalUrl","href","target","rel","fileLink","showInfo","errorMessage","fontSize","marginTop"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n FileZipOutlined,\n VideoCameraOutlined,\n FileMarkdownOutlined,\n} from \"@ant-design/icons\";\nimport { FileItem, FileGalleryProps } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\n/**\n * 获取文件名\n */\nconst getFileName = (file: FileItem): string => {\n return file.displayName || file.name || \"\";\n};\n\n/**\n * 获取文件大小\n */\nconst getFileSize = (file: FileItem): number => {\n return file.size || 0;\n};\n\n/**\n * 获取文件 MIME 类型\n */\nconst getMimeType = (file: FileItem): string => {\n return file.mimeType || file.type || \"\";\n};\n\n/**\n * 获取文件 URL\n */\nconst getFileUrl = (file: FileItem): string => {\n return (\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\"\n );\n};\n\n/**\n * 获取文件唯一标识\n */\nconst getFileId = (file: FileItem): string => {\n return file.id || file.uid || \"\";\n};\n\n/**\n * 判断是否是图片文件\n */\nconst isImageFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"image/\")) return true;\n\n const fileName = getFileName(file);\n if (fileName && fileName.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$/i))\n return true;\n\n const url = getFileUrl(file);\n if (url && url.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)(\\?.*)?$/i))\n return true;\n\n return false;\n};\n\n/**\n * 判断是否是音频文件\n */\nconst isAudioFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"audio/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp3|wav|m4a|aac|ogg|flac)$/i);\n};\n\n/**\n * 判断是否是视频文件\n */\nconst isVideoFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"video/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp4|mov|webm|mkv|avi)$/i);\n};\n\n/**\n * 判断是否是压缩包文件\n */\nconst isZipFile = (file: FileItem): boolean => {\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(zip|rar|7z|tar|gz|bz2|xz|tgz)$/i);\n};\n\n/**\n * 判断是否是 Markdown 文件\n */\nconst isMarkdownFile = (file: FileItem): boolean => {\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(md|markdown)$/i);\n};\n\n/**\n * 获取文件扩展名\n */\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\n/**\n * 获取文件图标和颜色\n */\nconst getFileIcon = (\n file: FileItem,\n): { icon: React.ReactNode; color: string } => {\n const ext = getFileExtension(getFileName(file));\n\n // PDF\n if (ext === \"pdf\") {\n return { icon: <FilePdfOutlined />, color: \"#ff4d4f\" };\n }\n\n // Word\n if ([\"doc\", \"docx\"].includes(ext)) {\n return { icon: <FileWordOutlined />, color: \"#1677ff\" };\n }\n\n // Excel\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) {\n return { icon: <FileExcelOutlined />, color: \"#22b35e\" };\n }\n\n // PPT\n if ([\"ppt\", \"pptx\"].includes(ext)) {\n return { icon: <FilePptOutlined />, color: \"#ff6e31\" };\n }\n\n // Audio\n if ([\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"].includes(ext)) {\n return { icon: <AudioOutlined />, color: \"#722ed1\" };\n }\n\n // Video\n if ([\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"].includes(ext)) {\n return { icon: <VideoCameraOutlined />, color: \"#fa8c16\" };\n }\n\n // 压缩包\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\", \"xz\", \"tgz\"].includes(ext)) {\n return { icon: <FileZipOutlined />, color: \"#eb2f96\" };\n }\n\n // Markdown\n if ([\"md\", \"markdown\"].includes(ext)) {\n return { icon: <FileMarkdownOutlined />, color: \"#13c2c2\" };\n }\n\n // 图片\n if (isImageFile(file)) {\n return { icon: <FileImageOutlined />, color: \"#8c8c8c\" };\n }\n\n // 默认\n return { icon: <FileOutlined />, color: \"#8c8c8c\" };\n};\n\n/**\n * 格式化文件大小\n */\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst styles = useStyles();\n\n/**\n * FileGallery - 单文件展示组件\n *\n * 功能特性:\n * - 📁 支持多种文件类型展示 (图片、音频、视频、文档等)\n * - 🖼️ 图片支持预览和缩略图\n * - 🎵 音频文件支持内联播放\n * - 🎬 视频文件支持内联播放\n * - 📊 显示文件大小、类型图标\n * - 🗑️ 支持删除操作\n * - 📤 支持上传进度显示\n * - 🎨 支持卡片内部布局控制(align:图标和信息的排列方式)\n *\n * @example\n * // XAdkSender 场景 - 可删除的本地文件\n * {files.map(file => (\n * <FileGallery\n * key={file.id}\n * file={file}\n * removable\n * onRemove={handleRemove}\n * />\n * ))}\n *\n * @example\n * // XadkChatbot 场景 - 只读的远程文件\n * {files.map(file => (\n * <FileGallery key={file.id} file={file} />\n * ))}\n */\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n}) => {\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const isImage = isImageFile(file);\n const isAudio = isAudioFile(file);\n const isVideo = isVideoFile(file);\n const isZip = isZipFile(file);\n const isMarkdown = isMarkdownFile(file);\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n\n // 图片文件\n if (isImage) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n {/* 图片缩略图 */}\n <div className={styles.imageThumbnail}>\n <Image\n src={url}\n alt={fileName}\n fallback=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n preview={onClick ? false : { src: url }}\n />\n\n {/* 上传进度遮罩 */}\n {file.status === \"uploading\" && (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n )}\n </div>\n\n {/* 文件信息 */}\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {/* 删除按钮 */}\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 音频文件\n if (isAudio) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#722ed1\" }}>\n <AudioOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <audio\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 28 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 视频文件\n if (isVideo) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#fa8c16\" }}>\n <VideoCameraOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <video\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 40 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 其他文件\n const { icon, color } = getFileIcon(file);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div className={styles.fileIcon} style={{ color }}>\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={styles.progress}\n />\n ) : (\n fileSize > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{\n fontSize: \"11px\",\n color: \"#ff4d4f\",\n marginTop: \"2px\",\n }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useState","useEffect","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","FileZipOutlined","VideoCameraOutlined","FileMarkdownOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","isImageFile","startsWith","fileName","match","url","isAudioFile","isVideoFile","isZipFile","isMarkdownFile","getFileExtension","filename","ext","split","pop","toLowerCase","getFileIcon","icon","color","includes","formatFileSize","bytes","toFixed","styles","FileGallery","_ref","_ref$align","align","_ref$removable","removable","_ref$onRemove","onRemove","className","style","onClick","_useState","_useState2","_slicedToArray","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","isImage","isAudio","isVideo","isZip","isMarkdown","fileSize","fileId","concat","fileCard","_objectSpread","cursor","undefined","children","imageThumbnail","src","alt","fallback","preview","status","imageOverlay","percent","progress","strokeColor","fileInfo","title","length","substring","Number","fileRemoveBtn","disabled","fileIcon","controls","mediaWrapper","width","height","_getFileIcon","isExternalUrl","href","target","rel","fileLink","showInfo","errorMessage","fontSize","marginTop"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n FileZipOutlined,\n VideoCameraOutlined,\n FileMarkdownOutlined,\n} from \"@ant-design/icons\";\nimport { FileItem, FileGalleryProps } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\n/**\n * 获取文件名\n */\nconst getFileName = (file: FileItem): string => {\n return file.displayName || file.name || \"\";\n};\n\n/**\n * 获取文件大小\n */\nconst getFileSize = (file: FileItem): number => {\n return file.size || 0;\n};\n\n/**\n * 获取文件 MIME 类型\n */\nconst getMimeType = (file: FileItem): string => {\n return file.mimeType || file.type || \"\";\n};\n\n/**\n * 获取文件 URL\n */\nconst getFileUrl = (file: FileItem): string => {\n return (\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\"\n );\n};\n\n/**\n * 获取文件唯一标识\n */\nconst getFileId = (file: FileItem): string => {\n return file.id || file.uid || \"\";\n};\n\n/**\n * 判断是否是图片文件\n */\nconst isImageFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"image/\")) return true;\n\n const fileName = getFileName(file);\n if (fileName && fileName.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$/i))\n return true;\n\n const url = getFileUrl(file);\n if (url && url.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)(\\?.*)?$/i))\n return true;\n\n return false;\n};\n\n/**\n * 判断是否是音频文件\n */\nconst isAudioFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"audio/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp3|wav|m4a|aac|ogg|flac)$/i);\n};\n\n/**\n * 判断是否是视频文件\n */\nconst isVideoFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"video/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp4|mov|webm|mkv|avi)$/i);\n};\n\n/**\n * 判断是否是压缩包文件\n */\nconst isZipFile = (file: FileItem): boolean => {\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(zip|rar|7z|tar|gz|bz2|xz|tgz)$/i);\n};\n\n/**\n * 判断是否是 Markdown 文件\n */\nconst isMarkdownFile = (file: FileItem): boolean => {\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(md|markdown)$/i);\n};\n\n/**\n * 获取文件扩展名\n */\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\n/**\n * 获取文件图标和颜色\n */\nconst getFileIcon = (\n file: FileItem,\n): { icon: React.ReactNode; color: string } => {\n const ext = getFileExtension(getFileName(file));\n\n // PDF\n if (ext === \"pdf\") {\n return { icon: <FilePdfOutlined />, color: \"#ff4d4f\" };\n }\n\n // Word\n if ([\"doc\", \"docx\"].includes(ext)) {\n return { icon: <FileWordOutlined />, color: \"#1677ff\" };\n }\n\n // Excel\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) {\n return { icon: <FileExcelOutlined />, color: \"#22b35e\" };\n }\n\n // PPT\n if ([\"ppt\", \"pptx\"].includes(ext)) {\n return { icon: <FilePptOutlined />, color: \"#ff6e31\" };\n }\n\n // Audio\n if ([\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"].includes(ext)) {\n return { icon: <AudioOutlined />, color: \"#722ed1\" };\n }\n\n // Video\n if ([\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"].includes(ext)) {\n return { icon: <VideoCameraOutlined />, color: \"#fa8c16\" };\n }\n\n // 压缩包\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\", \"xz\", \"tgz\"].includes(ext)) {\n return { icon: <FileZipOutlined />, color: \"#eb2f96\" };\n }\n\n // Markdown\n if ([\"md\", \"markdown\"].includes(ext)) {\n return { icon: <FileMarkdownOutlined />, color: \"#13c2c2\" };\n }\n\n // 图片\n if (isImageFile(file)) {\n return { icon: <FileImageOutlined />, color: \"#8c8c8c\" };\n }\n\n // 默认\n return { icon: <FileOutlined />, color: \"#8c8c8c\" };\n};\n\n/**\n * 格式化文件大小\n */\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst styles = useStyles();\n\n/**\n * FileGallery - 单文件展示组件\n *\n * 功能特性:\n * - 📁 支持多种文件类型展示 (图片、音频、视频、文档等)\n * - 🖼️ 图片支持预览和缩略图\n * - 🎵 音频文件支持内联播放\n * - 🎬 视频文件支持内联播放\n * - 📊 显示文件大小、类型图标\n * - 🗑️ 支持删除操作\n * - 📤 支持上传进度显示\n * - 🎨 支持卡片内部布局控制(align:图标和信息的排列方式)\n *\n * @example\n * // XAdkSender 场景 - 可删除的本地文件\n * {files.map(file => (\n * <FileGallery\n * key={file.id}\n * file={file}\n * removable\n * onRemove={handleRemove}\n * />\n * ))}\n *\n * @example\n * // XadkChatbot 场景 - 只读的远程文件\n * {files.map(file => (\n * <FileGallery key={file.id} file={file} />\n * ))}\n */\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n}) => {\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const isImage = isImageFile(file);\n const isAudio = isAudioFile(file);\n const isVideo = isVideoFile(file);\n const isZip = isZipFile(file);\n const isMarkdown = isMarkdownFile(file);\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n\n // 图片文件\n if (isImage) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n {/* 图片缩略图 */}\n <div className={styles.imageThumbnail}>\n <Image\n src={url}\n alt={fileName}\n fallback=\"data:image/png;base64,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\"\n preview={onClick ? false : { src: url }}\n />\n\n {/* 上传进度遮罩 */}\n {file.status === \"uploading\" && (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n )}\n </div>\n\n {/* 文件信息 */}\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {/* 删除按钮 */}\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 音频文件\n if (isAudio) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#722ed1\" }}>\n <AudioOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <audio\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 28 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 视频文件\n if (isVideo) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#fa8c16\" }}>\n <VideoCameraOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <video\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 40 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 其他文件\n const { icon, color } = getFileIcon(file);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div className={styles.fileIcon} style={{ color }}>\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={styles.progress}\n />\n ) : (\n fileSize > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{\n fontSize: \"11px\",\n color: \"#ff4d4f\",\n marginTop: \"2px\",\n }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
@@ -8,7 +8,7 @@ export var useStyles = withBasicStyles(function () {
8
8
  containerNoPreview: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n "]))),
9
9
  directoryPanel: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n "]))),
10
10
  directoryTitle: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n "]))),
11
- directoryTreeContent: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* \u81EA\u5B9A\u4E49\u62D6\u62FD\u6837\u5F0F \u2014 \u57FA\u4E8E ant-tree-treenode \u5B9A\u4F4D\uFF0C\u8986\u76D6\u6574\u884C */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n "]))),
11
+ directoryTreeContent: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* \u81EA\u5B9A\u4E49\u62D6\u62FD\u6837\u5F0F \u2014 \u57FA\u4E8E ant-tree-treenode \u5B9A\u4F4D\uFF0C\u8986\u76D6\u6574\u884C */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n "]))),
12
12
  /** 自定义拖拽 - 节点可拖拽样式 */
13
13
  dragNodeHandle: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n cursor: grab;\n user-select: none;\n\n &:active {\n cursor: grabbing;\n }\n "]))),
14
14
  /** 树节点容器,用于相对定位 drop indicator */
@@ -19,7 +19,7 @@ export var useStyles = withBasicStyles(function () {
19
19
  emptyContainer: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
20
20
  loadingContainer: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n "]))),
21
21
  treeNodeTitle: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-width: 0;\n overflow: hidden;\n padding-right: 4px;\n\n > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n "]))),
22
- moreIcon: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n opacity: 0;\n cursor: pointer;\n padding: 0 4px;\n margin: 2px;\n color: #999;\n font-size: 12px;\n transition: all 0.2s;\n\n &:hover {\n border-radius: 50%;\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n "]))),
22
+ moreIcon: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n opacity: 0;\n cursor: pointer;\n padding: 0 4px;\n margin: 2px;\n color: #999;\n font-size: 12px;\n line-height: 20px;\n transition: all 0.2s;\n height: 20px;\n box-sizing: border-box;\n\n &:hover {\n border-radius: 50%;\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n "]))),
23
23
  treeNodeTitleHover: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n "]))),
24
24
  inlineInput: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n width: 100%;\n .ant-input {\n height: 22px;\n font-size: 13px;\n padding: 0 6px;\n border-radius: 4px;\n }\n "]))),
25
25
  copyBtn: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n "])))
@@ -1 +1 @@
1
- {"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","containerNoPreview","_templateObject2","directoryPanel","_templateObject3","directoryTitle","_templateObject4","directoryTreeContent","_templateObject5","dragNodeHandle","_templateObject6","treeNodeWrapper","_templateObject7","previewPanel","_templateObject8","previewTitle","_templateObject9","previewContent","_templateObject10","emptyContainer","_templateObject11","loadingContainer","_templateObject12","treeNodeTitle","_templateObject13","moreIcon","_templateObject14","treeNodeTitleHover","_templateObject15","inlineInput","_templateObject16","copyBtn","_templateObject17"],"sources":["../../../../src/components/FolderTree/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n display: flex;\n width: 100%;\n height: 500px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n `,\n containerNoPreview: css`\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n `,\n directoryPanel: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n `,\n directoryTitle: css`\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n `,\n directoryTreeContent: css`\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* 自定义拖拽样式 — 基于 ant-tree-treenode 定位,覆盖整行 */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n `,\n\n /** 自定义拖拽 - 节点可拖拽样式 */\n dragNodeHandle: css`\n cursor: grab;\n user-select: none;\n\n &:active {\n cursor: grabbing;\n }\n `,\n /** 树节点容器,用于相对定位 drop indicator */\n treeNodeWrapper: css`\n position: relative;\n min-width: 0;\n overflow: hidden;\n `,\n previewPanel: css`\n flex: 1;\n height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n `,\n previewTitle: css`\n padding: 10px 16px;\n font-size: 13px;\n font-weight: 500;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: #333;\n background: #fff;\n `,\n previewContent: css`\n flex: 1;\n overflow: auto;\n padding: 16px;\n font-size: 13px;\n line-height: 1.6;\n `,\n emptyContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n loadingContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n treeNodeTitle: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-width: 0;\n overflow: hidden;\n padding-right: 4px;\n\n > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n moreIcon: css`\n opacity: 0;\n cursor: pointer;\n padding: 0 4px;\n margin: 2px;\n color: #999;\n font-size: 12px;\n transition: all 0.2s;\n\n &:hover {\n border-radius: 50%;\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n `,\n treeNodeTitleHover: css`\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n `,\n inlineInput: css`\n width: 100%;\n .ant-input {\n height: 22px;\n font-size: 13px;\n padding: 0 6px;\n border-radius: 4px;\n }\n `,\n copyBtn: css`\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n `,\n}));\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,SAAS,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,6KAQb;IACDC,kBAAkB,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,oIAOtB;IACDG,cAAc,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sMAOlB;IACDK,cAAc,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,2IAMlB;IACDO,oBAAoB,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,2qDAoEtB;IAEH;IACAS,cAAc,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,yGAOlB;IACD;IACAW,eAAe,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,+EAInB;IACDa,YAAY,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,mHAMhB;IACDe,YAAY,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,qPAUhB;IACDiB,cAAc,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,gHAMlB;IACDmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,2GAKlB;IACDqB,gBAAgB,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,2GAKpB;IACDuB,aAAa,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,0RAajB;IACDyB,QAAQ,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,4QAcZ;IACD2B,kBAAkB,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,4EAItB;IACD6B,WAAW,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,sJAQf;IACD+B,OAAO,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA;EAQd,CAAC;AAAA,CAAC,CAAC"}
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","containerNoPreview","_templateObject2","directoryPanel","_templateObject3","directoryTitle","_templateObject4","directoryTreeContent","_templateObject5","dragNodeHandle","_templateObject6","treeNodeWrapper","_templateObject7","previewPanel","_templateObject8","previewTitle","_templateObject9","previewContent","_templateObject10","emptyContainer","_templateObject11","loadingContainer","_templateObject12","treeNodeTitle","_templateObject13","moreIcon","_templateObject14","treeNodeTitleHover","_templateObject15","inlineInput","_templateObject16","copyBtn","_templateObject17"],"sources":["../../../../src/components/FolderTree/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n display: flex;\n width: 100%;\n height: 500px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n `,\n containerNoPreview: css`\n height: auto;\n border: none;\n border-radius: 0;\n & > *:first-child {\n border-right: none;\n }\n `,\n directoryPanel: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: auto;\n border-right: 1px solid #e8e8e8;\n background: var(--folder-tree-directory-bg, #fafafa);\n `,\n directoryTitle: css`\n padding: 12px 16px;\n font-weight: 600;\n font-size: 14px;\n border-bottom: 1px solid #e8e8e8;\n color: #333;\n `,\n directoryTreeContent: css`\n padding: 4px 8px;\n flex: 1;\n\n .ant-tree {\n background: transparent;\n height: 100%;\n }\n .ant-tree-switcher {\n margin-right: 0;\n }\n .ant-tree .ant-tree-node-content-wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n padding-left: 0;\n overflow: hidden;\n }\n .ant-tree .ant-tree-title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .ant-tree-directory .ant-tree-treenode {\n position: relative;\n &::before {\n border-radius: 4px;\n }\n }\n /* 自定义拖拽样式 — 基于 ant-tree-treenode 定位,覆盖整行 */\n .ant-tree-treenode.folder-tree-drop-before::after {\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-top: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-inside::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed #1677ff;\n border-radius: 4px;\n background: rgba(22, 119, 255, 0.04);\n z-index: 10;\n pointer-events: none;\n }\n .ant-tree-treenode.folder-tree-drop-after::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: transparent;\n border-bottom: 2px dashed #1677ff;\n z-index: 10;\n pointer-events: none;\n }\n `,\n\n /** 自定义拖拽 - 节点可拖拽样式 */\n dragNodeHandle: css`\n cursor: grab;\n user-select: none;\n\n &:active {\n cursor: grabbing;\n }\n `,\n /** 树节点容器,用于相对定位 drop indicator */\n treeNodeWrapper: css`\n position: relative;\n min-width: 0;\n overflow: hidden;\n `,\n previewPanel: css`\n flex: 1;\n height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n `,\n previewTitle: css`\n padding: 10px 16px;\n font-size: 13px;\n font-weight: 500;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: #333;\n background: #fff;\n `,\n previewContent: css`\n flex: 1;\n overflow: auto;\n padding: 16px;\n font-size: 13px;\n line-height: 1.6;\n `,\n emptyContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n loadingContainer: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n `,\n treeNodeTitle: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-width: 0;\n overflow: hidden;\n padding-right: 4px;\n\n > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n moreIcon: css`\n opacity: 0;\n cursor: pointer;\n padding: 0 4px;\n margin: 2px;\n color: #999;\n font-size: 12px;\n line-height: 20px;\n transition: all 0.2s;\n height: 20px;\n box-sizing: border-box;\n\n &:hover {\n border-radius: 50%;\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n `,\n treeNodeTitleHover: css`\n &:hover .folder-tree-more-icon {\n opacity: 1;\n }\n `,\n inlineInput: css`\n width: 100%;\n .ant-input {\n height: 22px;\n font-size: 13px;\n padding: 0 6px;\n border-radius: 4px;\n }\n `,\n copyBtn: css`\n cursor: pointer;\n color: #999;\n font-size: 14px;\n &:hover {\n color: #1677ff;\n }\n `,\n}));\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,SAAS,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,6KAQb;IACDC,kBAAkB,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,oIAOtB;IACDG,cAAc,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sMAOlB;IACDK,cAAc,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,2IAMlB;IACDO,oBAAoB,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,yqDAoExB;IAED;IACAS,cAAc,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,yGAOlB;IACD;IACAW,eAAe,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,+EAInB;IACDa,YAAY,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,mHAMhB;IACDe,YAAY,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,qPAUhB;IACDiB,cAAc,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,gHAMlB;IACDmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,2GAKlB;IACDqB,gBAAgB,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,2GAKpB;IACDuB,aAAa,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,0RAajB;IACDyB,QAAQ,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,oVAiBZ;IACD2B,kBAAkB,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,4EAItB;IACD6B,WAAW,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,sJAQf;IACD+B,OAAO,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA;EAQd,CAAC;AAAA,CAAC,CAAC"}
@@ -9,6 +9,7 @@ import { ChatActionContext } from "./context/ChatActionContext";
9
9
  import { SessionContext } from "./context/SessionContext";
10
10
  import useADKChat from "../../hooks/useADKChat";
11
11
  import { primaryBlue } from "../../styles/common";
12
+ import { cssVarStyle } from "../../styles/tokens";
12
13
  import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/xGroupAdk";
13
14
 
14
15
  /**
@@ -223,12 +224,12 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
223
224
  children: /*#__PURE__*/_jsx(SessionContext.Provider, {
224
225
  value: sessionValue,
225
226
  children: /*#__PURE__*/_jsx("div", {
226
- style: {
227
+ style: _objectSpread(_objectSpread({}, cssVarStyle), {}, {
227
228
  display: "flex",
228
229
  height: "100%",
229
230
  width: "100%",
230
231
  position: "relative"
231
- },
232
+ }),
232
233
  children: children
233
234
  })
234
235
  })