@aura-react-comp/x 0.0.0-stage → 0.1.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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -2
  3. package/esm/actions/index.d.ts +28 -0
  4. package/esm/actions/index.js +37 -0
  5. package/esm/actions/index.less +59 -0
  6. package/esm/attachments/index.d.ts +41 -0
  7. package/esm/attachments/index.js +48 -0
  8. package/esm/attachments/index.less +22 -0
  9. package/esm/bubble/index.d.ts +42 -0
  10. package/esm/bubble/index.js +80 -0
  11. package/esm/bubble/index.less +164 -0
  12. package/esm/code-highlighter/index.d.ts +39 -0
  13. package/esm/code-highlighter/index.js +165 -0
  14. package/esm/code-highlighter/index.less +76 -0
  15. package/esm/code-highlighter/prism-theme.d.ts +13 -0
  16. package/esm/code-highlighter/prism-theme.js +75 -0
  17. package/esm/conversations/index.d.ts +35 -0
  18. package/esm/conversations/index.js +89 -0
  19. package/esm/conversations/index.less +138 -0
  20. package/esm/file-card/index.d.ts +40 -0
  21. package/esm/file-card/index.js +126 -0
  22. package/esm/file-card/index.less +161 -0
  23. package/esm/folder/index.d.ts +66 -0
  24. package/esm/folder/index.js +345 -0
  25. package/esm/folder/index.less +158 -0
  26. package/esm/folder/tree-utils.d.ts +30 -0
  27. package/esm/folder/tree-utils.js +147 -0
  28. package/esm/folder/types.d.ts +51 -0
  29. package/esm/folder/types.js +1 -0
  30. package/esm/index.d.ts +40 -0
  31. package/esm/index.js +20 -0
  32. package/esm/markdown-content/index.d.ts +34 -0
  33. package/esm/markdown-content/index.js +117 -0
  34. package/esm/markdown-content/index.less +124 -0
  35. package/esm/mermaid/index.d.ts +47 -0
  36. package/esm/mermaid/index.js +235 -0
  37. package/esm/mermaid/index.less +155 -0
  38. package/esm/notification/index.d.ts +59 -0
  39. package/esm/notification/index.js +148 -0
  40. package/esm/prompts/index.d.ts +27 -0
  41. package/esm/prompts/index.js +50 -0
  42. package/esm/prompts/index.less +95 -0
  43. package/esm/sender/index.d.ts +48 -0
  44. package/esm/sender/index.js +88 -0
  45. package/esm/sender/index.less +75 -0
  46. package/esm/sources/index.d.ts +40 -0
  47. package/esm/sources/index.js +154 -0
  48. package/esm/sources/index.less +219 -0
  49. package/esm/style.css +1565 -0
  50. package/esm/suggestion/index.d.ts +21 -0
  51. package/esm/suggestion/index.js +36 -0
  52. package/esm/suggestion/index.less +44 -0
  53. package/esm/think/index.d.ts +20 -0
  54. package/esm/think/index.js +48 -0
  55. package/esm/think/index.less +92 -0
  56. package/esm/thought-chain/index.d.ts +34 -0
  57. package/esm/thought-chain/index.js +105 -0
  58. package/esm/thought-chain/index.less +174 -0
  59. package/esm/use-x-chat/index.d.ts +85 -0
  60. package/esm/use-x-chat/index.js +178 -0
  61. package/esm/use-x-stream/index.d.ts +43 -0
  62. package/esm/use-x-stream/index.js +112 -0
  63. package/esm/use-x-stream/parse-sse.d.ts +19 -0
  64. package/esm/use-x-stream/parse-sse.js +91 -0
  65. package/esm/utils/color.d.ts +9 -0
  66. package/esm/utils/color.js +45 -0
  67. package/esm/welcome/index.d.ts +22 -0
  68. package/esm/welcome/index.js +36 -0
  69. package/esm/welcome/index.less +57 -0
  70. package/esm/x-provider/index.d.ts +48 -0
  71. package/esm/x-provider/index.js +66 -0
  72. package/package.json +69 -3
