@blueking/chat-x 0.0.51-beta.5 → 0.0.52-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +15 -8
  2. package/dist/ag-ui/types/contents.d.ts +2 -0
  3. package/dist/ag-ui/types/messages.d.ts +6 -1
  4. package/dist/common/constants.d.ts +2 -0
  5. package/dist/components/ai-buttons/add-menu-btn/add-menu-btn.vue.d.ts +24 -0
  6. package/dist/components/chat-content/collapsible-content/collapsible-content.vue.d.ts +28 -0
  7. package/dist/components/chat-content/file-content/upload-file-item.vue.d.ts +5 -2
  8. package/dist/components/chat-content/file-content/upload-image-item.vue.d.ts +1 -0
  9. package/dist/components/chat-content/flow-agent-content/use-flow-node-actions.d.ts +1 -1
  10. package/dist/components/chat-input/ai-slash-input/ai-slash-input.vue.d.ts +21 -10
  11. package/dist/components/chat-input/ai-slash-input/command.d.ts +6 -3
  12. package/dist/components/chat-input/ai-slash-input/constants.d.ts +2 -0
  13. package/dist/components/chat-input/ai-slash-input/use-menu-trigger.d.ts +17 -0
  14. package/dist/components/chat-input/build-default-placeholder.d.ts +9 -3
  15. package/dist/components/chat-input/chat-input.vue.d.ts +30 -18
  16. package/dist/components/chat-input/input-menu/constants.d.ts +60 -0
  17. package/dist/components/chat-input/input-menu/index.d.ts +4 -0
  18. package/dist/components/chat-input/input-menu/input-menu-option.vue.d.ts +14 -0
  19. package/dist/components/chat-input/input-menu/input-menu-panel.vue.d.ts +17 -0
  20. package/dist/components/chat-input/input-menu/use-input-menu.d.ts +22 -0
  21. package/dist/components/chat-input/model-selector/types.d.ts +3 -2
  22. package/dist/components/chat-message/message-container/message-container.vue.d.ts +1 -1
  23. package/dist/components/chat-message/user-message/user-message.vue.d.ts +1 -1
  24. package/dist/components/mention/create-mention-tippy.d.ts +27 -0
  25. package/dist/components/mention/index.d.ts +4 -0
  26. package/dist/components/{chat-input/ai-slash-input/ai-prompt-list/ai-prompt-list.vue.d.ts → mention/mention-popover.vue.d.ts} +3 -2
  27. package/dist/components/{chat-input/ai-slash-input/ai-skill-list/ai-skill-list.vue.d.ts → mention/mention-tag.vue.d.ts} +7 -3
  28. package/dist/components/{chat-input/ai-slash-input/ai-slash-menu/ai-slash-menu.vue.d.ts → mention/mention-text.vue.d.ts} +3 -3
  29. package/dist/components/resource-icon/index.d.ts +1 -0
  30. package/dist/components/resource-icon/resource-icon.vue.d.ts +11 -0
  31. package/dist/composables/index.d.ts +1 -0
  32. package/dist/composables/use-artifact-preview.d.ts +5 -2
  33. package/dist/composables/use-common.d.ts +0 -9
  34. package/dist/composables/use-global-config.d.ts +4 -0
  35. package/dist/composables/use-input-mention.d.ts +13 -0
  36. package/dist/composables/use-message-group.d.ts +1011 -72
  37. package/dist/icons/index.d.ts +1 -0
  38. package/dist/icons/input.d.ts +21 -0
  39. package/dist/icons/menu-item.d.ts +22 -0
  40. package/dist/index.css +1 -1
  41. package/dist/index.js +4953 -4429
  42. package/dist/index.js.map +1 -1
  43. package/dist/lang/lang.d.ts +13 -3
  44. package/dist/mcp/generated/docs/activity-message.md +3 -3
  45. package/dist/mcp/generated/docs/add-menu-btn.md +91 -0
  46. package/dist/mcp/generated/docs/ai-slash-input.md +72 -26
  47. package/dist/mcp/generated/docs/assistant-message.md +7 -1
  48. package/dist/mcp/generated/docs/chat-container.md +45 -6
  49. package/dist/mcp/generated/docs/chat-input.md +327 -483
  50. package/dist/mcp/generated/docs/collapsible-content.md +78 -0
  51. package/dist/mcp/generated/docs/constants.md +36 -3
  52. package/dist/mcp/generated/docs/execution-summary.md +1 -23
  53. package/dist/mcp/generated/docs/file-artifact-panel.md +24 -5
  54. package/dist/mcp/generated/docs/file-content.md +4 -0
  55. package/dist/mcp/generated/docs/file-upload-btn.md +15 -12
  56. package/dist/mcp/generated/docs/flow-agent-content.md +10 -12
  57. package/dist/mcp/generated/docs/input-menu-panel.md +166 -0
  58. package/dist/mcp/generated/docs/mention-tag.md +83 -0
  59. package/dist/mcp/generated/docs/mention-text.md +86 -0
  60. package/dist/mcp/generated/docs/message-container.md +1 -1
  61. package/dist/mcp/generated/docs/message-render.md +1 -1
  62. package/dist/mcp/generated/docs/message-tools.md +15 -4
  63. package/dist/mcp/generated/docs/messages.md +3 -0
  64. package/dist/mcp/generated/docs/model-selector.md +4 -2
  65. package/dist/mcp/generated/docs/overflow-tips.md +3 -3
  66. package/dist/mcp/generated/docs/resource-icon.md +102 -0
  67. package/dist/mcp/generated/docs/text-content.md +7 -3
  68. package/dist/mcp/generated/docs/theme.md +27 -35
  69. package/dist/mcp/generated/docs/use-artifact-preview.md +7 -3
  70. package/dist/mcp/generated/docs/use-command-selection.md +1 -1
  71. package/dist/mcp/generated/docs/use-container-scroll.md +2 -1
  72. package/dist/mcp/generated/docs/use-flow-node-actions.md +8 -15
  73. package/dist/mcp/generated/docs/use-global-config.md +11 -4
  74. package/dist/mcp/generated/docs/use-input-mention.md +119 -0
  75. package/dist/mcp/generated/docs/use-menu-keydown.md +15 -16
  76. package/dist/mcp/generated/docs/use-message-group.md +3 -6
  77. package/dist/mcp/generated/docs/user-message.md +39 -17
  78. package/dist/mcp/generated/index.json +233 -81
  79. package/dist/types/editor.d.ts +0 -29
  80. package/dist/types/index.d.ts +1 -0
  81. package/dist/types/input-menu.d.ts +46 -0
  82. package/dist/utils/artifact-tags.d.ts +36 -0
  83. package/dist/utils/collect-message-artifacts.d.ts +14 -0
  84. package/dist/utils/file.d.ts +3 -3
  85. package/dist/utils/index.d.ts +2 -1
  86. package/dist/utils/upload-file.d.ts +6 -1
  87. package/package.json +3 -2
  88. package/skills/blueking-chat-x/SKILL.md +143 -0
  89. package/skills/blueking-chat-x/references/_index.md +153 -0
  90. package/skills/blueking-chat-x/references/components/activity-layout.md +134 -0
  91. package/skills/blueking-chat-x/references/components/activity-message.md +486 -0
  92. package/skills/blueking-chat-x/references/components/add-menu-btn.md +88 -0
  93. package/skills/blueking-chat-x/references/components/ai-image.md +230 -0
  94. package/skills/blueking-chat-x/references/components/ai-loading.md +131 -0
  95. package/skills/blueking-chat-x/references/components/ai-selection.md +439 -0
  96. package/skills/blueking-chat-x/references/components/ai-slash-input.md +102 -0
  97. package/skills/blueking-chat-x/references/components/animation-text.md +202 -0
  98. package/skills/blueking-chat-x/references/components/assistant-message.md +504 -0
  99. package/skills/blueking-chat-x/references/components/chat-container.md +912 -0
  100. package/skills/blueking-chat-x/references/components/chat-input.md +614 -0
  101. package/skills/blueking-chat-x/references/components/cite-content.md +142 -0
  102. package/skills/blueking-chat-x/references/components/code-content.md +211 -0
  103. package/skills/blueking-chat-x/references/components/collapsible-content.md +76 -0
  104. package/skills/blueking-chat-x/references/components/common-error-content.md +73 -0
  105. package/skills/blueking-chat-x/references/components/content-render.md +233 -0
  106. package/skills/blueking-chat-x/references/components/delete-tool.md +191 -0
  107. package/skills/blueking-chat-x/references/components/desc-panel.md +162 -0
  108. package/skills/blueking-chat-x/references/components/detail-section.md +91 -0
  109. package/skills/blueking-chat-x/references/components/execution-summary.md +150 -0
  110. package/skills/blueking-chat-x/references/components/file-artifact-panel.md +307 -0
  111. package/skills/blueking-chat-x/references/components/file-content.md +340 -0
  112. package/skills/blueking-chat-x/references/components/file-icon.md +109 -0
  113. package/skills/blueking-chat-x/references/components/file-upload-btn.md +162 -0
  114. package/skills/blueking-chat-x/references/components/flow-agent-content.md +266 -0
  115. package/skills/blueking-chat-x/references/components/flow-agent-node-detail.md +236 -0
  116. package/skills/blueking-chat-x/references/components/highlight-keyword.md +146 -0
  117. package/skills/blueking-chat-x/references/components/image-content.md +182 -0
  118. package/skills/blueking-chat-x/references/components/image-preview-group.md +184 -0
  119. package/skills/blueking-chat-x/references/components/image-preview.md +226 -0
  120. package/skills/blueking-chat-x/references/components/info-message.md +144 -0
  121. package/skills/blueking-chat-x/references/components/input-attachment.md +49 -0
  122. package/skills/blueking-chat-x/references/components/input-info-alert.md +42 -0
  123. package/skills/blueking-chat-x/references/components/input-menu-panel.md +162 -0
  124. package/skills/blueking-chat-x/references/components/interrupt-message.md +212 -0
  125. package/skills/blueking-chat-x/references/components/key-value-content.md +128 -0
  126. package/skills/blueking-chat-x/references/components/knowledge-rag-content.md +122 -0
  127. package/skills/blueking-chat-x/references/components/latex-content.md +200 -0
  128. package/skills/blueking-chat-x/references/components/loading-message.md +192 -0
  129. package/skills/blueking-chat-x/references/components/markdown-content.md +232 -0
  130. package/skills/blueking-chat-x/references/components/mention-tag.md +79 -0
  131. package/skills/blueking-chat-x/references/components/mention-text.md +83 -0
  132. package/skills/blueking-chat-x/references/components/mermaid-content.md +189 -0
  133. package/skills/blueking-chat-x/references/components/message-container.md +645 -0
  134. package/skills/blueking-chat-x/references/components/message-loading.md +118 -0
  135. package/skills/blueking-chat-x/references/components/message-render.md +327 -0
  136. package/skills/blueking-chat-x/references/components/message-time.md +177 -0
  137. package/skills/blueking-chat-x/references/components/message-tools.md +427 -0
  138. package/skills/blueking-chat-x/references/components/model-selector.md +157 -0
  139. package/skills/blueking-chat-x/references/components/preview-toolbar.md +42 -0
  140. package/skills/blueking-chat-x/references/components/questions-container.md +85 -0
  141. package/skills/blueking-chat-x/references/components/reasoning-message.md +232 -0
  142. package/skills/blueking-chat-x/references/components/reference-content.md +135 -0
  143. package/skills/blueking-chat-x/references/components/reference-doc-content.md +109 -0
  144. package/skills/blueking-chat-x/references/components/resource-icon.md +98 -0
  145. package/skills/blueking-chat-x/references/components/scroll-btn.md +159 -0
  146. package/skills/blueking-chat-x/references/components/selection-footer.md +78 -0
  147. package/skills/blueking-chat-x/references/components/selection-question.md +88 -0
  148. package/skills/blueking-chat-x/references/components/shortcut-btn.md +204 -0
  149. package/skills/blueking-chat-x/references/components/shortcut-btns.md +266 -0
  150. package/skills/blueking-chat-x/references/components/shortcut-render.md +424 -0
  151. package/skills/blueking-chat-x/references/components/simple-table.md +101 -0
  152. package/skills/blueking-chat-x/references/components/text-content.md +80 -0
  153. package/skills/blueking-chat-x/references/components/tool-approval-card.md +183 -0
  154. package/skills/blueking-chat-x/references/components/tool-btn.md +317 -0
  155. package/skills/blueking-chat-x/references/components/tool-message.md +235 -0
  156. package/skills/blueking-chat-x/references/components/toolcall-render.md +348 -0
  157. package/skills/blueking-chat-x/references/components/user-feedback.md +233 -0
  158. package/skills/blueking-chat-x/references/components/user-message.md +444 -0
  159. package/skills/blueking-chat-x/references/components/user-question-answered-card.md +104 -0
  160. package/skills/blueking-chat-x/references/components/user-question-card.md +231 -0
  161. package/skills/blueking-chat-x/references/components/user-question-choice.md +105 -0
  162. package/skills/blueking-chat-x/references/components/user-question-option.md +42 -0
  163. package/skills/blueking-chat-x/references/components/vnode-renderer.md +122 -0
  164. package/skills/blueking-chat-x/references/composables/use-animation-text.md +196 -0
  165. package/skills/blueking-chat-x/references/composables/use-artifact-preview.md +235 -0
  166. package/skills/blueking-chat-x/references/composables/use-clipboard.md +203 -0
  167. package/skills/blueking-chat-x/references/composables/use-command-selection.md +150 -0
  168. package/skills/blueking-chat-x/references/composables/use-container-scroll.md +57 -0
  169. package/skills/blueking-chat-x/references/composables/use-custom-tab.md +158 -0
  170. package/skills/blueking-chat-x/references/composables/use-flow-node-actions.md +164 -0
  171. package/skills/blueking-chat-x/references/composables/use-full-screen.md +112 -0
  172. package/skills/blueking-chat-x/references/composables/use-global-config.md +155 -0
  173. package/skills/blueking-chat-x/references/composables/use-input-mention.md +115 -0
  174. package/skills/blueking-chat-x/references/composables/use-menu-keydown.md +161 -0
  175. package/skills/blueking-chat-x/references/composables/use-message-group.md +244 -0
  176. package/skills/blueking-chat-x/references/composables/use-observer-visible-list.md +188 -0
  177. package/skills/blueking-chat-x/references/composables/use-parent-scrolling.md +46 -0
  178. package/skills/blueking-chat-x/references/directives/index.md +61 -0
  179. package/skills/blueking-chat-x/references/directives/overflow-tips.md +205 -0
  180. package/skills/blueking-chat-x/references/icons/index.md +185 -0
  181. package/skills/blueking-chat-x/references/plugins/index.md +56 -0
  182. package/skills/blueking-chat-x/references/plugins/markdown-container.md +55 -0
  183. package/skills/blueking-chat-x/references/plugins/markdown-latex.md +205 -0
  184. package/skills/blueking-chat-x/references/plugins/markdown-mermaid.md +247 -0
  185. package/skills/blueking-chat-x/references/theme/theme.md +423 -0
  186. package/skills/blueking-chat-x/references/types/constants.md +340 -0
  187. package/skills/blueking-chat-x/references/types/index.md +120 -0
  188. package/skills/blueking-chat-x/references/types/interrupt.md +379 -0
  189. package/skills/blueking-chat-x/references/types/messages.md +556 -0
  190. package/skills/blueking-chat-x/references/types/schema.md +91 -0
  191. package/skills/blueking-chat-x/references/utils/index.md +196 -0
  192. package/skills/blueking-chat-x/scripts/generate-references.mjs +536 -0
  193. package/dist/components/chat-input/ai-slash-editor/ai-slash-editor.vue.d.ts +0 -28
  194. package/dist/components/chat-input/ai-slash-editor/theme.d.ts +0 -24
  195. package/dist/mcp/generated/docs/ai-prompt-list.md +0 -45
  196. package/dist/mcp/generated/docs/ai-skill-list.md +0 -75
  197. package/dist/mcp/generated/docs/ai-slash-editor.md +0 -43
  198. package/dist/mcp/generated/docs/ai-slash-menu.md +0 -42