package/esm/style.css ADDED
@@ -0,0 +1,1565 @@
1
+ /* ===== @aura-react-comp/x styles — 由 scripts/build-styles.mjs 自动生成,请勿手改 ===== */
2
+
3
+ /* ---- actions/index.less ---- */
4
+ /* Actions — 消息操作组 */
5
+ .aura-x-actions {
6
+ display: flex;
7
+ gap: var(--aura-spacing-1);
8
+ align-items: center;
9
+ }
10
+ .aura-x-actions--vertical {
11
+ flex-direction: column;
12
+ align-items: stretch;
13
+ }
14
+ .aura-x-actions-item {
15
+ display: inline-flex;
16
+ gap: var(--aura-spacing-1);
17
+ align-items: center;
18
+ justify-content: center;
19
+ padding: var(--aura-spacing-1) var(--aura-spacing-2);
20
+ border: none;
21
+ border-radius: var(--aura-radius-sm);
22
+ background: transparent;
23
+ color: var(--aura-text-secondary);
24
+ font-size: var(--aura-font-size-xs);
25
+ line-height: 1.5;
26
+ cursor: pointer;
27
+ transition: background var(--aura-duration-fast) var(--aura-easing), color var(--aura-duration-fast) var(--aura-easing);
28
+ }
29
+ .aura-x-actions-item:not(:disabled):hover {
30
+ background: var(--aura-x-accent-soft);
31
+ color: var(--aura-x-accent);
32
+ }
33
+ .aura-x-actions-item:focus-visible {
34
+ outline: none;
35
+ box-shadow: var(--aura-x-focus-ring);
36
+ }
37
+ .aura-x-actions-item--active {
38
+ color: var(--aura-x-accent);
39
+ background: var(--aura-x-accent-soft);
40
+ }
41
+ .aura-x-actions-item--danger:not(:disabled):hover {
42
+ background: rgba(239, 68, 68, 0.12);
43
+ color: var(--aura-error);
44
+ }
45
+ .aura-x-actions-item:disabled {
46
+ opacity: 0.45;
47
+ cursor: not-allowed;
48
+ }
49
+ .aura-x-actions--vertical .aura-x-actions-item {
50
+ justify-content: flex-start;
51
+ }
52
+
53
+
54
+ /* ---- attachments/index.less ---- */
55
+ /* Attachments — 附件列表(输入框上方的附件条) */
56
+ .aura-x-attachments {
57
+ display: flex;
58
+ flex-wrap: wrap;
59
+ gap: var(--aura-spacing-2);
60
+ align-items: stretch;
61
+ }
62
+ .aura-x-attachments--scroll-x {
63
+ flex-wrap: nowrap;
64
+ padding-bottom: var(--aura-spacing-1);
65
+ overflow-x: auto;
66
+ /* 横滑条与卡片间距,避免遮挡最后一张卡片 */
67
+ scrollbar-width: thin;
68
+ }
69
+ .aura-x-attachments--empty {
70
+ color: var(--aura-text-tertiary);
71
+ font-size: var(--aura-font-size-xs);
72
+ line-height: 1.5;
73
+ }
74
+
75
+
76
+ /* ---- bubble/index.less ---- */
77
+ /* Bubble — AI 对话气泡(玻璃拟态 + 品牌渐变) */
78
+ .aura-x-bubble {
79
+ display: flex;
80
+ gap: var(--aura-spacing-3);
81
+ align-items: flex-start;
82
+ animation: aura-x-bubble-in var(--aura-duration-normal) var(--aura-easing);
83
+ }
84
+ @keyframes aura-x-bubble-in {
85
+ from {
86
+ opacity: 0;
87
+ transform: translateY(6px);
88
+ }
89
+ to {
90
+ opacity: 1;
91
+ transform: none;
92
+ }
93
+ }
94
+ /* 用户消息在右侧 */
95
+ .aura-x-bubble--end {
96
+ flex-direction: row-reverse;
97
+ }
98
+ .aura-x-bubble-avatar {
99
+ flex-shrink: 0;
100
+ display: grid;
101
+ place-items: center;
102
+ width: 36px;
103
+ height: 36px;
104
+ border-radius: var(--aura-radius-full);
105
+ overflow: hidden;
106
+ border: 1px solid var(--aura-x-bubble-border);
107
+ background: var(--aura-x-stage-bg);
108
+ }
109
+ .aura-x-bubble-main {
110
+ display: flex;
111
+ flex-direction: column;
112
+ gap: var(--aura-spacing-1);
113
+ min-width: 0;
114
+ max-width: 100%;
115
+ }
116
+ .aura-x-bubble--end .aura-x-bubble-main {
117
+ align-items: flex-end;
118
+ }
119
+ .aura-x-bubble-header,
120
+ .aura-x-bubble-footer {
121
+ font-size: var(--aura-font-size-xs);
122
+ color: var(--aura-text-tertiary);
123
+ padding: 0 var(--aura-spacing-1);
124
+ }
125
+ .aura-x-bubble-content {
126
+ padding: var(--aura-spacing-3) var(--aura-spacing-4);
127
+ border-radius: var(--aura-radius-lg);
128
+ font-size: var(--aura-font-size-md);
129
+ line-height: 1.65;
130
+ word-break: break-word;
131
+ white-space: pre-wrap;
132
+ transition: background var(--aura-duration-normal) var(--aura-easing), box-shadow var(--aura-duration-normal) var(--aura-easing);
133
+ }
134
+ /* 气泡尖角朝向说话者(现代聊天形态) */
135
+ .aura-x-bubble--start .aura-x-bubble-content {
136
+ border-top-left-radius: var(--aura-radius-sm);
137
+ }
138
+ .aura-x-bubble--end .aura-x-bubble-content {
139
+ border-top-right-radius: var(--aura-radius-sm);
140
+ }
141
+ /* AI:玻璃拟态 */
142
+ .aura-x-bubble--start.aura-x-bubble--filled .aura-x-bubble-content {
143
+ background: var(--aura-x-bubble-ai-bg);
144
+ border: 1px solid var(--aura-x-bubble-border);
145
+ backdrop-filter: var(--aura-x-glass-blur);
146
+ -webkit-backdrop-filter: var(--aura-x-glass-blur);
147
+ }
148
+ /* 用户:品牌渐变 + 光晕投影 */
149
+ .aura-x-bubble--end.aura-x-bubble--filled .aura-x-bubble-content {
150
+ background: var(--aura-x-bubble-user-bg);
151
+ color: var(--aura-x-bubble-user-text);
152
+ box-shadow: 0 6px 18px -6px rgba(124, 58, 237, 0.55);
153
+ }
154
+ /* outlined:细边框玻璃 */
155
+ .aura-x-bubble--outlined .aura-x-bubble-content {
156
+ background: var(--aura-x-bubble-ai-bg);
157
+ border: 1px solid var(--aura-x-bubble-border);
158
+ }
159
+ /* shadow:玻璃 + 光晕 */
160
+ .aura-x-bubble--shadow .aura-x-bubble-content {
161
+ background: var(--aura-x-bubble-ai-bg);
162
+ backdrop-filter: var(--aura-x-glass-blur);
163
+ -webkit-backdrop-filter: var(--aura-x-glass-blur);
164
+ box-shadow: var(--aura-x-glow);
165
+ }
166
+ /* 生成中:品牌色光点 */
167
+ .aura-x-bubble-dots {
168
+ display: inline-flex;
169
+ gap: 4px;
170
+ align-items: center;
171
+ }
172
+ .aura-x-bubble-dots i {
173
+ width: 6px;
174
+ height: 6px;
175
+ border-radius: var(--aura-radius-full);
176
+ background: var(--aura-x-accent);
177
+ opacity: 0.35;
178
+ animation: aura-x-bubble-blink 1.2s infinite ease-in-out;
179
+ }
180
+ .aura-x-bubble-dots i:nth-child(2) {
181
+ animation-delay: 0.2s;
182
+ }
183
+ .aura-x-bubble-dots i:nth-child(3) {
184
+ animation-delay: 0.4s;
185
+ }
186
+ @keyframes aura-x-bubble-blink {
187
+ 0%,
188
+ 80%,
189
+ 100% {
190
+ opacity: 0.2;
191
+ transform: scale(0.85);
192
+ }
193
+ 40% {
194
+ opacity: 1;
195
+ transform: scale(1);
196
+ }
197
+ }
198
+ /* 无障碍:偏好减少动效时关闭入场与打点动画 */
199
+ @media (prefers-reduced-motion: reduce) {
200
+ .aura-x-bubble {
201
+ animation: none;
202
+ }
203
+ .aura-x-bubble-dots i {
204
+ animation: none;
205
+ opacity: 0.6;
206
+ }
207
+ }
208
+ /* 列表 */
209
+ .aura-x-bubble-list {
210
+ display: flex;
211
+ flex-direction: column;
212
+ gap: var(--aura-spacing-4);
213
+ overflow-y: auto;
214
+ }
215
+
216
+
217
+ /* ---- code-highlighter/index.less ---- */
218
+ /* CodeHighlighter — 代码高亮(头部 + Prism 着色代码区) */
219
+ .aura-x-code-highlighter {
220
+ overflow: hidden;
221
+ border: 1px solid var(--aura-x-bubble-border);
222
+ border-radius: var(--aura-radius-md);
223
+ background: var(--aura-x-code-bg);
224
+ }
225
+ /* ===== 头部 ===== */
226
+ .aura-x-code-highlighter-header {
227
+ display: flex;
228
+ gap: var(--aura-spacing-2);
229
+ align-items: center;
230
+ justify-content: space-between;
231
+ padding: var(--aura-spacing-1) var(--aura-spacing-2) var(--aura-spacing-1) var(--aura-spacing-3);
232
+ border-bottom: 1px solid var(--aura-border);
233
+ background: var(--aura-x-stage-bg);
234
+ }
235
+ .aura-x-code-highlighter-lang {
236
+ color: var(--aura-text-secondary);
237
+ font-size: var(--aura-font-size-xs);
238
+ letter-spacing: 0.4px;
239
+ text-transform: lowercase;
240
+ }
241
+ .aura-x-code-highlighter-copy {
242
+ display: inline-flex;
243
+ gap: var(--aura-spacing-1);
244
+ align-items: center;
245
+ padding: var(--aura-spacing-1) var(--aura-spacing-2);
246
+ border: none;
247
+ border-radius: var(--aura-radius-sm);
248
+ background: transparent;
249
+ color: var(--aura-text-secondary);
250
+ font-size: var(--aura-font-size-xs);
251
+ cursor: pointer;
252
+ transition: background var(--aura-duration-fast) var(--aura-easing), color var(--aura-duration-fast) var(--aura-easing);
253
+ }
254
+ .aura-x-code-highlighter-copy:hover {
255
+ background: var(--aura-x-accent-soft);
256
+ color: var(--aura-x-accent);
257
+ }
258
+ .aura-x-code-highlighter-copy:focus-visible {
259
+ outline: none;
260
+ box-shadow: var(--aura-x-focus-ring);
261
+ }
262
+ .aura-x-code-highlighter-copy > svg {
263
+ width: 13px;
264
+ height: 13px;
265
+ }
266
+ /* ===== 代码区 ===== */
267
+ .aura-x-code-highlighter-pre {
268
+ margin: 0;
269
+ padding: var(--aura-spacing-3);
270
+ overflow-x: auto;
271
+ background: transparent;
272
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
273
+ font-size: var(--aura-font-size-sm);
274
+ line-height: 1.65;
275
+ }
276
+ .aura-x-code-highlighter-line {
277
+ display: block;
278
+ min-height: 1.65em;
279
+ }
280
+
281
+
282
+ /* ---- conversations/index.less ---- */
283
+ /* Conversations — 会话管理列表 */
284
+ .aura-x-conversations-list {
285
+ display: flex;
286
+ flex-direction: column;
287
+ gap: 2px;
288
+ margin: 0;
289
+ padding: var(--aura-spacing-1);
290
+ list-style: none;
291
+ }
292
+ .aura-x-conversations-item {
293
+ position: relative;
294
+ display: flex;
295
+ align-items: center;
296
+ border-radius: var(--aura-radius-md);
297
+ transition: background var(--aura-duration-fast) var(--aura-easing);
298
+ }
299
+ .aura-x-conversations-item:hover,
300
+ .aura-x-conversations-item--active {
301
+ background: var(--aura-x-accent-soft);
302
+ }
303
+ .aura-x-conversations-item--active .aura-x-conversations-item-label {
304
+ color: var(--aura-x-accent);
305
+ font-weight: 500;
306
+ }
307
+ .aura-x-conversations-item-main {
308
+ display: flex;
309
+ flex: 1;
310
+ gap: var(--aura-spacing-2);
311
+ align-items: center;
312
+ min-width: 0;
313
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
314
+ border: none;
315
+ background: transparent;
316
+ color: var(--aura-text);
317
+ font-size: var(--aura-font-size-sm);
318
+ text-align: left;
319
+ cursor: pointer;
320
+ }
321
+ .aura-x-conversations-item-icon {
322
+ display: grid;
323
+ place-items: center;
324
+ flex-shrink: 0;
325
+ }
326
+ .aura-x-conversations-item-label {
327
+ flex: 1;
328
+ overflow: hidden;
329
+ text-overflow: ellipsis;
330
+ white-space: nowrap;
331
+ }
332
+ .aura-x-conversations-item-time {
333
+ flex-shrink: 0;
334
+ font-size: var(--aura-font-size-xs);
335
+ color: var(--aura-text-tertiary);
336
+ }
337
+ .aura-x-conversations-item-menu {
338
+ position: relative;
339
+ display: none;
340
+ flex-shrink: 0;
341
+ }
342
+ .aura-x-conversations-item:hover .aura-x-conversations-item-menu,
343
+ .aura-x-conversations-menu-btn--open {
344
+ display: inline-flex;
345
+ }
346
+ .aura-x-conversations-menu-btn {
347
+ display: inline-flex;
348
+ align-items: center;
349
+ justify-content: center;
350
+ width: 24px;
351
+ height: 24px;
352
+ border: none;
353
+ border-radius: var(--aura-radius-sm);
354
+ background: transparent;
355
+ color: var(--aura-text-tertiary);
356
+ cursor: pointer;
357
+ letter-spacing: 1px;
358
+ transition: background var(--aura-duration-fast) var(--aura-easing);
359
+ }
360
+ .aura-x-conversations-menu-btn:hover,
361
+ .aura-x-conversations-menu-btn--open {
362
+ background: var(--aura-x-accent-soft);
363
+ color: var(--aura-x-accent);
364
+ }
365
+ .aura-x-conversations-menu {
366
+ position: absolute;
367
+ top: calc(100% + 4px);
368
+ right: 0;
369
+ z-index: 10;
370
+ display: flex;
371
+ flex-direction: column;
372
+ gap: 2px;
373
+ min-width: 120px;
374
+ padding: var(--aura-spacing-1);
375
+ border: 1px solid var(--aura-x-bubble-border);
376
+ border-radius: var(--aura-radius-md);
377
+ background: var(--aura-x-bubble-ai-bg);
378
+ backdrop-filter: var(--aura-x-glass-blur);
379
+ -webkit-backdrop-filter: var(--aura-x-glass-blur);
380
+ box-shadow: var(--aura-x-glow);
381
+ }
382
+ .aura-x-conversations-menu-item {
383
+ display: block;
384
+ width: 100%;
385
+ padding: var(--aura-spacing-1) var(--aura-spacing-3);
386
+ border: none;
387
+ border-radius: var(--aura-radius-sm);
388
+ background: transparent;
389
+ color: var(--aura-text);
390
+ font-size: var(--aura-font-size-sm);
391
+ text-align: left;
392
+ cursor: pointer;
393
+ transition: background var(--aura-duration-fast) var(--aura-easing);
394
+ }
395
+ .aura-x-conversations-menu-item:hover {
396
+ background: var(--aura-x-accent-soft);
397
+ }
398
+ .aura-x-conversations-menu-item--danger {
399
+ color: var(--aura-error);
400
+ }
401
+ .aura-x-conversations-menu-item--danger:hover {
402
+ background: rgba(239, 68, 68, 0.1);
403
+ }
404
+
405
+
406
+ /* ---- file-card/index.less ---- */
407
+ /* FileCard — 文件卡片(附件 / 引用文件的展示单元) */
408
+ .aura-x-file-card {
409
+ display: flex;
410
+ gap: var(--aura-spacing-2);
411
+ align-items: flex-start;
412
+ width: 264px;
413
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
414
+ border: 1px solid var(--aura-border);
415
+ border-radius: var(--aura-radius-md);
416
+ background: var(--aura-x-bubble-ai-bg);
417
+ transition: border-color var(--aura-duration-fast) var(--aura-easing), box-shadow var(--aura-duration-fast) var(--aura-easing);
418
+ }
419
+ .aura-x-file-card:hover {
420
+ border-color: var(--aura-x-bubble-border);
421
+ box-shadow: var(--aura-shadow-sm);
422
+ }
423
+ .aura-x-file-card-icon {
424
+ display: flex;
425
+ flex: none;
426
+ align-items: center;
427
+ justify-content: center;
428
+ width: 36px;
429
+ height: 36px;
430
+ border-radius: var(--aura-radius-sm);
431
+ background: var(--aura-x-accent-soft);
432
+ color: var(--aura-x-accent);
433
+ }
434
+ .aura-x-file-card-icon > svg {
435
+ width: 18px;
436
+ height: 18px;
437
+ }
438
+ .aura-x-file-card-body {
439
+ flex: 1;
440
+ min-width: 0;
441
+ }
442
+ .aura-x-file-card-main {
443
+ display: flex;
444
+ gap: var(--aura-spacing-1);
445
+ align-items: center;
446
+ }
447
+ .aura-x-file-card-name {
448
+ overflow: hidden;
449
+ color: var(--aura-text);
450
+ font-size: var(--aura-font-size-sm);
451
+ line-height: 1.5;
452
+ text-overflow: ellipsis;
453
+ white-space: nowrap;
454
+ }
455
+ .aura-x-file-card-check {
456
+ flex: none;
457
+ color: var(--aura-success);
458
+ font-size: var(--aura-font-size-xs);
459
+ line-height: 1.5;
460
+ }
461
+ .aura-x-file-card-remove {
462
+ display: flex;
463
+ flex: none;
464
+ align-items: center;
465
+ justify-content: center;
466
+ width: 20px;
467
+ height: 20px;
468
+ margin-inline-start: auto;
469
+ padding: 0;
470
+ border: none;
471
+ border-radius: var(--aura-radius-sm);
472
+ background: transparent;
473
+ color: var(--aura-text-tertiary);
474
+ font-size: var(--aura-font-size-md);
475
+ line-height: 1;
476
+ cursor: pointer;
477
+ transition: background var(--aura-duration-fast) var(--aura-easing), color var(--aura-duration-fast) var(--aura-easing);
478
+ }
479
+ .aura-x-file-card-remove:hover {
480
+ background: var(--aura-x-accent-soft);
481
+ color: var(--aura-x-accent);
482
+ }
483
+ .aura-x-file-card-remove:focus-visible {
484
+ outline: none;
485
+ box-shadow: var(--aura-x-focus-ring);
486
+ }
487
+ .aura-x-file-card-meta {
488
+ display: flex;
489
+ gap: var(--aura-spacing-2);
490
+ align-items: center;
491
+ margin-top: 2px;
492
+ color: var(--aura-text-tertiary);
493
+ font-size: var(--aura-font-size-xs);
494
+ line-height: 1.5;
495
+ }
496
+ .aura-x-file-card-ext {
497
+ padding: 0 4px;
498
+ border-radius: var(--aura-radius-full);
499
+ background: var(--aura-bg-tertiary);
500
+ text-transform: uppercase;
501
+ }
502
+ .aura-x-file-card-progress {
503
+ height: 4px;
504
+ margin-top: var(--aura-spacing-1);
505
+ border-radius: var(--aura-radius-full);
506
+ background: var(--aura-bg-tertiary);
507
+ overflow: hidden;
508
+ }
509
+ .aura-x-file-card-progress-bar {
510
+ height: 100%;
511
+ border-radius: inherit;
512
+ background: var(--aura-x-accent-gradient);
513
+ transition: width var(--aura-duration-normal) var(--aura-easing);
514
+ }
515
+ .aura-x-file-card-desc {
516
+ margin-top: var(--aura-spacing-1);
517
+ color: var(--aura-text-secondary);
518
+ font-size: var(--aura-font-size-xs);
519
+ line-height: 1.5;
520
+ }
521
+ /* 失败态 */
522
+ .aura-x-file-card--error {
523
+ border-color: var(--aura-error);
524
+ }
525
+ .aura-x-file-card--error .aura-x-file-card-icon {
526
+ background: var(--aura-error-light);
527
+ color: var(--aura-error);
528
+ }
529
+ .aura-x-file-card--error .aura-x-file-card-size {
530
+ color: var(--aura-error);
531
+ }
532
+ .aura-x-file-card-error-tip {
533
+ margin-top: var(--aura-spacing-1);
534
+ color: var(--aura-error);
535
+ font-size: var(--aura-font-size-xs);
536
+ line-height: 1.5;
537
+ }
538
+ /* 成功态 */
539
+ .aura-x-file-card--done .aura-x-file-card-icon {
540
+ background: var(--aura-success-light);
541
+ color: var(--aura-success);
542
+ }
543
+
544
+
545
+ /* ---- folder/index.less ---- */
546
+ /* Folder — 文件树 + 文件预览 */
547
+ .aura-x-folder {
548
+ display: flex;
549
+ overflow: hidden;
550
+ border: 1px solid var(--aura-x-bubble-border);
551
+ border-radius: var(--aura-radius-md);
552
+ background: var(--aura-x-bubble-ai-bg);
553
+ min-height: 240px;
554
+ }
555
+ /* ===== 左侧目录树 ===== */
556
+ .aura-x-folder-directory {
557
+ display: flex;
558
+ flex: none;
559
+ flex-direction: column;
560
+ border-right: 1px solid var(--aura-border);
561
+ background: var(--aura-x-stage-bg);
562
+ }
563
+ .aura-x-folder-directory-title {
564
+ flex: none;
565
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
566
+ border-bottom: 1px solid var(--aura-border);
567
+ color: var(--aura-text-secondary);
568
+ font-size: var(--aura-font-size-xs);
569
+ font-weight: 600;
570
+ letter-spacing: 0.4px;
571
+ }
572
+ .aura-x-folder-tree {
573
+ flex: 1;
574
+ overflow: auto;
575
+ padding: var(--aura-spacing-2) var(--aura-spacing-1);
576
+ }
577
+ .aura-x-folder-node {
578
+ display: flex;
579
+ gap: var(--aura-spacing-1);
580
+ align-items: center;
581
+ padding: var(--aura-spacing-1) var(--aura-spacing-2);
582
+ border-radius: var(--aura-radius-sm);
583
+ color: var(--aura-text);
584
+ font-size: var(--aura-font-size-sm);
585
+ cursor: pointer;
586
+ transition: background var(--aura-duration-fast) var(--aura-easing), color var(--aura-duration-fast) var(--aura-easing);
587
+ }
588
+ .aura-x-folder-node:hover {
589
+ background: var(--aura-x-accent-soft);
590
+ }
591
+ .aura-x-folder-node:focus-visible {
592
+ outline: none;
593
+ box-shadow: var(--aura-x-focus-ring);
594
+ }
595
+ .aura-x-folder-node--selected,
596
+ .aura-x-folder-node--selected:hover {
597
+ background: var(--aura-x-accent-gradient);
598
+ color: var(--aura-text-inverse);
599
+ }
600
+ .aura-x-folder-node--selected .aura-x-folder-node-icon,
601
+ .aura-x-folder-node--selected .aura-x-folder-caret {
602
+ color: var(--aura-text-inverse);
603
+ }
604
+ .aura-x-folder-caret {
605
+ flex: none;
606
+ width: 12px;
607
+ color: var(--aura-text-tertiary);
608
+ font-size: 10px;
609
+ line-height: 1;
610
+ text-align: center;
611
+ }
612
+ .aura-x-folder-node-icon {
613
+ flex: none;
614
+ display: inline-flex;
615
+ color: var(--aura-text-secondary);
616
+ }
617
+ .aura-x-folder-node-icon > svg {
618
+ width: 14px;
619
+ height: 14px;
620
+ }
621
+ .aura-x-folder-node-title {
622
+ flex: 1;
623
+ min-width: 0;
624
+ overflow: hidden;
625
+ white-space: nowrap;
626
+ text-overflow: ellipsis;
627
+ }
628
+ /* ===== 右侧预览 ===== */
629
+ .aura-x-folder-preview {
630
+ display: flex;
631
+ flex: 1;
632
+ flex-direction: column;
633
+ min-width: 0;
634
+ }
635
+ .aura-x-folder-preview-header {
636
+ flex: none;
637
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
638
+ border-bottom: 1px solid var(--aura-border);
639
+ color: var(--aura-text);
640
+ font-size: var(--aura-font-size-sm);
641
+ font-weight: 600;
642
+ }
643
+ .aura-x-folder-preview-title {
644
+ display: inline-block;
645
+ overflow: hidden;
646
+ max-width: 100%;
647
+ white-space: nowrap;
648
+ text-overflow: ellipsis;
649
+ }
650
+ .aura-x-folder-preview-body {
651
+ flex: 1;
652
+ overflow: auto;
653
+ padding: var(--aura-spacing-3);
654
+ }
655
+ /* 预览内嵌的代码块抹平外框,避免与预览区形成双层边框 */
656
+ .aura-x-folder-preview-body .aura-x-code-highlighter {
657
+ border: none;
658
+ border-radius: 0;
659
+ background: transparent;
660
+ }
661
+ .aura-x-folder-preview-body .aura-x-code-highlighter-pre {
662
+ padding: 0;
663
+ }
664
+ .aura-x-folder-empty,
665
+ .aura-x-folder-loading {
666
+ padding: var(--aura-spacing-6) var(--aura-spacing-3);
667
+ color: var(--aura-text-secondary);
668
+ font-size: var(--aura-font-size-sm);
669
+ text-align: center;
670
+ }
671
+ .aura-x-folder-error {
672
+ padding: var(--aura-spacing-3);
673
+ border: 1px solid var(--aura-error);
674
+ border-radius: var(--aura-radius-sm);
675
+ background: var(--aura-error-light);
676
+ color: var(--aura-error);
677
+ font-size: var(--aura-font-size-sm);
678
+ }
679
+
680
+
681
+ /* ---- markdown-content/index.less ---- */
682
+ /* MarkdownContent — AI 消息的 Markdown 排版(科技感微调) */
683
+ .aura-x-markdown {
684
+ font-size: var(--aura-font-size-md);
685
+ line-height: 1.7;
686
+ word-break: break-word;
687
+ /* 行内代码:品牌色点染 */
688
+ /* 代码块(highlightCode={false} 时的朴素形态):暗色科技底 + 细边框 */
689
+ /* 围栏代码块默认交给 CodeHighlighter 渲染,这里只统一它的外边距,
690
+ 内层留白与底色由 CodeHighlighter 自己负责,避免与上面的 pre 规则打架 */
691
+ /* 引用块:渐变左边线 + 品牌浅底 */
692
+ }
693
+ .aura-x-markdown > :first-child {
694
+ margin-top: 0;
695
+ }
696
+ .aura-x-markdown > :last-child {
697
+ margin-bottom: 0;
698
+ }
699
+ .aura-x-markdown h1,
700
+ .aura-x-markdown h2,
701
+ .aura-x-markdown h3,
702
+ .aura-x-markdown h4,
703
+ .aura-x-markdown h5,
704
+ .aura-x-markdown h6 {
705
+ margin: var(--aura-spacing-4) 0 var(--aura-spacing-2);
706
+ font-weight: 600;
707
+ line-height: 1.4;
708
+ }
709
+ .aura-x-markdown p {
710
+ margin: var(--aura-spacing-2) 0;
711
+ }
712
+ .aura-x-markdown ul,
713
+ .aura-x-markdown ol {
714
+ margin: var(--aura-spacing-2) 0;
715
+ padding-left: var(--aura-spacing-5);
716
+ }
717
+ .aura-x-markdown li {
718
+ margin: 4px 0;
719
+ }
720
+ .aura-x-markdown code {
721
+ padding: 2px 6px;
722
+ border-radius: var(--aura-radius-sm);
723
+ background: var(--aura-x-accent-soft);
724
+ color: var(--aura-x-accent);
725
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
726
+ font-size: 0.92em;
727
+ }
728
+ .aura-x-markdown pre {
729
+ margin: var(--aura-spacing-3) 0;
730
+ padding: var(--aura-spacing-3) var(--aura-spacing-4);
731
+ border-radius: var(--aura-radius-md);
732
+ border: 1px solid var(--aura-x-bubble-border);
733
+ background: var(--aura-x-code-bg);
734
+ overflow-x: auto;
735
+ }
736
+ .aura-x-markdown pre code {
737
+ padding: 0;
738
+ border: none;
739
+ background: transparent;
740
+ color: var(--aura-text);
741
+ }
742
+ .aura-x-markdown .aura-x-code-highlighter {
743
+ margin: var(--aura-spacing-3) 0;
744
+ }
745
+ .aura-x-markdown a {
746
+ color: var(--aura-x-accent);
747
+ text-decoration: none;
748
+ }
749
+ .aura-x-markdown a:hover {
750
+ text-decoration: underline;
751
+ }
752
+ .aura-x-markdown blockquote {
753
+ margin: var(--aura-spacing-3) 0;
754
+ padding: var(--aura-spacing-2) var(--aura-spacing-4);
755
+ border-left: 3px solid var(--aura-x-accent);
756
+ border-radius: 0 var(--aura-radius-sm) var(--aura-radius-sm) 0;
757
+ background: var(--aura-x-accent-soft);
758
+ color: var(--aura-text-secondary);
759
+ }
760
+ .aura-x-markdown table {
761
+ margin: var(--aura-spacing-3) 0;
762
+ border-collapse: collapse;
763
+ width: 100%;
764
+ }
765
+ .aura-x-markdown th,
766
+ .aura-x-markdown td {
767
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
768
+ border: 1px solid var(--aura-x-bubble-border);
769
+ text-align: left;
770
+ }
771
+ .aura-x-markdown th {
772
+ font-weight: 600;
773
+ background: var(--aura-x-accent-soft);
774
+ }
775
+ .aura-x-markdown hr {
776
+ margin: var(--aura-spacing-4) 0;
777
+ border: none;
778
+ border-top: 1px solid var(--aura-x-bubble-border);
779
+ }
780
+ /* 暗色下的局部微调 */
781
+ [data-theme='dark'] .aura-x-markdown blockquote,
782
+ [data-theme='dark'] .aura-x-markdown th {
783
+ background: rgba(139, 92, 246, 0.08);
784
+ }
785
+
786
+
787
+ /* ---- mermaid/index.less ---- */
788
+ /* Mermaid — 图表(头部操作栏 + 图片 / 代码双视图) */
789
+ .aura-x-mermaid {
790
+ overflow: hidden;
791
+ border: 1px solid var(--aura-x-bubble-border);
792
+ border-radius: var(--aura-radius-md);
793
+ background: var(--aura-x-bubble-ai-bg);
794
+ }
795
+ /* ===== 头部 ===== */
796
+ .aura-x-mermaid-header {
797
+ display: flex;
798
+ gap: var(--aura-spacing-2);
799
+ align-items: center;
800
+ justify-content: space-between;
801
+ padding: var(--aura-spacing-1) var(--aura-spacing-2) var(--aura-spacing-1) var(--aura-spacing-3);
802
+ border-bottom: 1px solid var(--aura-border);
803
+ background: var(--aura-x-stage-bg);
804
+ }
805
+ .aura-x-mermaid-views {
806
+ display: inline-flex;
807
+ gap: var(--aura-spacing-1);
808
+ }
809
+ .aura-x-mermaid-view-btn {
810
+ padding: var(--aura-spacing-1) var(--aura-spacing-2);
811
+ border: none;
812
+ border-radius: var(--aura-radius-sm);
813
+ background: transparent;
814
+ color: var(--aura-text-secondary);
815
+ font-size: var(--aura-font-size-xs);
816
+ cursor: pointer;
817
+ transition: background var(--aura-duration-fast) var(--aura-easing), color var(--aura-duration-fast) var(--aura-easing);
818
+ }
819
+ .aura-x-mermaid-view-btn--active {
820
+ background: var(--aura-x-accent-soft);
821
+ color: var(--aura-x-accent);
822
+ font-weight: 600;
823
+ }
824
+ .aura-x-mermaid-view-btn:focus-visible,
825
+ .aura-x-mermaid-action:focus-visible {
826
+ outline: none;
827
+ box-shadow: var(--aura-x-focus-ring);
828
+ }
829
+ .aura-x-mermaid-actions {
830
+ display: inline-flex;
831
+ gap: var(--aura-spacing-1);
832
+ align-items: center;
833
+ }
834
+ .aura-x-mermaid-action {
835
+ padding: var(--aura-spacing-1) var(--aura-spacing-2);
836
+ border: none;
837
+ border-radius: var(--aura-radius-sm);
838
+ background: transparent;
839
+ color: var(--aura-text-secondary);
840
+ font-size: var(--aura-font-size-xs);
841
+ line-height: 1.5;
842
+ cursor: pointer;
843
+ transition: background var(--aura-duration-fast) var(--aura-easing), color var(--aura-duration-fast) var(--aura-easing);
844
+ }
845
+ .aura-x-mermaid-action:hover:not(:disabled) {
846
+ background: var(--aura-x-accent-soft);
847
+ color: var(--aura-x-accent);
848
+ }
849
+ .aura-x-mermaid-action:disabled {
850
+ color: var(--aura-text-tertiary);
851
+ cursor: default;
852
+ }
853
+ /* ===== 内容区 ===== */
854
+ .aura-x-mermaid-body {
855
+ padding: var(--aura-spacing-3);
856
+ }
857
+ /* 代码视图下把内嵌 CodeHighlighter 的外框抹平,避免双层边框 */
858
+ .aura-x-mermaid-body--code {
859
+ padding: 0;
860
+ }
861
+ .aura-x-mermaid-body--code .aura-x-code-highlighter {
862
+ border: none;
863
+ border-radius: 0;
864
+ }
865
+ .aura-x-mermaid-graph {
866
+ overflow: auto;
867
+ max-height: 420px;
868
+ background: var(--aura-x-stage-bg);
869
+ border-radius: var(--aura-radius-sm);
870
+ }
871
+ .aura-x-mermaid-canvas {
872
+ display: flex;
873
+ align-items: center;
874
+ justify-content: center;
875
+ padding: var(--aura-spacing-3);
876
+ transform-origin: center center;
877
+ transition: transform var(--aura-duration-normal) var(--aura-easing);
878
+ }
879
+ .aura-x-mermaid-canvas > svg {
880
+ max-width: 100%;
881
+ height: auto;
882
+ }
883
+ .aura-x-mermaid-loading {
884
+ padding: var(--aura-spacing-6) 0;
885
+ color: var(--aura-text-secondary);
886
+ font-size: var(--aura-font-size-sm);
887
+ text-align: center;
888
+ }
889
+ .aura-x-mermaid-error {
890
+ padding: var(--aura-spacing-3);
891
+ border: 1px solid var(--aura-error);
892
+ border-radius: var(--aura-radius-sm);
893
+ background: var(--aura-error-light);
894
+ }
895
+ .aura-x-mermaid-error-title {
896
+ margin: 0 0 var(--aura-spacing-1);
897
+ color: var(--aura-error);
898
+ font-size: var(--aura-font-size-sm);
899
+ font-weight: 600;
900
+ }
901
+ .aura-x-mermaid-error-detail {
902
+ margin: 0;
903
+ overflow-x: auto;
904
+ color: var(--aura-text-secondary);
905
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
906
+ font-size: var(--aura-font-size-xs);
907
+ line-height: 1.6;
908
+ white-space: pre-wrap;
909
+ }
910
+ @media (prefers-reduced-motion: reduce) {
911
+ .aura-x-mermaid-canvas {
912
+ transition: none;
913
+ }
914
+ }
915
+
916
+
917
+ /* ---- prompts/index.less ---- */
918
+ /* Prompts — 提示词集(玻璃卡片 + 渐变图标底座 + 悬停上浮) */
919
+ .aura-x-prompts-title {
920
+ margin-bottom: var(--aura-spacing-2);
921
+ font-size: var(--aura-font-size-sm);
922
+ color: var(--aura-text-secondary);
923
+ }
924
+ .aura-x-prompts-list {
925
+ display: flex;
926
+ flex-direction: column;
927
+ gap: var(--aura-spacing-2);
928
+ margin: 0;
929
+ padding: 0;
930
+ list-style: none;
931
+ }
932
+ .aura-x-prompts--horizontal .aura-x-prompts-list {
933
+ flex-direction: row;
934
+ flex-wrap: wrap;
935
+ }
936
+ .aura-x-prompts-item {
937
+ display: flex;
938
+ gap: var(--aura-spacing-3);
939
+ align-items: flex-start;
940
+ width: 100%;
941
+ padding: var(--aura-spacing-3) var(--aura-spacing-4);
942
+ border: 1px solid var(--aura-x-bubble-border);
943
+ border-radius: var(--aura-radius-md);
944
+ background: var(--aura-x-bubble-ai-bg);
945
+ color: var(--aura-text);
946
+ text-align: left;
947
+ cursor: pointer;
948
+ transition: border-color var(--aura-duration-normal) var(--aura-easing), background var(--aura-duration-normal) var(--aura-easing), box-shadow var(--aura-duration-normal) var(--aura-easing), transform var(--aura-duration-fast) var(--aura-easing);
949
+ }
950
+ .aura-x-prompts-item:hover {
951
+ border-color: var(--aura-x-accent);
952
+ background: var(--aura-x-accent-soft);
953
+ box-shadow: var(--aura-x-glow);
954
+ transform: translateY(-2px);
955
+ }
956
+ .aura-x-prompts-item:focus-visible {
957
+ outline: none;
958
+ box-shadow: var(--aura-x-focus-ring);
959
+ }
960
+ .aura-x-prompts--horizontal .aura-x-prompts-item {
961
+ width: auto;
962
+ min-width: 180px;
963
+ flex: 1 1 220px;
964
+ }
965
+ /* 图标底座:渐变圆角方块 */
966
+ .aura-x-prompts-item-icon {
967
+ display: grid;
968
+ place-items: center;
969
+ flex-shrink: 0;
970
+ width: 32px;
971
+ height: 32px;
972
+ border-radius: var(--aura-radius-md);
973
+ background: var(--aura-x-accent-gradient);
974
+ color: #fff;
975
+ font-size: 16px;
976
+ line-height: 1;
977
+ }
978
+ .aura-x-prompts-item-body {
979
+ display: flex;
980
+ flex-direction: column;
981
+ gap: 2px;
982
+ min-width: 0;
983
+ }
984
+ .aura-x-prompts-item-label {
985
+ font-size: var(--aura-font-size-sm);
986
+ font-weight: 500;
987
+ }
988
+ .aura-x-prompts-item-description {
989
+ font-size: var(--aura-font-size-xs);
990
+ color: var(--aura-text-secondary);
991
+ }
992
+ @media (prefers-reduced-motion: reduce) {
993
+ .aura-x-prompts-item:hover {
994
+ transform: none;
995
+ }
996
+ }
997
+
998
+
999
+ /* ---- sender/index.less ---- */
1000
+ /* Sender — 对话输入框(玻璃容器 + 聚焦光晕 + 渐变按钮) */
1001
+ .aura-x-sender {
1002
+ display: flex;
1003
+ gap: var(--aura-spacing-2);
1004
+ align-items: flex-end;
1005
+ flex-wrap: wrap;
1006
+ padding: var(--aura-spacing-2) var(--aura-spacing-2) var(--aura-spacing-2) var(--aura-spacing-4);
1007
+ border: 1px solid var(--aura-x-bubble-border);
1008
+ border-radius: var(--aura-radius-lg);
1009
+ background: var(--aura-x-bubble-ai-bg);
1010
+ backdrop-filter: var(--aura-x-glass-blur);
1011
+ -webkit-backdrop-filter: var(--aura-x-glass-blur);
1012
+ transition: border-color var(--aura-duration-normal) var(--aura-easing), box-shadow var(--aura-duration-normal) var(--aura-easing);
1013
+ }
1014
+ .aura-x-sender:focus-within {
1015
+ border-color: var(--aura-x-accent);
1016
+ box-shadow: var(--aura-x-focus-ring);
1017
+ }
1018
+ .aura-x-sender .ant-input {
1019
+ flex: 1;
1020
+ min-width: 0;
1021
+ border: none;
1022
+ background: transparent;
1023
+ box-shadow: none;
1024
+ resize: none;
1025
+ }
1026
+ .aura-x-sender .aura-x-sender-actions {
1027
+ display: inline-flex;
1028
+ flex-shrink: 0;
1029
+ }
1030
+ .aura-x-sender .ant-btn {
1031
+ border: none;
1032
+ color: #fff;
1033
+ background: var(--aura-x-accent-gradient);
1034
+ box-shadow: 0 4px 12px -4px rgba(124, 58, 237, 0.5);
1035
+ transition: transform var(--aura-duration-fast) var(--aura-easing), box-shadow var(--aura-duration-fast) var(--aura-easing), opacity var(--aura-duration-fast) var(--aura-easing);
1036
+ }
1037
+ .aura-x-sender .ant-btn:not(:disabled):hover {
1038
+ transform: translateY(-1px);
1039
+ box-shadow: 0 6px 16px -4px rgba(124, 58, 237, 0.65);
1040
+ }
1041
+ .aura-x-sender .ant-btn:not(:disabled):active {
1042
+ transform: translateY(0);
1043
+ }
1044
+ /* 插槽 */
1045
+ .aura-x-sender-header,
1046
+ .aura-x-sender-footer {
1047
+ flex-basis: 100%;
1048
+ font-size: var(--aura-font-size-xs);
1049
+ color: var(--aura-text-tertiary);
1050
+ }
1051
+ .aura-x-sender--disabled {
1052
+ opacity: 0.6;
1053
+ }
1054
+ @media (prefers-reduced-motion: reduce) {
1055
+ .aura-x-sender .ant-btn:not(:disabled):hover {
1056
+ transform: none;
1057
+ }
1058
+ }
1059
+
1060
+
1061
+ /* ---- sources/index.less ---- */
1062
+ /* Sources — 来源引用(头部摘要 + 有序列表 / 行内上标) */
1063
+ .aura-x-sources {
1064
+ border: 1px solid var(--aura-x-bubble-border);
1065
+ border-radius: var(--aura-radius-md);
1066
+ background: var(--aura-x-bubble-ai-bg);
1067
+ }
1068
+ /* ===== 头部 ===== */
1069
+ .aura-x-sources-header {
1070
+ display: flex;
1071
+ gap: var(--aura-spacing-2);
1072
+ align-items: center;
1073
+ width: 100%;
1074
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
1075
+ border: none;
1076
+ border-radius: var(--aura-radius-md);
1077
+ background: transparent;
1078
+ color: var(--aura-text-secondary);
1079
+ font-size: var(--aura-font-size-sm);
1080
+ text-align: left;
1081
+ cursor: pointer;
1082
+ transition: background var(--aura-duration-fast) var(--aura-easing);
1083
+ }
1084
+ .aura-x-sources-header:hover {
1085
+ background: var(--aura-x-accent-soft);
1086
+ }
1087
+ .aura-x-sources-header:focus-visible {
1088
+ outline: none;
1089
+ box-shadow: var(--aura-x-focus-ring);
1090
+ }
1091
+ .aura-x-sources-title {
1092
+ flex: 1;
1093
+ min-width: 0;
1094
+ overflow: hidden;
1095
+ font-weight: 600;
1096
+ color: var(--aura-text);
1097
+ white-space: nowrap;
1098
+ text-overflow: ellipsis;
1099
+ }
1100
+ .aura-x-sources-caret {
1101
+ flex: none;
1102
+ font-size: 10px;
1103
+ line-height: 1;
1104
+ }
1105
+ /* 折叠图标置于标题之后(右侧) */
1106
+ .aura-x-sources-header--end .aura-x-sources-caret {
1107
+ order: 1;
1108
+ }
1109
+ /* ===== 有序列表 ===== */
1110
+ .aura-x-sources-list {
1111
+ margin: 0;
1112
+ padding: 0 var(--aura-spacing-3) var(--aura-spacing-2);
1113
+ list-style: none;
1114
+ }
1115
+ .aura-x-sources-item {
1116
+ padding: var(--aura-spacing-1) 0;
1117
+ }
1118
+ .aura-x-sources-item + .aura-x-sources-item {
1119
+ border-top: 1px dashed var(--aura-border);
1120
+ }
1121
+ .aura-x-sources-item-main {
1122
+ display: flex;
1123
+ gap: var(--aura-spacing-2);
1124
+ align-items: center;
1125
+ width: 100%;
1126
+ padding: var(--aura-spacing-1) 0;
1127
+ border: none;
1128
+ border-radius: var(--aura-radius-sm);
1129
+ background: transparent;
1130
+ color: var(--aura-text);
1131
+ font-size: var(--aura-font-size-sm);
1132
+ text-align: left;
1133
+ text-decoration: none;
1134
+ cursor: pointer;
1135
+ }
1136
+ a.aura-x-sources-item-main:hover .aura-x-sources-item-title,
1137
+ button.aura-x-sources-item-main:hover .aura-x-sources-item-title {
1138
+ color: var(--aura-x-accent);
1139
+ text-decoration: underline;
1140
+ }
1141
+ .aura-x-sources-item-main:focus-visible {
1142
+ outline: none;
1143
+ box-shadow: var(--aura-x-focus-ring);
1144
+ }
1145
+ .aura-x-sources-item-index {
1146
+ flex: none;
1147
+ display: inline-flex;
1148
+ align-items: center;
1149
+ justify-content: center;
1150
+ min-width: 16px;
1151
+ height: 16px;
1152
+ padding: 0 var(--aura-spacing-1);
1153
+ border-radius: var(--aura-radius-sm);
1154
+ background: var(--aura-x-accent-soft);
1155
+ color: var(--aura-x-accent);
1156
+ font-size: var(--aura-font-size-xs);
1157
+ line-height: 1;
1158
+ }
1159
+ .aura-x-sources-item-icon {
1160
+ flex: none;
1161
+ display: inline-flex;
1162
+ color: var(--aura-text-secondary);
1163
+ }
1164
+ .aura-x-sources-item-icon > svg {
1165
+ width: 14px;
1166
+ height: 14px;
1167
+ }
1168
+ .aura-x-sources-item-title {
1169
+ flex: 1;
1170
+ min-width: 0;
1171
+ overflow: hidden;
1172
+ white-space: nowrap;
1173
+ text-overflow: ellipsis;
1174
+ }
1175
+ .aura-x-sources-item-desc {
1176
+ padding-left: 24px;
1177
+ color: var(--aura-text-secondary);
1178
+ font-size: var(--aura-font-size-xs);
1179
+ line-height: 1.6;
1180
+ }
1181
+ /* ===== 行内模式 ===== */
1182
+ .aura-x-sources--inline {
1183
+ display: inline-flex;
1184
+ gap: var(--aura-spacing-1);
1185
+ align-items: center;
1186
+ border: none;
1187
+ background: transparent;
1188
+ }
1189
+ .aura-x-sources-inline-wrap {
1190
+ position: relative;
1191
+ display: inline-flex;
1192
+ }
1193
+ .aura-x-sources-inline-chip {
1194
+ display: inline-flex;
1195
+ align-items: center;
1196
+ justify-content: center;
1197
+ min-width: 16px;
1198
+ height: 16px;
1199
+ padding: 0 var(--aura-spacing-1);
1200
+ border: none;
1201
+ border-radius: var(--aura-radius-sm);
1202
+ background: var(--aura-x-accent-soft);
1203
+ color: var(--aura-x-accent);
1204
+ font-size: 10px;
1205
+ line-height: 1;
1206
+ cursor: pointer;
1207
+ transition: background var(--aura-duration-fast) var(--aura-easing), color var(--aura-duration-fast) var(--aura-easing);
1208
+ }
1209
+ .aura-x-sources-inline-chip--active,
1210
+ .aura-x-sources-inline-chip:hover {
1211
+ background: var(--aura-x-accent-gradient);
1212
+ color: var(--aura-text-inverse);
1213
+ }
1214
+ .aura-x-sources-inline-chip:focus-visible {
1215
+ outline: none;
1216
+ box-shadow: var(--aura-x-focus-ring);
1217
+ }
1218
+ .aura-x-sources-popover {
1219
+ position: absolute;
1220
+ bottom: calc(100% + var(--aura-spacing-1));
1221
+ left: 0;
1222
+ z-index: 20;
1223
+ display: flex;
1224
+ flex-direction: column;
1225
+ gap: var(--aura-spacing-1);
1226
+ max-width: 320px;
1227
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
1228
+ border: 1px solid var(--aura-x-bubble-border);
1229
+ border-radius: var(--aura-radius-md);
1230
+ background: var(--aura-bg);
1231
+ box-shadow: var(--aura-x-glow);
1232
+ text-align: left;
1233
+ }
1234
+ .aura-x-sources-popover-title {
1235
+ color: var(--aura-text);
1236
+ font-size: var(--aura-font-size-sm);
1237
+ font-weight: 600;
1238
+ }
1239
+ .aura-x-sources-popover-desc {
1240
+ color: var(--aura-text-secondary);
1241
+ font-size: var(--aura-font-size-xs);
1242
+ line-height: 1.6;
1243
+ }
1244
+ .aura-x-sources-popover-url {
1245
+ color: var(--aura-x-accent);
1246
+ font-size: var(--aura-font-size-xs);
1247
+ word-break: break-all;
1248
+ }
1249
+
1250
+
1251
+ /* ---- suggestion/index.less ---- */
1252
+ /* Suggestion — 快捷建议(玻璃下拉 + 品牌高亮) */
1253
+ .aura-x-suggestion-list {
1254
+ display: flex;
1255
+ flex-direction: column;
1256
+ gap: 2px;
1257
+ margin: 0;
1258
+ padding: var(--aura-spacing-1);
1259
+ list-style: none;
1260
+ border: 1px solid var(--aura-x-bubble-border);
1261
+ border-radius: var(--aura-radius-md);
1262
+ background: var(--aura-x-bubble-ai-bg);
1263
+ backdrop-filter: var(--aura-x-glass-blur);
1264
+ -webkit-backdrop-filter: var(--aura-x-glass-blur);
1265
+ box-shadow: var(--aura-x-glow);
1266
+ }
1267
+ .aura-x-suggestion-item {
1268
+ display: block;
1269
+ width: 100%;
1270
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
1271
+ border: none;
1272
+ border-left: 2px solid transparent;
1273
+ border-radius: var(--aura-radius-sm);
1274
+ background: transparent;
1275
+ color: var(--aura-text);
1276
+ font-size: var(--aura-font-size-sm);
1277
+ text-align: left;
1278
+ cursor: pointer;
1279
+ transition: background var(--aura-duration-fast) var(--aura-easing), border-color var(--aura-duration-fast) var(--aura-easing);
1280
+ }
1281
+ .aura-x-suggestion-item:hover {
1282
+ background: var(--aura-x-accent-soft);
1283
+ border-left-color: var(--aura-x-accent);
1284
+ }
1285
+ .aura-x-suggestion-item:focus-visible {
1286
+ outline: none;
1287
+ background: var(--aura-x-accent-soft);
1288
+ border-left-color: var(--aura-x-accent);
1289
+ }
1290
+
1291
+
1292
+ /* ---- think/index.less ---- */
1293
+ /* Think — 思考过程(渐变左边线 + 思考中流光标题) */
1294
+ .aura-x-think {
1295
+ position: relative;
1296
+ border: 1px solid var(--aura-x-bubble-border);
1297
+ border-radius: var(--aura-radius-md);
1298
+ background: var(--aura-x-bubble-ai-bg);
1299
+ overflow: hidden;
1300
+ }
1301
+ /* 品牌渐变左边线 */
1302
+ .aura-x-think::before {
1303
+ content: '';
1304
+ position: absolute;
1305
+ left: 0;
1306
+ top: 0;
1307
+ bottom: 0;
1308
+ width: 3px;
1309
+ background: var(--aura-x-accent-gradient);
1310
+ opacity: 0.8;
1311
+ }
1312
+ .aura-x-think-trigger {
1313
+ display: flex;
1314
+ gap: var(--aura-spacing-2);
1315
+ align-items: center;
1316
+ width: 100%;
1317
+ padding: var(--aura-spacing-2) var(--aura-spacing-3) var(--aura-spacing-2) var(--aura-spacing-4);
1318
+ border: none;
1319
+ background: transparent;
1320
+ color: var(--aura-text-secondary);
1321
+ font-size: var(--aura-font-size-sm);
1322
+ text-align: left;
1323
+ cursor: pointer;
1324
+ }
1325
+ .aura-x-think-trigger:focus-visible {
1326
+ outline: none;
1327
+ box-shadow: var(--aura-x-focus-ring);
1328
+ border-radius: var(--aura-radius-sm);
1329
+ }
1330
+ .aura-x-think-caret {
1331
+ font-size: 10px;
1332
+ line-height: 1;
1333
+ }
1334
+ /* 思考中:流光渐变文字 */
1335
+ .aura-x-think--thinking .aura-x-think-label {
1336
+ background: linear-gradient(90deg, var(--aura-x-accent) 0%, var(--aura-primary-400) 40%, var(--aura-x-accent) 80%);
1337
+ background-size: 200% 100%;
1338
+ -webkit-background-clip: text;
1339
+ background-clip: text;
1340
+ color: transparent;
1341
+ animation: aura-x-think-shimmer 2.2s infinite linear;
1342
+ }
1343
+ @keyframes aura-x-think-shimmer {
1344
+ from {
1345
+ background-position: 200% 0;
1346
+ }
1347
+ to {
1348
+ background-position: -200% 0;
1349
+ }
1350
+ }
1351
+ .aura-x-think-content {
1352
+ max-height: 240px;
1353
+ padding: var(--aura-spacing-2) var(--aura-spacing-3) var(--aura-spacing-3) var(--aura-spacing-4);
1354
+ overflow-y: auto;
1355
+ border-top: 1px dashed var(--aura-x-bubble-border);
1356
+ color: var(--aura-text-secondary);
1357
+ font-size: var(--aura-font-size-sm);
1358
+ line-height: 1.7;
1359
+ white-space: pre-wrap;
1360
+ }
1361
+ @media (prefers-reduced-motion: reduce) {
1362
+ .aura-x-think--thinking .aura-x-think-label {
1363
+ animation: none;
1364
+ background: none;
1365
+ color: var(--aura-x-accent);
1366
+ }
1367
+ }
1368
+
1369
+
1370
+ /* ---- thought-chain/index.less ---- */
1371
+ /* ThoughtChain — 思维链(时间线 + 状态节点) */
1372
+ .aura-x-thought-chain {
1373
+ border: 1px solid var(--aura-x-bubble-border);
1374
+ border-radius: var(--aura-radius-md);
1375
+ background: var(--aura-x-bubble-ai-bg);
1376
+ }
1377
+ .aura-x-thought-chain--plain {
1378
+ border: none;
1379
+ background: transparent;
1380
+ }
1381
+ /* ===== 折叠头部 ===== */
1382
+ .aura-x-thought-chain-header {
1383
+ display: flex;
1384
+ gap: var(--aura-spacing-2);
1385
+ align-items: center;
1386
+ width: 100%;
1387
+ padding: var(--aura-spacing-2) var(--aura-spacing-3);
1388
+ border: none;
1389
+ border-radius: var(--aura-radius-md);
1390
+ background: transparent;
1391
+ color: var(--aura-text-secondary);
1392
+ font-size: var(--aura-font-size-sm);
1393
+ text-align: left;
1394
+ cursor: pointer;
1395
+ transition: background var(--aura-duration-fast) var(--aura-easing);
1396
+ }
1397
+ .aura-x-thought-chain-header:hover {
1398
+ background: var(--aura-x-accent-soft);
1399
+ }
1400
+ .aura-x-thought-chain-header:focus-visible {
1401
+ outline: none;
1402
+ box-shadow: var(--aura-x-focus-ring);
1403
+ }
1404
+ .aura-x-thought-chain-header:disabled {
1405
+ cursor: default;
1406
+ }
1407
+ .aura-x-thought-chain-title {
1408
+ flex: none;
1409
+ font-weight: 600;
1410
+ color: var(--aura-text);
1411
+ }
1412
+ .aura-x-thought-chain-summary {
1413
+ flex: 1;
1414
+ color: var(--aura-text-tertiary);
1415
+ font-size: var(--aura-font-size-xs);
1416
+ }
1417
+ /* 进行中:摘要文字走品牌渐变流光 */
1418
+ .aura-x-thought-chain--running .aura-x-thought-chain-summary {
1419
+ color: var(--aura-x-accent);
1420
+ }
1421
+ .aura-x-thought-chain-caret {
1422
+ flex: none;
1423
+ font-size: 10px;
1424
+ line-height: 1;
1425
+ }
1426
+ /* ===== 时间线 ===== */
1427
+ .aura-x-thought-chain-list {
1428
+ margin: 0;
1429
+ padding: var(--aura-spacing-1) var(--aura-spacing-3) var(--aura-spacing-2);
1430
+ list-style: none;
1431
+ }
1432
+ .aura-x-thought-chain-item {
1433
+ position: relative;
1434
+ padding: var(--aura-spacing-1) 0 var(--aura-spacing-2) 24px;
1435
+ }
1436
+ /* 节点间的衔接线(最后一项不画) */
1437
+ .aura-x-thought-chain-item::before {
1438
+ content: '';
1439
+ position: absolute;
1440
+ left: 6px;
1441
+ top: 22px;
1442
+ bottom: -2px;
1443
+ width: 1px;
1444
+ background: var(--aura-border);
1445
+ }
1446
+ .aura-x-thought-chain-item:last-child::before {
1447
+ display: none;
1448
+ }
1449
+ .aura-x-thought-chain-node {
1450
+ position: absolute;
1451
+ left: 0;
1452
+ top: 6px;
1453
+ display: flex;
1454
+ align-items: center;
1455
+ justify-content: center;
1456
+ width: 14px;
1457
+ height: 14px;
1458
+ border: 2px solid var(--aura-text-tertiary);
1459
+ border-radius: var(--aura-radius-full);
1460
+ background: var(--aura-bg);
1461
+ font-size: 8px;
1462
+ line-height: 1;
1463
+ }
1464
+ .aura-x-thought-chain-node--success {
1465
+ border-color: var(--aura-success);
1466
+ background: var(--aura-success-light);
1467
+ color: var(--aura-success);
1468
+ }
1469
+ .aura-x-thought-chain-node--error {
1470
+ border-color: var(--aura-error);
1471
+ background: var(--aura-error-light);
1472
+ color: var(--aura-error);
1473
+ }
1474
+ .aura-x-thought-chain-node--thinking {
1475
+ border-color: var(--aura-x-accent);
1476
+ animation: aura-x-thought-chain-pulse 1.6s infinite var(--aura-easing);
1477
+ }
1478
+ @keyframes aura-x-thought-chain-pulse {
1479
+ 0%,
1480
+ 100% {
1481
+ transform: scale(1);
1482
+ border-color: var(--aura-x-accent);
1483
+ }
1484
+ 50% {
1485
+ transform: scale(1.25);
1486
+ border-color: var(--aura-primary-400);
1487
+ }
1488
+ }
1489
+ .aura-x-thought-chain-content {
1490
+ min-width: 0;
1491
+ }
1492
+ .aura-x-thought-chain-item-title {
1493
+ color: var(--aura-text);
1494
+ font-size: var(--aura-font-size-sm);
1495
+ line-height: 1.5;
1496
+ }
1497
+ .aura-x-thought-chain-item--pending .aura-x-thought-chain-item-title {
1498
+ color: var(--aura-text-tertiary);
1499
+ }
1500
+ .aura-x-thought-chain-item--error .aura-x-thought-chain-item-title {
1501
+ color: var(--aura-error);
1502
+ }
1503
+ .aura-x-thought-chain-item-desc {
1504
+ margin-top: 2px;
1505
+ color: var(--aura-text-secondary);
1506
+ font-size: var(--aura-font-size-xs);
1507
+ line-height: 1.6;
1508
+ white-space: pre-wrap;
1509
+ }
1510
+ @media (prefers-reduced-motion: reduce) {
1511
+ .aura-x-thought-chain-node--thinking {
1512
+ animation: none;
1513
+ border-color: var(--aura-x-accent);
1514
+ border-style: dotted;
1515
+ }
1516
+ }
1517
+
1518
+
1519
+ /* ---- welcome/index.less ---- */
1520
+ /* Welcome — 欢迎区(顶部光晕 + 渐变图标底座) */
1521
+ .aura-x-welcome {
1522
+ display: flex;
1523
+ flex-direction: column;
1524
+ align-items: center;
1525
+ gap: var(--aura-spacing-3);
1526
+ padding: var(--aura-spacing-6) var(--aura-spacing-4);
1527
+ text-align: center;
1528
+ overflow: hidden;
1529
+ }
1530
+ .aura-x-welcome--board {
1531
+ border: 1px solid var(--aura-x-bubble-border);
1532
+ border-radius: var(--aura-radius-lg);
1533
+ background: radial-gradient(560px 180px at 50% -60px, var(--aura-x-accent-soft), transparent 70%), var(--aura-x-bubble-ai-bg);
1534
+ backdrop-filter: var(--aura-x-glass-blur);
1535
+ -webkit-backdrop-filter: var(--aura-x-glass-blur);
1536
+ }
1537
+ /* 图标底座:渐变圆角方块 + 光晕 */
1538
+ .aura-x-welcome-icon {
1539
+ display: grid;
1540
+ place-items: center;
1541
+ width: 56px;
1542
+ height: 56px;
1543
+ border-radius: var(--aura-radius-lg);
1544
+ background: var(--aura-x-accent-gradient);
1545
+ color: #fff;
1546
+ font-size: 28px;
1547
+ line-height: 1;
1548
+ box-shadow: var(--aura-x-glow);
1549
+ }
1550
+ .aura-x-welcome-title {
1551
+ font-size: var(--aura-font-size-2xl);
1552
+ font-weight: 600;
1553
+ color: var(--aura-text);
1554
+ letter-spacing: 0.2px;
1555
+ }
1556
+ .aura-x-welcome-description {
1557
+ font-size: var(--aura-font-size-sm);
1558
+ color: var(--aura-text-secondary);
1559
+ max-width: 480px;
1560
+ }
1561
+ .aura-x-welcome-extra {
1562
+ margin-top: var(--aura-spacing-2);
1563
+ width: 100%;
1564
+ }
1565
+