@@ -0,0 +1,247 @@
1
+ # markdownItMermaid
2
+
3
+ > 导入:`import { markdownItMermaid } from '@blueking/chat-x'` | since 1.0.0
4
+
5
+ markdownItMermaid 为 markdown-it 插件,将 ```mermaid 代码块转为带 data-mermaid-code、data-mermaid-idx 的占位 DOM,便于前端挂载渲染。 实际绘图由 Mermaid 动态导入在 MermaidContent 中完成,支持流式场景节流与缓存。ContentRender 驱动完整消息 Markdown 流程。
6
+
7
+ **关联**:mermaid-content(解析占位并渲染图表)、markdown-content(Markdown fence 管线)、content-render(消息块级内容渲染)
8
+
9
+ ---
10
+
11
+ # markdownItMermaid Mermaid 解析插件
12
+
13
+ > **分类**:plugin
14
+
15
+ Markdown-it Mermaid 解析插件,用于解析 Mermaid 图表代码块。
16
+
17
+ ## 功能说明
18
+
19
+ 此插件将 Mermaid 代码块转换为特定的 HTML 结构,实际的 Mermaid 渲染在 `MermaidContent` 组件中完成。
20
+
21
+ ## 支持的语法
22
+
23
+ ````markdown
24
+ ```mermaid
25
+ graph TD
26
+ A[开始] --> B[结束]
27
+ ```
28
+ ````
29
+
30
+ ## 基础用法
31
+
32
+ ```typescript
33
+ import MarkdownIt from 'markdown-it';
34
+ import { markdownItMermaid } from '@blueking/chat-x';
35
+
36
+ const md = new MarkdownIt().use(markdownItMermaid);
37
+
38
+ const html = md.render(`
39
+ \`\`\`mermaid
40
+ graph TD
41
+ A[开始] --> B{判断}
42
+ B -->|是| C[处理]
43
+ B -->|否| D[结束]
44
+ C --> D
45
+ \`\`\`
46
+ `);
47
+
48
+ // 输出:
49
+ // <div class="mermaid-wrapper" data-mermaid-code="..." data-mermaid-idx="0"></div>
50
+ ```
51
+
52
+ ## 渲染结果
53
+
54
+ 插件会将 Mermaid 代码块转换为以下 HTML:
55
+
56
+ ```html
57
+ <div
58
+ class="mermaid-wrapper"
59
+ data-mermaid-code="graph%20TD%0A%20%20%20%20A%5B%E5%BC%80%E5%A7%8B%5D%20--%3E%20B%5B%E7%BB%93%E6%9D%9F%5D"
60
+ data-mermaid-idx="0"
61
+ ></div>
62
+ ```
63
+
64
+ - `data-mermaid-code`: URL 编码后的 Mermaid 代码
65
+ - `data-mermaid-idx`: 代码块索引
66
+
67
+ ## 支持的图表类型
68
+
69
+ ### 流程图 (Flowchart)
70
+
71
+ ````markdown
72
+ ```mermaid
73
+ graph TD
74
+ A[开始] --> B{条件判断}
75
+ B -->|是| C[执行操作]
76
+ B -->|否| D[结束]
77
+ C --> D
78
+ ```
79
+ ````
80
+
81
+ ### 时序图 (Sequence Diagram)
82
+
83
+ ````markdown
84
+ ```mermaid
85
+ sequenceDiagram
86
+ participant A as 客户端
87
+ participant B as 服务器
88
+ A->>B: 请求
89
+ B-->>A: 响应
90
+ ```
91
+ ````
92
+
93
+ ### 甘特图 (Gantt Chart)
94
+
95
+ ````markdown
96
+ ```mermaid
97
+ gantt
98
+ title 项目计划
99
+ dateFormat YYYY-MM-DD
100
+ section 阶段1
101
+ 任务1 :a1, 2024-01-01, 30d
102
+ 任务2 :after a1, 20d
103
+ section 阶段2
104
+ 任务3 :2024-02-01, 12d
105
+ ```
106
+ ````
107
+
108
+ ### 类图 (Class Diagram)
109
+
110
+ ````markdown
111
+ ```mermaid
112
+ classDiagram
113
+ class Animal {
114
+ +name: string
115
+ +age: int
116
+ +makeSound()
117
+ }
118
+ class Dog {
119
+ +breed: string
120
+ +bark()
121
+ }
122
+ Animal <|-- Dog
123
+ ```
124
+ ````
125
+
126
+ ### 状态图 (State Diagram)
127
+
128
+ ````markdown
129
+ ```mermaid
130
+ stateDiagram-v2
131
+ [*] --> 待处理
132
+ 待处理 --> 处理中: 开始处理
133
+ 处理中 --> 已完成: 处理完成
134
+ 处理中 --> 失败: 处理失败
135
+ 已完成 --> [*]
136
+ 失败 --> 待处理: 重试
137
+ ```
138
+ ````
139
+
140
+ ### 饼图 (Pie Chart)
141
+
142
+ ````markdown
143
+ ```mermaid
144
+ pie title 语言使用占比
145
+ "JavaScript" : 45
146
+ "TypeScript" : 35
147
+ "Python" : 15
148
+ "其他" : 5
149
+ ```
150
+ ````
151
+
152
+ ### ER 图 (Entity Relationship)
153
+
154
+ ````markdown
155
+ ```mermaid
156
+ erDiagram
157
+ 用户 ||--o{ 订单 : 创建
158
+ 订单 ||--|{ 订单明细 : 包含
159
+ 商品 ||--o{ 订单明细 : 包含于
160
+ ```
161
+ ````
162
+
163
+ ## 与 MermaidContent 组件配合
164
+
165
+ 实际渲染由 `MermaidContent` 组件完成:
166
+
167
+ ```vue
168
+ <template>
169
+ <MermaidContent
170
+ :token="mermaidTokens"
171
+ @mounted="handleMounted"
172
+ />
173
+ </template>
174
+
175
+ <script setup lang="ts">
176
+ import { MermaidContent } from '@blueking/chat-x';
177
+
178
+ // mermaidTokens 是包含 mermaid fence 的 token 数组
179
+ const handleMounted = ({ el }) => {
180
+ console.log('Mermaid 图表渲染完成:', el);
181
+ };
182
+ </script>
183
+ ```
184
+
185
+ ## 流式渲染
186
+
187
+ 组件支持流式渲染,在代码输入过程中实时更新图表:
188
+
189
+ ````vue
190
+ <template>
191
+ <ContentRender
192
+ :content="streamingContent"
193
+ :status="MessageStatus.Streaming"
194
+ />
195
+ </template>
196
+
197
+ <script setup lang="ts">
198
+ import { ref } from 'vue';
199
+ import { ContentRender, MessageStatus } from '@blueking/chat-x';
200
+
201
+ const streamingContent = ref('');
202
+
203
+ // 模拟流式输入 Mermaid 代码
204
+ const simulateStreaming = async () => {
205
+ const code = '```mermaid\ngraph TD\n A --> B\n```';
206
+ for (const char of code) {
207
+ await new Promise(r => setTimeout(r, 50));
208
+ streamingContent.value += char;
209
+ }
210
+ };
211
+ </script>
212
+ ````
213
+
214
+ ## 错误处理
215
+
216
+ 当 Mermaid 代码语法错误时:
217
+
218
+ 1. 插件仍会正常解析并输出 HTML
219
+ 2. `MermaidContent` 组件会捕获渲染错误
220
+ 3. 控制台会输出警告信息
221
+ 4. 图表区域保持空白,不会影响其他内容
222
+
223
+ ## 性能优化
224
+
225
+ - **节流渲染**:流式输入时使用 100ms 节流
226
+ - **代码缓存**:相同代码不会重复渲染
227
+ - **异步加载**:Mermaid 库按需动态导入
228
+
229
+ ## 使用场景
230
+
231
+ - AI 生成的流程图说明
232
+ - 技术文档中的架构图
233
+ - 项目计划展示
234
+ - 数据关系可视化
235
+
236
+ ## 注意事项
237
+
238
+ 1. **异步渲染**:Mermaid 库是动态导入的,首次渲染可能有短暂延迟
239
+ 2. **语法验证**:组件会先验证语法,无效代码不会尝试渲染
240
+ 3. **SVG 输出**:渲染结果是 SVG,可以自由缩放
241
+ 4. **样式覆盖**:可以通过 CSS 自定义图表样式
242
+
243
+ ## 关联组件
244
+
245
+ - [MermaidContent](../components/rendering/mermaid-content) — Mermaid 渲染
246
+ - [MarkdownContent](../components/rendering/markdown-content) — Markdown 内容
247
+ - [ContentRender](../components/rendering/content-render) — 内容渲染
@@ -0,0 +1,423 @@
1
+ # 主题配置
2
+
3
+ > since 1.0.0
4
+
5
+ 说明通过 SCSS 变量(尺寸、颜色、z-index)、字号主题 CSS 变量(data-ai-size 切换 small/normal)与 CSS 类覆盖自定义主题。 ChatContainer.size 控制根节点 data-ai-size;浮层同步 document.body.dataset.aiSize。含渐变边框 mixin、骨架屏类 ai-skeleton-element 等。
6
+
7
+ **关联**:chat-container(整体布局与侧栏)、chat-input(输入区与渐变边框)、message-container(消息区样式上下文)
8
+
9
+ ---
10
+
11
+ # 主题配置
12
+
13
+ > **分类**:theme
14
+
15
+ `@blueking/chat-x` 使用 SCSS 变量和 CSS 类来控制样式,支持通过覆盖变量或样式来自定义主题。
16
+
17
+ ## 样式引入
18
+
19
+ 组件库的样式会在引入组件时自动加载,无需单独引入:
20
+
21
+ ```typescript
22
+ // 引入组件时会自动引入样式
23
+ import { ChatInput, MessageContainer } from '@blueking/chat-x';
24
+ ```
25
+
26
+ ## 字号主题
27
+
28
+ 组件库通过根节点 `[data-ai-size]` 切换两档字号主题,内部组件统一引用 CSS 变量(均带兜底值,无 provider 时退回 `small`)。
29
+
30
+ ### 切换方式
31
+
32
+ | 方式 | 说明 |
33
+ | ---- | ---- |
34
+ | `ChatContainer` 的 `size` prop | 推荐。根节点 `.ai-chat-container` 设置 `data-ai-size`;同时通过 `useGlobalConfig` 注入 `size` 供逻辑层读取 |
35
+ | 手动设置 `data-ai-size` | 在任意祖先元素上设置 `data-ai-size="small"` 或 `data-ai-size="normal"`,后代继承 CSS 变量 |
36
+ | `document.body.dataset.aiSize` | `ChatContainer` 会自动同步,供 Tippy / Teleport 等挂载到 `body` 的浮层继承字号变量;容器卸载时清理 |
37
+
38
+ ```vue
39
+ <template>
40
+ <ChatContainer v-model="input" :messages="messages" size="normal" />
41
+ </template>
42
+ ```
43
+
44
+ ### CSS 变量
45
+
46
+ 定义于 `src/styles/size-theme.scss`,随 `global.scss` 自动引入:
47
+
48
+ | 变量名 | `small`(默认) | `normal` | 说明 |
49
+ | ------ | --------------- | -------- | ---- |
50
+ | `--ai-font-size` | `12px` | `14px` | 基准字号 |
51
+ | `--ai-line-height` | `20px` | `24px` | 标准行高 |
52
+ | `--ai-line-height-compact` | `20px` | `22px` | 紧凑行高 |
53
+ | `--ai-spacing-comfortable` | `8px` | `12px` | 舒适间距(如消息气泡水平内边距) |
54
+ | `--ai-icon-size` | `16px` | `20px` | 标准图标尺寸 |
55
+ | `--ai-icon-size-sm` | `16px` | `18px` | 小号图标尺寸 |
56
+
57
+ 组件样式中统一使用 `var(--ai-font-size, 12px)` 等形式引用,保证无 `data-ai-size` 时仍退回 small 档位。
58
+
59
+ ```scss
60
+ // 示例:在自定义样式中复用字号主题变量
61
+ .my-custom-panel {
62
+ font-size: var(--ai-font-size, 12px);
63
+ line-height: var(--ai-line-height, 20px);
64
+ }
65
+ ```
66
+
67
+ ### 骨架屏
68
+
69
+ 全局类 `.ai-skeleton-element` 用于加载占位(如 FlowAgent 节点详情、UserFeedback 原因列表)。可通过 `.skeleton-element-lg` 修饰尺寸。详见各业务组件文档中的加载态说明。
70
+
71
+ ## SCSS 变量
72
+
73
+ 组件库在 `src/styles/variables.scss` 中定义了以下 SCSS 变量(构建期生效,仅供库内组件 `@use` 复用;消费方无法在运行时覆盖,需要改色请用 CSS 变量或类名覆盖):
74
+
75
+ ### 尺寸变量
76
+
77
+ ```scss
78
+ // 输入框宽度(.chat-input-wrapper)
79
+ $chat-input-min-width: 168px;
80
+ $chat-input-max-width: 1000px;
81
+ ```
82
+
83
+ ### 语义色变量
84
+
85
+ ```scss
86
+ $color-title: #313238; // 标题 / 主文字
87
+ $color-text: #4d4f56; // 常规文字
88
+ $color-text-secondary: #979ba5; // 次要文字 / 占位
89
+ $color-primary: #3a84ff; // 主题色
90
+ $color-border: #dcdee5; // 边框
91
+ $color-border-light: #eaebf0; // 浅边框 / 线条中
92
+ $color-bg-light: #fafbfd; // 浅背景
93
+ $color-bg-tab: #f0f1f5; // 分段控件 / tab 背景
94
+ $color-bg-hover: #f5f7fa; // 列表 / 卡片 hover 背景
95
+ $color-bg-selected: #e1ecff; // 选中态背景(背景蓝)
96
+ $content-loading-icon-color-list: (#cddffe, #699df4, #1768ef); // 内容加载动画三色
97
+ ```
98
+
99
+ > 旧版用于 `@` 资源标签配色的 `$resourceTypeMap`(tool / skill / shortcut / doc / knowledgebase / mcp 六组配色)随输入区重构一并移除——现在资源标签统一为「图标 + 主题蓝文字」,不再按类型分配底色,详见 [MentionTag](/components/rendering/mention-tag)。
100
+
101
+ > 其余色值(如 hover 边框 `#c4c6cc`)目前直接写在各组件样式中,未抽为变量。
102
+
103
+ ### Z-Index 分层
104
+
105
+ 层级由 TS 常量维护(`src/common/constants.ts`),从包入口导出,组件通过 inline style 写成 CSS 变量下发:
106
+
107
+ ```typescript
108
+ import { CHAT_Z_INDEX, EDITOR_MENU_Z_INDEX, SELECTION_Z_INDEX } from '@blueking/chat-x';
109
+
110
+ CHAT_Z_INDEX; // 9999 对话主层
111
+ EDITOR_Z_INDEX; // 10000 编辑器
112
+ EDITOR_MENU_Z_INDEX; // 10001 编辑器菜单 / 资源标签气泡
113
+ SHORTCUT_MENU_Z_INDEX; // 10002 快捷指令菜单
114
+ SELECTION_Z_INDEX; // 10003 划词浮窗
115
+ ```
116
+
117
+ ## CSS 类覆盖
118
+
119
+ ### 输入框样式
120
+
121
+ ```scss
122
+ // 覆盖输入框容器样式
123
+ .ai-chat-input-container {
124
+ .chat-input {
125
+ min-height: 120px; // 自定义最小高度
126
+ max-height: 250px; // 自定义最大高度
127
+ background: #fafafa; // 自定义背景色
128
+
129
+ // 覆盖边框渐变
130
+ &::before {
131
+ background: linear-gradient(180deg, #ff6b6b, #ff8e53);
132
+ }
133
+ }
134
+ }
135
+ ```
136
+
137
+ ### 消息样式
138
+
139
+ ```scss
140
+ // 用户消息样式
141
+ .ai-user-message {
142
+ &-content {
143
+ background-color: #d4edda; // 自定义背景色
144
+ border-radius: 8px;
145
+ }
146
+ }
147
+
148
+ // AI 消息样式
149
+ .assistant-message {
150
+ &-content {
151
+ background-color: #f8f9fa;
152
+ border-left: 3px solid #3a84ff;
153
+ padding-left: 12px;
154
+ }
155
+ }
156
+ ```
157
+
158
+ ### 快捷指令按钮样式
159
+
160
+ ```scss
161
+ // 快捷指令按钮
162
+ .ai-shortcut-btns {
163
+ &-item {
164
+ background: linear-gradient(135deg, #667eea, #764ba2);
165
+ color: #fff;
166
+
167
+ &:hover {
168
+ transform: translateY(-2px);
169
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
170
+ }
171
+
172
+ // 移除默认渐变边框
173
+ &::before {
174
+ display: none;
175
+ }
176
+ }
177
+ }
178
+ ```
179
+
180
+ ### 消息工具栏样式
181
+
182
+ ```scss
183
+ // 工具按钮
184
+ .tool-btn {
185
+ width: 24px;
186
+ height: 24px;
187
+ font-size: 16px;
188
+
189
+ &:hover {
190
+ background-color: #e1ecff;
191
+ color: #3a84ff;
192
+ }
193
+ }
194
+ ```
195
+
196
+ ### Markdown 内容样式
197
+
198
+ ```scss
199
+ // Markdown 内容
200
+ .ai-markdown-content {
201
+ .ai-markdown-body {
202
+ font-size: 14px;
203
+ line-height: 1.6;
204
+
205
+ // 代码块样式
206
+ pre code.hljs {
207
+ background-color: #1e1e1e;
208
+ border-radius: 8px;
209
+ }
210
+
211
+ // 表格样式
212
+ table {
213
+ border-collapse: collapse;
214
+
215
+ th,
216
+ td {
217
+ border: 1px solid #dcdee5;
218
+ padding: 8px 12px;
219
+ }
220
+
221
+ th {
222
+ background-color: #f5f7fa;
223
+ }
224
+ }
225
+ }
226
+ }
227
+ ```
228
+
229
+ ## 主题切换示例
230
+
231
+ ### 暗色主题
232
+
233
+ ```scss
234
+ // 暗色主题变量
235
+ .dark-theme {
236
+ // 输入框
237
+ .ai-chat-input-container .chat-input {
238
+ background: #2d2d2d;
239
+
240
+ &::before {
241
+ background: linear-gradient(180deg, #4a90d9, #357abd);
242
+ }
243
+ }
244
+
245
+ // 用户消息
246
+ .ai-user-message-content {
247
+ background-color: #3d5a80;
248
+ color: #fff;
249
+ }
250
+
251
+ // AI 消息
252
+ .assistant-message {
253
+ color: #e0e0e0;
254
+ }
255
+
256
+ // Markdown 内容
257
+ .ai-markdown-content .ai-markdown-body {
258
+ color: #e0e0e0;
259
+
260
+ h1,
261
+ h2,
262
+ h3,
263
+ h4,
264
+ h5,
265
+ h6 {
266
+ color: #fff;
267
+ }
268
+
269
+ a {
270
+ color: #6cb2eb;
271
+ }
272
+
273
+ code {
274
+ background-color: #3d3d3d;
275
+ color: #e0e0e0;
276
+ }
277
+ }
278
+
279
+ // 快捷指令
280
+ .ai-shortcut-btns-item {
281
+ background: #3d3d3d;
282
+ color: #e0e0e0;
283
+
284
+ &::before {
285
+ background: linear-gradient(105deg, #4a90d940, #9b59b640);
286
+ }
287
+ }
288
+
289
+ // 工具按钮
290
+ .tool-btn {
291
+ color: #9e9e9e;
292
+
293
+ &:hover {
294
+ background-color: #424242;
295
+ color: #fff;
296
+ }
297
+ }
298
+ }
299
+ ```
300
+
301
+ ### 使用暗色主题
302
+
303
+ ```vue
304
+ <template>
305
+ <div :class="{ 'dark-theme': isDark }">
306
+ <ChatInput v-model="input" />
307
+ <MessageContainer :messages="messages" />
308
+ </div>
309
+ </template>
310
+
311
+ <script setup lang="ts">
312
+ import { ref } from 'vue';
313
+ import { ChatInput, MessageContainer } from '@blueking/chat-x';
314
+
315
+ const isDark = ref(false);
316
+ const input = ref('');
317
+ const messages = ref([]);
318
+ </script>
319
+ ```
320
+
321
+ ## 渐变边框
322
+
323
+ 组件库使用 CSS mask 实现渐变边框效果:
324
+
325
+ ```scss
326
+ // 渐变边框 mixin
327
+ @mixin linear-gradient-border($angle: 105deg, $start-color: #235dfa40, $end-color: #bc81ef40) {
328
+ content: '';
329
+ position: absolute;
330
+ inset: 0;
331
+ padding: 1px;
332
+ background: linear-gradient($angle, $start-color, $end-color);
333
+ mask:
334
+ linear-gradient(#fff 0 0) content-box,
335
+ linear-gradient(#fff 0 0);
336
+ mask-composite: xor;
337
+ mask-composite: exclude;
338
+ border-radius: inherit;
339
+ pointer-events: none;
340
+ }
341
+ ```
342
+
343
+ 使用示例:
344
+
345
+ ```scss
346
+ .custom-card {
347
+ position: relative;
348
+ border-radius: 8px;
349
+
350
+ &::before {
351
+ @include linear-gradient-border(180deg, #6cbaff, #3a84ff);
352
+ }
353
+ }
354
+ ```
355
+
356
+ ## 动画效果
357
+
358
+ ### 淡入动画
359
+
360
+ ```scss
361
+ // 全局淡入动画
362
+ @keyframes ai-markdown-fade-in {
363
+ from {
364
+ opacity: 0;
365
+ }
366
+ to {
367
+ opacity: 1;
368
+ }
369
+ }
370
+
371
+ .ai-blueking-markdown-fade-in {
372
+ animation: ai-markdown-fade-in 0.2s ease-out forwards;
373
+ }
374
+ ```
375
+
376
+ ### 弹窗过渡
377
+
378
+ ```scss
379
+ // 选择弹窗过渡
380
+ .ai-fade-enter-active,
381
+ .ai-fade-leave-active {
382
+ transition:
383
+ opacity 0.2s ease,
384
+ transform 0.2s ease;
385
+ }
386
+
387
+ .ai-fade-enter-from,
388
+ .ai-fade-leave-to {
389
+ opacity: 0;
390
+ transform: translateY(4px);
391
+ }
392
+ ```
393
+
394
+ ## 响应式设计
395
+
396
+ ```scss
397
+ // 移动端适配
398
+ @media (max-width: 768px) {
399
+ .ai-chat-input-container .chat-input {
400
+ min-width: 100%;
401
+ max-width: 100%;
402
+ }
403
+
404
+ .ai-shortcut-btns {
405
+ min-width: 100%;
406
+ max-width: 100%;
407
+ }
408
+ }
409
+ ```
410
+
411
+ ## 注意事项
412
+
413
+ 1. **样式优先级**:覆盖样式时可能需要使用更高优先级的选择器
414
+ 2. **变量位置**:SCSS 变量需要在组件样式之前定义
415
+ 3. **构建配置**:确保项目配置支持 SCSS 处理
416
+ 4. **组件隔离**:使用 scoped 样式时,深度选择器 `::v-deep` 或 `:deep()` 可能需要
417
+
418
+ ## 关联组件
419
+
420
+ - [ChatContainer](../components/setup/chat-container) — 布局与字号主题根节点(`size` prop)
421
+ - [useGlobalConfig](../composables/use-global-config) — 注入 `size` 供后代读取
422
+ - [ChatInput](../components/input/chat-input) — 输入区变量与类名
423
+ - [MessageContainer](../components/setup/message-container) — 消息列表区域