@huyooo/ai-chat-frontend-react 0.1.4 → 0.1.8

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 (91) hide show
  1. package/README.md +368 -0
  2. package/dist/index.css +2575 -0
  3. package/dist/index.css.map +1 -0
  4. package/dist/index.d.ts +378 -135
  5. package/dist/index.js +3954 -1044
  6. package/dist/index.js.map +1 -1
  7. package/dist/style.css +48 -987
  8. package/package.json +7 -4
  9. package/src/adapter.ts +10 -70
  10. package/src/components/ChatPanel.tsx +373 -117
  11. package/src/components/common/ConfirmDialog.css +136 -0
  12. package/src/components/common/ConfirmDialog.tsx +91 -0
  13. package/src/components/common/CopyButton.css +22 -0
  14. package/src/components/common/CopyButton.tsx +46 -0
  15. package/src/components/common/IndexingSettings.css +207 -0
  16. package/src/components/common/IndexingSettings.tsx +398 -0
  17. package/src/components/common/SettingsPanel.css +256 -0
  18. package/src/components/common/SettingsPanel.tsx +120 -0
  19. package/src/components/common/Toast.css +50 -0
  20. package/src/components/common/Toast.tsx +38 -0
  21. package/src/components/common/ToggleSwitch.css +52 -0
  22. package/src/components/common/ToggleSwitch.tsx +20 -0
  23. package/src/components/header/ChatHeader.css +285 -0
  24. package/src/components/header/ChatHeader.tsx +376 -0
  25. package/src/components/input/AtFilePicker.css +147 -0
  26. package/src/components/input/AtFilePicker.tsx +519 -0
  27. package/src/components/input/ChatInput.css +204 -0
  28. package/src/components/input/ChatInput.tsx +506 -0
  29. package/src/components/input/DropdownSelector.css +159 -0
  30. package/src/components/input/DropdownSelector.tsx +195 -0
  31. package/src/components/input/ImagePreviewModal.css +124 -0
  32. package/src/components/input/ImagePreviewModal.tsx +118 -0
  33. package/src/components/input/at-views/AtBranchView.tsx +34 -0
  34. package/src/components/input/at-views/AtBrowserView.tsx +34 -0
  35. package/src/components/input/at-views/AtChatsView.tsx +34 -0
  36. package/src/components/input/at-views/AtDocsView.tsx +34 -0
  37. package/src/components/input/at-views/AtFilesView.tsx +168 -0
  38. package/src/components/input/at-views/AtTerminalsView.tsx +34 -0
  39. package/src/components/input/at-views/AtViewStyles.css +143 -0
  40. package/src/components/input/at-views/index.ts +9 -0
  41. package/src/components/message/ContentRenderer.css +9 -0
  42. package/src/components/message/ContentRenderer.tsx +63 -0
  43. package/src/components/message/MessageBubble.css +190 -0
  44. package/src/components/message/MessageBubble.tsx +231 -0
  45. package/src/components/message/PartsRenderer.css +4 -0
  46. package/src/components/message/PartsRenderer.tsx +114 -0
  47. package/src/components/message/ToolResultRenderer.tsx +21 -0
  48. package/src/components/message/WelcomeMessage.css +221 -0
  49. package/src/components/message/WelcomeMessage.tsx +93 -0
  50. package/src/components/message/blocks/CodeBlock.tsx +60 -0
  51. package/src/components/message/blocks/TextBlock.tsx +15 -0
  52. package/src/components/message/blocks/blocks.css +141 -0
  53. package/src/components/message/blocks/index.ts +6 -0
  54. package/src/components/message/parts/CollapsibleCard.css +78 -0
  55. package/src/components/message/parts/CollapsibleCard.tsx +77 -0
  56. package/src/components/message/parts/ErrorPart.css +9 -0
  57. package/src/components/message/parts/ErrorPart.tsx +40 -0
  58. package/src/components/message/parts/ImagePart.css +50 -0
  59. package/src/components/message/parts/ImagePart.tsx +54 -0
  60. package/src/components/message/parts/SearchPart.css +44 -0
  61. package/src/components/message/parts/SearchPart.tsx +63 -0
  62. package/src/components/message/parts/TextPart.css +10 -0
  63. package/src/components/message/parts/TextPart.tsx +20 -0
  64. package/src/components/message/parts/ThinkingPart.css +9 -0
  65. package/src/components/message/parts/ThinkingPart.tsx +48 -0
  66. package/src/components/message/parts/ToolCallPart.css +220 -0
  67. package/src/components/message/parts/ToolCallPart.tsx +285 -0
  68. package/src/components/message/parts/ToolResultPart.css +68 -0
  69. package/src/components/message/parts/ToolResultPart.tsx +96 -0
  70. package/src/components/message/parts/index.ts +11 -0
  71. package/src/components/message/tool-results/DefaultToolResult.tsx +26 -0
  72. package/src/components/message/tool-results/SearchResults.tsx +69 -0
  73. package/src/components/message/tool-results/WeatherCard.tsx +63 -0
  74. package/src/components/message/tool-results/index.ts +7 -0
  75. package/src/components/message/tool-results/tool-results.css +179 -0
  76. package/src/components/message/welcome-types.ts +46 -0
  77. package/src/context/AutoRunConfigContext.tsx +13 -0
  78. package/src/context/ChatAdapterContext.tsx +8 -0
  79. package/src/context/ChatInputContext.tsx +40 -0
  80. package/src/context/RenderersContext.tsx +41 -0
  81. package/src/hooks/useChat.ts +855 -237
  82. package/src/hooks/useImageUpload.ts +253 -0
  83. package/src/index.ts +99 -42
  84. package/src/styles.css +48 -987
  85. package/src/types/index.ts +172 -103
  86. package/src/utils/fileIcon.ts +49 -0
  87. package/src/components/ChatInput.tsx +0 -368
  88. package/src/components/chat/messages/ExecutionSteps.tsx +0 -234
  89. package/src/components/chat/messages/MessageBubble.tsx +0 -130
  90. package/src/components/chat/ui/ChatHeader.tsx +0 -301
  91. package/src/components/chat/ui/WelcomeMessage.tsx +0 -107
package/dist/index.css ADDED
@@ -0,0 +1,2575 @@
1
+ @import "@huyooo/ai-chat-shared/styles";
2
+
3
+ /* src/components/header/ChatHeader.css */
4
+ .chat-header {
5
+ display: flex;
6
+ align-items: center;
7
+ height: 40px;
8
+ padding: 0 12px;
9
+ background: var(--chat-header-bg, #1e1e1e);
10
+ border-bottom: 1px solid var(--chat-border, #333);
11
+ flex-shrink: 0;
12
+ }
13
+ .tabs-container {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 4px;
17
+ flex: 1;
18
+ overflow-x: auto;
19
+ padding-right: 8px;
20
+ }
21
+ .tabs-container::-webkit-scrollbar {
22
+ display: none;
23
+ }
24
+ .tab-item {
25
+ position: relative;
26
+ display: flex;
27
+ align-items: center;
28
+ padding: 4px 8px;
29
+ background: transparent;
30
+ border: none;
31
+ border-radius: 4px;
32
+ color: var(--chat-text-muted, #888);
33
+ font-size: 14px;
34
+ font-weight: 500;
35
+ cursor: pointer;
36
+ transition: all 0.15s;
37
+ white-space: nowrap;
38
+ max-width: 120px;
39
+ flex-shrink: 0;
40
+ }
41
+ .tab-item:hover {
42
+ color: var(--chat-text, #ccc);
43
+ }
44
+ .tab-item.active {
45
+ background: var(--chat-muted, #3c3c3c);
46
+ color: var(--chat-text, #fff);
47
+ }
48
+ .tab-title {
49
+ overflow: hidden;
50
+ text-overflow: ellipsis;
51
+ white-space: nowrap;
52
+ }
53
+ .tab-close {
54
+ position: absolute;
55
+ right: 0;
56
+ top: 0;
57
+ bottom: 0;
58
+ display: flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ width: 32px;
62
+ padding: 0;
63
+ padding-left: 8px;
64
+ background:
65
+ linear-gradient(
66
+ to right,
67
+ transparent,
68
+ var(--chat-bg, #1e1e1e) 50%);
69
+ border: none;
70
+ border-radius: 0 4px 4px 0;
71
+ color: var(--chat-text-muted, #666);
72
+ cursor: pointer;
73
+ transition: all 0.15s;
74
+ opacity: 0;
75
+ }
76
+ .tab-item:hover .tab-close {
77
+ opacity: 1;
78
+ }
79
+ .tab-item.active .tab-close {
80
+ background:
81
+ linear-gradient(
82
+ to right,
83
+ transparent,
84
+ var(--chat-muted, #3c3c3c) 50%);
85
+ }
86
+ .tab-close:hover {
87
+ color: var(--chat-text, #fff);
88
+ }
89
+ .header-actions {
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 2px;
93
+ flex-shrink: 0;
94
+ }
95
+ .header-actions .icon-btn {
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ width: 24px;
100
+ height: 24px;
101
+ padding: 0;
102
+ background: transparent;
103
+ border: none;
104
+ border-radius: 4px;
105
+ color: var(--chat-text-muted, #888);
106
+ cursor: pointer;
107
+ transition: all 0.15s;
108
+ }
109
+ .header-actions .icon-btn:hover,
110
+ .header-actions .icon-btn.active {
111
+ color: var(--chat-text, #fff);
112
+ }
113
+ .header-actions .icon-btn.small {
114
+ width: 20px;
115
+ height: 20px;
116
+ }
117
+ .dropdown-container {
118
+ position: relative;
119
+ }
120
+ .dropdown-panel {
121
+ position: absolute;
122
+ top: 100%;
123
+ right: 0;
124
+ margin-top: 4px;
125
+ background: var(--chat-dropdown-bg, #252526);
126
+ border: 1px solid rgba(255, 255, 255, 0.1);
127
+ border-radius: 8px;
128
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
129
+ z-index: 100;
130
+ overflow: hidden;
131
+ }
132
+ .history-panel {
133
+ width: 360px;
134
+ }
135
+ .more-panel {
136
+ width: 200px;
137
+ padding: 4px;
138
+ display: flex;
139
+ flex-direction: column;
140
+ gap: 2px;
141
+ }
142
+ .panel-header {
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: space-between;
146
+ padding: 10px 12px;
147
+ border-bottom: 1px solid var(--chat-border, #333);
148
+ font-size: 14px;
149
+ font-weight: 500;
150
+ color: var(--chat-text-muted, #888);
151
+ }
152
+ .panel-content {
153
+ max-height: 400px;
154
+ overflow-y: auto;
155
+ }
156
+ .history-group-label {
157
+ padding: 8px 12px 4px;
158
+ font-size: 14px;
159
+ font-weight: 500;
160
+ color: var(--chat-text-muted, #666);
161
+ }
162
+ .history-group-label:not(:first-child) {
163
+ border-top: 1px solid var(--chat-border, #333);
164
+ margin-top: 4px;
165
+ padding-top: 12px;
166
+ }
167
+ .history-item {
168
+ display: flex;
169
+ align-items: center;
170
+ gap: 4px;
171
+ padding: 6px 12px;
172
+ cursor: pointer;
173
+ transition: background 0.15s;
174
+ }
175
+ .history-item:hover {
176
+ background: rgba(255, 255, 255, 0.08);
177
+ }
178
+ .history-item.active {
179
+ background: rgba(255, 255, 255, 0.1);
180
+ }
181
+ .history-title {
182
+ flex: 1;
183
+ font-size: 14px;
184
+ color: var(--chat-text, #ccc);
185
+ overflow: hidden;
186
+ text-overflow: ellipsis;
187
+ white-space: nowrap;
188
+ }
189
+ .history-time {
190
+ font-size: 14px;
191
+ color: var(--chat-text-muted, #666);
192
+ flex-shrink: 0;
193
+ margin-right: 10px;
194
+ }
195
+ .history-actions {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 2px;
199
+ flex-shrink: 0;
200
+ opacity: 0;
201
+ transition: opacity 0.15s;
202
+ }
203
+ .history-item:hover .history-actions {
204
+ opacity: 1;
205
+ }
206
+ .history-action-btn {
207
+ display: flex;
208
+ align-items: center;
209
+ justify-content: center;
210
+ width: 28px;
211
+ height: 28px;
212
+ padding: 0;
213
+ background: transparent;
214
+ border: none;
215
+ border-radius: 6px;
216
+ color: var(--chat-text-muted, #666);
217
+ cursor: pointer;
218
+ transition: all 0.15s;
219
+ }
220
+ .history-action-btn:hover {
221
+ color: var(--chat-text, #fff);
222
+ }
223
+ .history-action-btn.delete:hover {
224
+ color: var(--chat-destructive, #ef4444);
225
+ }
226
+ .empty-state {
227
+ padding: 20px;
228
+ text-align: center;
229
+ font-size: 14px;
230
+ color: var(--chat-text-muted, #666);
231
+ }
232
+ .menu-item {
233
+ display: flex;
234
+ align-items: center;
235
+ gap: 8px;
236
+ width: 100%;
237
+ padding: 8px 10px;
238
+ border: none;
239
+ background: transparent;
240
+ border-radius: 4px;
241
+ font-size: 14px;
242
+ color: var(--chat-text-muted, #999);
243
+ cursor: pointer;
244
+ transition: all 0.15s;
245
+ text-align: left;
246
+ }
247
+ .menu-item:hover {
248
+ background: rgba(255, 255, 255, 0.08);
249
+ color: var(--chat-text, #ccc);
250
+ }
251
+ .menu-divider {
252
+ height: 1px;
253
+ background: var(--chat-border, #333);
254
+ margin: 4px 0;
255
+ }
256
+
257
+ /* src/components/message/WelcomeMessage.css */
258
+ .welcome-message {
259
+ display: flex;
260
+ flex-direction: column;
261
+ align-items: center;
262
+ justify-content: center;
263
+ gap: 28px;
264
+ padding: 40px 24px;
265
+ max-width: 640px;
266
+ margin: 0 auto;
267
+ min-height: 100%;
268
+ }
269
+ .welcome-header {
270
+ display: flex;
271
+ flex-direction: column;
272
+ align-items: center;
273
+ text-align: center;
274
+ gap: 8px;
275
+ }
276
+ .welcome-title-row {
277
+ display: flex;
278
+ align-items: center;
279
+ gap: 10px;
280
+ }
281
+ .welcome-icon {
282
+ color: var(--chat-text-muted, #888);
283
+ }
284
+ .welcome-title {
285
+ font-size: 24px;
286
+ font-weight: 600;
287
+ color: var(--chat-text, #fff);
288
+ margin: 0;
289
+ }
290
+ .welcome-subtitle {
291
+ font-size: 13px;
292
+ color: var(--chat-text-muted, #888);
293
+ margin: 0;
294
+ }
295
+ .section-header {
296
+ display: flex;
297
+ align-items: center;
298
+ gap: 6px;
299
+ margin-bottom: 12px;
300
+ padding-left: 2px;
301
+ }
302
+ .section-icon {
303
+ color: var(--chat-text-muted, #666);
304
+ }
305
+ .section-title {
306
+ font-size: 12px;
307
+ font-weight: 500;
308
+ color: var(--chat-text-muted, #888);
309
+ text-transform: uppercase;
310
+ letter-spacing: 0.5px;
311
+ }
312
+ .features-section {
313
+ width: 100%;
314
+ }
315
+ .features-list {
316
+ display: flex;
317
+ flex-wrap: wrap;
318
+ gap: 8px;
319
+ justify-content: center;
320
+ }
321
+ .feature-tag {
322
+ display: inline-flex;
323
+ align-items: center;
324
+ gap: 6px;
325
+ padding: 6px 12px;
326
+ background: var(--chat-muted, #2a2a2a);
327
+ border: 1px solid var(--chat-border, #3a3a3a);
328
+ border-radius: 20px;
329
+ font-size: 12px;
330
+ color: var(--chat-text, #ccc);
331
+ transition: all 0.15s;
332
+ }
333
+ .feature-tag:hover {
334
+ background: rgba(255, 255, 255, 0.08);
335
+ border-color: rgba(255, 255, 255, 0.15);
336
+ }
337
+ .feature-icon {
338
+ color: var(--chat-text-muted, #888);
339
+ }
340
+ .tasks-section {
341
+ width: 100%;
342
+ }
343
+ .tasks-grid {
344
+ display: grid;
345
+ gap: 10px;
346
+ }
347
+ .tasks-single {
348
+ grid-template-columns: minmax(200px, 320px);
349
+ justify-content: center;
350
+ }
351
+ .tasks-two {
352
+ grid-template-columns: repeat(2, 1fr);
353
+ }
354
+ .tasks-three {
355
+ grid-template-columns: repeat(3, 1fr);
356
+ }
357
+ .tasks-multi {
358
+ grid-template-columns: repeat(2, 1fr);
359
+ }
360
+ .task-card {
361
+ display: flex;
362
+ align-items: center;
363
+ gap: 10px;
364
+ padding: 12px 14px;
365
+ background: var(--chat-muted, #2a2a2a);
366
+ border: 1px solid var(--chat-border, #3a3a3a);
367
+ border-radius: 10px;
368
+ color: var(--chat-text, #ccc);
369
+ text-align: left;
370
+ cursor: pointer;
371
+ transition: all 0.2s;
372
+ }
373
+ .task-card:hover {
374
+ background: rgba(255, 255, 255, 0.08);
375
+ border-color: rgba(59, 130, 246, 0.5);
376
+ transform: translateY(-1px);
377
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
378
+ }
379
+ .task-icon {
380
+ flex-shrink: 0;
381
+ width: 32px;
382
+ height: 32px;
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: center;
386
+ background: rgba(59, 130, 246, 0.15);
387
+ border-radius: 8px;
388
+ color: #60a5fa;
389
+ }
390
+ .task-card:hover .task-icon {
391
+ background: rgba(59, 130, 246, 0.25);
392
+ }
393
+ .task-content {
394
+ flex: 1;
395
+ min-width: 0;
396
+ }
397
+ .task-name {
398
+ font-size: 13px;
399
+ font-weight: 500;
400
+ color: var(--chat-text, #fff);
401
+ margin-bottom: 2px;
402
+ }
403
+ .task-desc {
404
+ font-size: 11px;
405
+ color: var(--chat-text-muted, #888);
406
+ white-space: nowrap;
407
+ overflow: hidden;
408
+ text-overflow: ellipsis;
409
+ }
410
+ .task-arrow {
411
+ flex-shrink: 0;
412
+ color: var(--chat-text-muted, #666);
413
+ opacity: 0;
414
+ transform: translateX(-4px);
415
+ transition: all 0.2s;
416
+ }
417
+ .task-card:hover .task-arrow {
418
+ opacity: 1;
419
+ transform: translateX(0);
420
+ }
421
+ @media (max-width: 540px) {
422
+ .welcome-message {
423
+ padding: 32px 16px;
424
+ gap: 24px;
425
+ }
426
+ .welcome-title {
427
+ font-size: 24px;
428
+ }
429
+ .tasks-two,
430
+ .tasks-three,
431
+ .tasks-multi {
432
+ grid-template-columns: 1fr;
433
+ }
434
+ .task-arrow {
435
+ display: none;
436
+ }
437
+ }
438
+
439
+ /* src/components/message/MessageBubble.css */
440
+ .message-bubble {
441
+ padding: 8px 0;
442
+ animation: fadeIn 0.2s ease;
443
+ }
444
+ @keyframes fadeIn {
445
+ from {
446
+ opacity: 0;
447
+ transform: translateY(4px);
448
+ }
449
+ to {
450
+ opacity: 1;
451
+ transform: translateY(0);
452
+ }
453
+ }
454
+ .message-bubble.user {
455
+ width: 100%;
456
+ }
457
+ .user-content {
458
+ width: 100%;
459
+ background: var(--chat-muted, #2d2d2d);
460
+ color: var(--chat-text, #ccc);
461
+ padding: 12px;
462
+ border-radius: 12px;
463
+ border: 1px solid var(--chat-border, #444);
464
+ }
465
+ .user-text {
466
+ font-size: 14px;
467
+ line-height: 1.5;
468
+ white-space: pre-wrap;
469
+ word-break: break-word;
470
+ }
471
+ .user-images {
472
+ display: flex;
473
+ gap: 8px;
474
+ margin-top: 8px;
475
+ flex-wrap: wrap;
476
+ }
477
+ .user-image {
478
+ width: 80px;
479
+ height: 80px;
480
+ object-fit: cover;
481
+ border-radius: 8px;
482
+ cursor: pointer;
483
+ transition: transform 0.15s;
484
+ }
485
+ .user-image:hover {
486
+ transform: scale(1.05);
487
+ }
488
+ .message-bubble.assistant {
489
+ position: relative;
490
+ }
491
+ .assistant-content {
492
+ max-width: 100%;
493
+ }
494
+ .loading-indicator {
495
+ position: relative;
496
+ display: flex;
497
+ align-items: center;
498
+ width: 100%;
499
+ padding: 10px 16px;
500
+ background: var(--chat-muted, #2a2a2a);
501
+ border-radius: 8px;
502
+ overflow: hidden;
503
+ margin: 8px 0;
504
+ }
505
+ .loading-text {
506
+ font-size: 13px;
507
+ color: var(--chat-text-muted, #888);
508
+ position: relative;
509
+ z-index: 1;
510
+ }
511
+ .loading-shimmer {
512
+ position: absolute;
513
+ top: 0;
514
+ left: -100%;
515
+ width: 100%;
516
+ height: 100%;
517
+ background:
518
+ linear-gradient(
519
+ 90deg,
520
+ transparent 0%,
521
+ rgba(255, 255, 255, 0.08) 50%,
522
+ transparent 100%);
523
+ animation: shimmer 1.5s ease-in-out infinite;
524
+ }
525
+ @keyframes shimmer {
526
+ 0% {
527
+ left: -100%;
528
+ }
529
+ 100% {
530
+ left: 100%;
531
+ }
532
+ }
533
+ .message-actions {
534
+ display: flex;
535
+ align-items: center;
536
+ justify-content: space-between;
537
+ margin-top: 8px;
538
+ }
539
+ .message-meta {
540
+ display: flex;
541
+ align-items: center;
542
+ gap: 6px;
543
+ }
544
+ .model-name {
545
+ font-size: 11px;
546
+ color: var(--chat-text-muted, #888);
547
+ background: var(--chat-muted, #2a2a2a);
548
+ padding: 2px 8px;
549
+ border-radius: 10px;
550
+ border: 1px solid var(--chat-border, #333);
551
+ }
552
+ .mode-badge {
553
+ font-size: 10px;
554
+ color: var(--chat-text-muted, #888);
555
+ background: var(--chat-muted, #2a2a2a);
556
+ padding: 2px 6px;
557
+ border-radius: 10px;
558
+ border: 1px solid var(--chat-border, #333);
559
+ }
560
+ .action-buttons {
561
+ display: flex;
562
+ align-items: center;
563
+ gap: 4px;
564
+ }
565
+ .action-btn {
566
+ display: flex;
567
+ align-items: center;
568
+ justify-content: center;
569
+ width: 24px;
570
+ height: 24px;
571
+ border: none;
572
+ background: transparent;
573
+ border-radius: 4px;
574
+ color: var(--chat-text-muted, #666);
575
+ cursor: pointer;
576
+ transition: all 0.15s;
577
+ }
578
+ .action-btn:hover {
579
+ background: var(--chat-muted, #3c3c3c);
580
+ color: var(--chat-text, #ccc);
581
+ }
582
+ .action-btn.copied {
583
+ color: #22c55e;
584
+ }
585
+ .message-time {
586
+ font-size: 12px;
587
+ color: var(--chat-text-muted, #666);
588
+ }
589
+ .user-time {
590
+ text-align: right;
591
+ margin-top: 8px;
592
+ }
593
+ .assistant-time {
594
+ margin-right: 8px;
595
+ }
596
+
597
+ /* src/components/message/parts/CollapsibleCard.css */
598
+ .collapsible-card {
599
+ margin: 8px 0;
600
+ border-radius: 8px;
601
+ background: var(--chat-muted, #2a2a2a);
602
+ border: 1px solid var(--chat-border, #333);
603
+ overflow: hidden;
604
+ }
605
+ .card-header {
606
+ display: flex;
607
+ align-items: center;
608
+ justify-content: space-between;
609
+ gap: 8px;
610
+ padding: 8px 12px;
611
+ user-select: none;
612
+ }
613
+ .card-header-left {
614
+ display: flex;
615
+ align-items: center;
616
+ gap: 8px;
617
+ flex: 1;
618
+ cursor: pointer;
619
+ }
620
+ .card-header-right {
621
+ display: flex;
622
+ align-items: center;
623
+ gap: 4px;
624
+ flex-shrink: 0;
625
+ }
626
+ .card-icon {
627
+ display: flex;
628
+ align-items: center;
629
+ justify-content: center;
630
+ flex-shrink: 0;
631
+ }
632
+ .spinning {
633
+ animation: spin 1s linear infinite;
634
+ }
635
+ @keyframes spin {
636
+ from {
637
+ transform: rotate(0deg);
638
+ }
639
+ to {
640
+ transform: rotate(360deg);
641
+ }
642
+ }
643
+ .card-title {
644
+ font-size: 13px;
645
+ color: var(--chat-text-muted, #888);
646
+ }
647
+ .card-subtitle {
648
+ font-size: 12px;
649
+ color: var(--chat-text-muted, #666);
650
+ }
651
+ .card-chevron {
652
+ color: var(--chat-text-muted, #666);
653
+ transition: transform 0.2s;
654
+ flex-shrink: 0;
655
+ cursor: pointer;
656
+ }
657
+ .collapsible-card.expanded .card-chevron {
658
+ transform: rotate(180deg);
659
+ }
660
+ .card-content {
661
+ padding: 12px;
662
+ min-width: 0;
663
+ overflow: hidden;
664
+ }
665
+
666
+ /* src/components/message/parts/TextPart.css */
667
+ .text-part {
668
+ font-size: 14px;
669
+ line-height: 1.7;
670
+ color: var(--chat-text, #ccc);
671
+ word-break: break-word;
672
+ overflow-wrap: break-word;
673
+ }
674
+
675
+ /* src/components/message/parts/ThinkingPart.css */
676
+ .thinking-content {
677
+ font-size: 13px;
678
+ line-height: 1.5;
679
+ color: var(--chat-text-muted, #999);
680
+ white-space: pre-wrap;
681
+ word-break: break-word;
682
+ overflow-wrap: break-word;
683
+ margin: 0;
684
+ }
685
+
686
+ /* src/components/message/parts/SearchPart.css */
687
+ .search-results {
688
+ display: flex;
689
+ flex-direction: column;
690
+ gap: 8px;
691
+ }
692
+ .search-item {
693
+ display: block;
694
+ padding: 8px;
695
+ border-radius: 6px;
696
+ background: var(--chat-bg, #1e1e1e);
697
+ text-decoration: none;
698
+ transition: background 0.15s;
699
+ }
700
+ .search-item:hover {
701
+ background: var(--chat-hover, #333);
702
+ }
703
+ .search-item-title {
704
+ font-size: 13px;
705
+ font-weight: 500;
706
+ color: var(--chat-accent, #3b82f6);
707
+ margin-bottom: 4px;
708
+ }
709
+ .search-item-snippet {
710
+ font-size: 12px;
711
+ color: var(--chat-text-muted, #888);
712
+ line-height: 1.4;
713
+ margin-bottom: 4px;
714
+ display: -webkit-box;
715
+ -webkit-line-clamp: 2;
716
+ -webkit-box-orient: vertical;
717
+ overflow: hidden;
718
+ }
719
+ .search-item-url {
720
+ font-size: 11px;
721
+ color: var(--chat-text-muted, #666);
722
+ overflow: hidden;
723
+ text-overflow: ellipsis;
724
+ white-space: nowrap;
725
+ }
726
+
727
+ /* src/components/input/DropdownSelector.css */
728
+ .dropdown-selector {
729
+ position: relative;
730
+ display: flex;
731
+ align-items: center;
732
+ gap: 4px;
733
+ padding: 4px 8px;
734
+ background: var(--chat-muted, #3c3c3c);
735
+ border: none;
736
+ border-radius: 6px;
737
+ font-size: 14px;
738
+ color: var(--chat-text-muted, #888);
739
+ cursor: pointer;
740
+ transition: all 0.15s;
741
+ }
742
+ .dropdown-selector:hover:not(.disabled) {
743
+ background: var(--chat-muted-hover, #444);
744
+ color: var(--chat-text, #ccc);
745
+ }
746
+ .dropdown-selector.disabled {
747
+ opacity: 0.6;
748
+ cursor: not-allowed;
749
+ }
750
+ .dropdown-selector .chevron {
751
+ color: var(--chat-text-muted, #666);
752
+ }
753
+ .dropdown-selector .dropdown-menu {
754
+ position: absolute;
755
+ left: 0;
756
+ right: auto;
757
+ min-width: 180px;
758
+ max-height: 320px;
759
+ overflow-y: auto;
760
+ background: var(--chat-dropdown-bg, #252526);
761
+ border: 1px solid rgba(255, 255, 255, 0.1);
762
+ border-radius: 8px;
763
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
764
+ z-index: 9999;
765
+ padding: 4px 8px 4px 4px;
766
+ display: flex;
767
+ flex-direction: column;
768
+ gap: 2px;
769
+ }
770
+ .dropdown-selector .dropdown-menu.dropdown-up {
771
+ bottom: 100%;
772
+ top: auto;
773
+ margin-bottom: 4px;
774
+ }
775
+ .dropdown-selector .dropdown-menu.dropdown-down {
776
+ top: 100%;
777
+ bottom: auto;
778
+ margin-top: 4px;
779
+ }
780
+ .dropdown-selector .dropdown-menu.dropdown-align-right {
781
+ left: auto;
782
+ right: 0;
783
+ }
784
+ .dropdown-selector .dropdown-item {
785
+ display: flex;
786
+ align-items: center;
787
+ gap: 8px;
788
+ width: 100%;
789
+ padding: 8px 10px;
790
+ border: none;
791
+ background: transparent;
792
+ border-radius: 4px;
793
+ font-size: 14px;
794
+ color: var(--chat-text-muted, #999);
795
+ cursor: pointer;
796
+ transition: all 0.15s;
797
+ white-space: nowrap;
798
+ }
799
+ .dropdown-selector .dropdown-item:hover {
800
+ background: rgba(255, 255, 255, 0.08);
801
+ color: var(--chat-text, #ccc);
802
+ }
803
+ .dropdown-selector .dropdown-item.active {
804
+ background: rgba(255, 255, 255, 0.1);
805
+ color: var(--chat-text, #fff);
806
+ }
807
+ .dropdown-selector .check-icon {
808
+ margin-left: auto;
809
+ color: var(--chat-text, #ccc);
810
+ flex-shrink: 0;
811
+ }
812
+ .dropdown-selector .selector-text {
813
+ overflow: hidden;
814
+ text-overflow: ellipsis;
815
+ white-space: nowrap;
816
+ }
817
+ .dropdown-selector .dropdown-empty {
818
+ padding: 12px 10px;
819
+ font-size: 12px;
820
+ color: var(--chat-text-muted, #666);
821
+ text-align: center;
822
+ }
823
+ .dropdown-selector .group-title {
824
+ padding: 8px 10px 4px;
825
+ margin-top: 4px;
826
+ font-size: 11px;
827
+ color: var(--chat-text-muted, #666);
828
+ }
829
+ .dropdown-selector .group-title:first-child {
830
+ margin-top: 0;
831
+ }
832
+ .dropdown-selector .option-label {
833
+ flex: 1;
834
+ text-align: left;
835
+ }
836
+ .dropdown-selector .option-right {
837
+ display: flex;
838
+ align-items: center;
839
+ gap: 8px;
840
+ margin-left: auto;
841
+ }
842
+ .dropdown-selector .provider-badge {
843
+ padding: 2px 6px;
844
+ font-size: 11px;
845
+ font-weight: 500;
846
+ color: var(--chat-text-muted, #999);
847
+ background: rgba(255, 255, 255, 0.08);
848
+ border-radius: 3px;
849
+ white-space: nowrap;
850
+ }
851
+ .dropdown-selector .provider-badge.native {
852
+ color: var(--chat-text-muted, #999);
853
+ }
854
+
855
+ /* src/components/common/CopyButton.css */
856
+ .copy-btn {
857
+ display: flex;
858
+ align-items: center;
859
+ justify-content: center;
860
+ padding: 4px;
861
+ background: transparent;
862
+ border: none;
863
+ color: var(--chat-text-muted, #888);
864
+ cursor: pointer;
865
+ border-radius: 4px;
866
+ transition: all 0.2s;
867
+ }
868
+ .copy-btn:hover {
869
+ background: rgba(255, 255, 255, 0.1);
870
+ color: var(--chat-text, #fff);
871
+ }
872
+ .copy-btn.copied {
873
+ color: var(--chat-success, #22c55e);
874
+ }
875
+
876
+ /* src/components/message/parts/ToolCallPart.css */
877
+ .tool-call-content {
878
+ display: flex;
879
+ flex-direction: column;
880
+ }
881
+ .tool-call-command {
882
+ margin-bottom: 12px;
883
+ }
884
+ .command-header,
885
+ .result-header {
886
+ display: block;
887
+ margin-bottom: 8px;
888
+ padding: 0;
889
+ cursor: default;
890
+ user-select: none;
891
+ font-size: 12px;
892
+ line-height: 1.5;
893
+ }
894
+ .command-header:hover,
895
+ .result-header:hover,
896
+ .command-label:hover,
897
+ .result-label:hover,
898
+ .command-name:hover,
899
+ .result-name:hover {
900
+ background: transparent !important;
901
+ }
902
+ .command-code {
903
+ display: block;
904
+ padding: 10px;
905
+ background: rgba(0, 0, 0, 0.3);
906
+ border: 1px solid var(--chat-border, #333);
907
+ border-radius: 6px;
908
+ font-family:
909
+ "Monaco",
910
+ "Menlo",
911
+ "Courier New",
912
+ monospace;
913
+ font-size: 13px;
914
+ color: var(--chat-text, #ccc);
915
+ white-space: pre-wrap;
916
+ word-break: break-all;
917
+ overflow-x: auto;
918
+ }
919
+ .tool-call-result {
920
+ margin-bottom: 12px;
921
+ }
922
+ .result-label,
923
+ .command-label {
924
+ color: var(--chat-text-muted, #888);
925
+ font-weight: 500;
926
+ }
927
+ .result-name,
928
+ .command-name {
929
+ color: var(--chat-text, #ccc);
930
+ }
931
+ .result-content {
932
+ display: block;
933
+ padding: 10px;
934
+ background: rgba(0, 0, 0, 0.3);
935
+ border: 1px solid var(--chat-border, #333);
936
+ border-radius: 6px;
937
+ font-family:
938
+ "Monaco",
939
+ "Menlo",
940
+ "Courier New",
941
+ monospace;
942
+ font-size: 13px;
943
+ color: var(--chat-text, #ccc);
944
+ white-space: pre-wrap;
945
+ word-break: break-all;
946
+ overflow-x: auto;
947
+ }
948
+ .execution-stats {
949
+ display: flex;
950
+ gap: 16px;
951
+ margin-bottom: 12px;
952
+ padding-top: 8px;
953
+ border-top: 1px solid var(--chat-border, #333);
954
+ }
955
+ .stat-item {
956
+ display: flex;
957
+ gap: 4px;
958
+ font-size: 12px;
959
+ }
960
+ .stat-label {
961
+ color: var(--chat-text-muted, #888);
962
+ }
963
+ .stat-value {
964
+ color: var(--chat-text, #ccc);
965
+ }
966
+ .tool-call-footer {
967
+ display: flex;
968
+ align-items: center;
969
+ justify-content: space-between;
970
+ gap: 12px;
971
+ padding-top: 12px;
972
+ border-top: 1px solid var(--chat-border, #333);
973
+ }
974
+ .footer-left {
975
+ flex-shrink: 0;
976
+ position: relative;
977
+ z-index: 10;
978
+ }
979
+ .footer-right {
980
+ display: flex;
981
+ align-items: center;
982
+ gap: 12px;
983
+ }
984
+ .execution-status {
985
+ display: flex;
986
+ align-items: center;
987
+ gap: 6px;
988
+ font-size: 12px;
989
+ font-weight: 500;
990
+ }
991
+ .execution-status.success {
992
+ color: var(--chat-success, #22c55e);
993
+ }
994
+ .execution-status.error {
995
+ color: #ef4444;
996
+ }
997
+ .execution-status.running {
998
+ color: var(--chat-accent, #3b82f6);
999
+ }
1000
+ .execution-status.pending {
1001
+ color: var(--chat-text-muted, #888);
1002
+ }
1003
+ .mode-display {
1004
+ display: flex;
1005
+ align-items: center;
1006
+ gap: 6px;
1007
+ font-size: 12px;
1008
+ }
1009
+ .mode-label {
1010
+ color: var(--chat-text-muted, #888);
1011
+ }
1012
+ .mode-value {
1013
+ color: var(--chat-text, #ccc);
1014
+ }
1015
+ .spinning {
1016
+ animation: spin 1s linear infinite;
1017
+ }
1018
+ @keyframes spin {
1019
+ from {
1020
+ transform: rotate(0deg);
1021
+ }
1022
+ to {
1023
+ transform: rotate(360deg);
1024
+ }
1025
+ }
1026
+ .action-buttons {
1027
+ display: flex;
1028
+ gap: 8px;
1029
+ }
1030
+ .btn {
1031
+ padding: 6px 12px;
1032
+ border-radius: 6px;
1033
+ font-size: 12px;
1034
+ font-weight: 500;
1035
+ cursor: pointer;
1036
+ border: none;
1037
+ display: flex;
1038
+ align-items: center;
1039
+ gap: 6px;
1040
+ transition: all 0.2s;
1041
+ }
1042
+ .btn-skip {
1043
+ background: var(--chat-muted, #2a2a2a);
1044
+ color: var(--chat-text, #ccc);
1045
+ border: 1px solid var(--chat-border, #333);
1046
+ }
1047
+ .btn-skip:hover {
1048
+ background: var(--chat-muted-hover, #333);
1049
+ }
1050
+ .btn-run {
1051
+ background: var(--chat-accent, #3b82f6);
1052
+ color: #fff;
1053
+ }
1054
+ .btn-run:hover {
1055
+ background: var(--chat-accent-hover, #2563eb);
1056
+ }
1057
+ .btn-cancel {
1058
+ background: transparent;
1059
+ color: var(--chat-text-muted, #888);
1060
+ border: 1px solid var(--chat-border, #333);
1061
+ }
1062
+ .btn-cancel:hover {
1063
+ background: rgba(239, 68, 68, 0.1);
1064
+ color: #ef4444;
1065
+ border-color: #ef4444;
1066
+ }
1067
+ .execution-status.cancelled {
1068
+ color: var(--chat-warning, #f59e0b);
1069
+ }
1070
+
1071
+ /* src/components/message/parts/ToolResultPart.css */
1072
+ .tool-result-part {
1073
+ margin: 8px 0;
1074
+ }
1075
+ .default-result {
1076
+ border-radius: 8px;
1077
+ background: var(--chat-muted, #2a2a2a);
1078
+ border: 1px solid var(--chat-border, #333);
1079
+ overflow: hidden;
1080
+ }
1081
+ .default-result .result-header {
1082
+ display: flex;
1083
+ align-items: center;
1084
+ gap: 8px;
1085
+ padding: 8px 12px;
1086
+ cursor: pointer;
1087
+ user-select: none;
1088
+ }
1089
+ .default-result .result-header:hover {
1090
+ background: var(--chat-hover, #333);
1091
+ }
1092
+ .default-result .result-icon {
1093
+ display: flex;
1094
+ align-items: center;
1095
+ justify-content: center;
1096
+ }
1097
+ .default-result .result-icon .success {
1098
+ color: var(--chat-success, #22c55e);
1099
+ }
1100
+ .default-result .result-icon .error {
1101
+ color: var(--chat-error, #ef4444);
1102
+ }
1103
+ .default-result .result-name {
1104
+ font-size: 13px;
1105
+ font-weight: 500;
1106
+ color: var(--chat-text, #ccc);
1107
+ }
1108
+ .default-result .result-chevron {
1109
+ margin-left: auto;
1110
+ color: var(--chat-text-muted, #666);
1111
+ transition: transform 0.2s;
1112
+ }
1113
+ .default-result.expanded .result-chevron {
1114
+ transform: rotate(180deg);
1115
+ }
1116
+ .default-result .result-content {
1117
+ padding: 12px;
1118
+ padding-top: 0;
1119
+ }
1120
+ .default-result .result-content pre {
1121
+ margin: 0;
1122
+ font-size: 12px;
1123
+ font-family:
1124
+ "SF Mono",
1125
+ Monaco,
1126
+ "Cascadia Code",
1127
+ monospace;
1128
+ color: var(--chat-text-muted, #999);
1129
+ white-space: pre-wrap;
1130
+ word-break: break-word;
1131
+ }
1132
+
1133
+ /* src/components/message/parts/ImagePart.css */
1134
+ .image-part {
1135
+ position: relative;
1136
+ margin: 8px 0;
1137
+ max-width: 100%;
1138
+ display: inline-block;
1139
+ }
1140
+ .image-content {
1141
+ max-width: 100%;
1142
+ max-height: 400px;
1143
+ border-radius: 8px;
1144
+ cursor: pointer;
1145
+ transition: opacity 0.2s;
1146
+ }
1147
+ .image-content:hover {
1148
+ opacity: 0.9;
1149
+ }
1150
+ .image-loading,
1151
+ .image-error {
1152
+ display: flex;
1153
+ flex-direction: column;
1154
+ align-items: center;
1155
+ justify-content: center;
1156
+ gap: 8px;
1157
+ padding: 24px;
1158
+ background: var(--chat-muted, #2a2a2a);
1159
+ border-radius: 8px;
1160
+ color: var(--chat-text-muted, #888);
1161
+ min-width: 200px;
1162
+ min-height: 150px;
1163
+ }
1164
+ .spinning {
1165
+ animation: spin 1s linear infinite;
1166
+ }
1167
+ @keyframes spin {
1168
+ from {
1169
+ transform: rotate(0deg);
1170
+ }
1171
+ to {
1172
+ transform: rotate(360deg);
1173
+ }
1174
+ }
1175
+ .image-error span {
1176
+ font-size: 13px;
1177
+ }
1178
+
1179
+ /* src/components/message/parts/ErrorPart.css */
1180
+ .error-content {
1181
+ font-size: 13px;
1182
+ line-height: 1.5;
1183
+ color: var(--chat-text-muted, #999);
1184
+ white-space: pre-wrap;
1185
+ word-break: break-word;
1186
+ overflow-wrap: break-word;
1187
+ margin: 0;
1188
+ }
1189
+
1190
+ /* src/components/message/PartsRenderer.css */
1191
+ .parts-renderer {
1192
+ display: flex;
1193
+ flex-direction: column;
1194
+ }
1195
+
1196
+ /* src/components/input/ChatInput.css */
1197
+ .chat-input {
1198
+ padding: 12px;
1199
+ }
1200
+ .chat-input.message-variant {
1201
+ padding: 0;
1202
+ margin-bottom: 16px;
1203
+ }
1204
+ .input-container {
1205
+ display: flex;
1206
+ flex-direction: column;
1207
+ background: var(--chat-input-bg, #2d2d2d);
1208
+ border: 1px solid var(--chat-border, #444);
1209
+ border-radius: 12px;
1210
+ padding: 12px;
1211
+ transition: border-color 0.15s;
1212
+ }
1213
+ .input-container.focused {
1214
+ border-color: rgba(255, 255, 255, 0.2);
1215
+ }
1216
+ .input-container.drag-over {
1217
+ border-color: var(--chat-primary, #2563eb);
1218
+ background: rgba(37, 99, 235, 0.1);
1219
+ }
1220
+ .images-preview {
1221
+ display: flex;
1222
+ flex-wrap: wrap;
1223
+ gap: 6px;
1224
+ margin-bottom: 8px;
1225
+ }
1226
+ .image-preview-item {
1227
+ position: relative;
1228
+ width: 48px;
1229
+ height: 48px;
1230
+ border-radius: 6px;
1231
+ overflow: hidden;
1232
+ background: rgba(0, 0, 0, 0.2);
1233
+ }
1234
+ .image-thumbnail {
1235
+ width: 100%;
1236
+ height: 100%;
1237
+ object-fit: cover;
1238
+ cursor: pointer;
1239
+ transition: opacity 0.15s;
1240
+ }
1241
+ .image-thumbnail:hover {
1242
+ opacity: 0.8;
1243
+ }
1244
+ .image-remove-btn {
1245
+ position: absolute;
1246
+ top: 2px;
1247
+ right: 2px;
1248
+ width: 16px;
1249
+ height: 16px;
1250
+ display: flex;
1251
+ align-items: center;
1252
+ justify-content: center;
1253
+ background: rgba(0, 0, 0, 0.5);
1254
+ border: none;
1255
+ border-radius: 50%;
1256
+ color: #fff;
1257
+ cursor: pointer;
1258
+ opacity: 0;
1259
+ transition: all 0.15s;
1260
+ }
1261
+ .image-preview-item:hover .image-remove-btn {
1262
+ opacity: 1;
1263
+ }
1264
+ .image-remove-btn:hover {
1265
+ background: rgba(239, 68, 68, 0.9);
1266
+ }
1267
+ .hidden-input {
1268
+ display: none;
1269
+ }
1270
+ .input-field-wrapper {
1271
+ margin-bottom: 8px;
1272
+ }
1273
+ .input-field {
1274
+ width: 100%;
1275
+ background: transparent;
1276
+ border: none;
1277
+ padding: 0;
1278
+ padding-right: 8px;
1279
+ color: var(--chat-text, #ccc);
1280
+ font-size: 14px;
1281
+ resize: none;
1282
+ min-height: 24px;
1283
+ max-height: 150px;
1284
+ line-height: 1.5;
1285
+ font-family: inherit;
1286
+ overflow-y: auto;
1287
+ }
1288
+ .input-field:focus {
1289
+ outline: none;
1290
+ }
1291
+ .input-field::placeholder {
1292
+ color: var(--chat-text-muted, #666);
1293
+ }
1294
+ .input-controls {
1295
+ display: flex;
1296
+ align-items: center;
1297
+ justify-content: space-between;
1298
+ gap: 8px;
1299
+ }
1300
+ .input-left {
1301
+ display: flex;
1302
+ align-items: center;
1303
+ gap: 4px;
1304
+ }
1305
+ .input-right {
1306
+ display: flex;
1307
+ align-items: center;
1308
+ gap: 2px;
1309
+ }
1310
+ .at-picker-wrapper {
1311
+ position: relative;
1312
+ }
1313
+ .input-right .icon-btn {
1314
+ display: flex;
1315
+ align-items: center;
1316
+ justify-content: center;
1317
+ width: 28px;
1318
+ height: 28px;
1319
+ background: transparent;
1320
+ border: none;
1321
+ border-radius: 6px;
1322
+ color: var(--chat-text-muted, #666);
1323
+ cursor: pointer;
1324
+ transition: all 0.15s;
1325
+ }
1326
+ .input-right .icon-btn:hover {
1327
+ color: var(--chat-text, #ccc);
1328
+ }
1329
+ .toggle-btn {
1330
+ display: flex;
1331
+ align-items: center;
1332
+ justify-content: center;
1333
+ width: 28px;
1334
+ height: 28px;
1335
+ background: transparent;
1336
+ border: none;
1337
+ border-radius: 6px;
1338
+ color: var(--chat-text-muted, #666);
1339
+ cursor: pointer;
1340
+ transition: all 0.15s;
1341
+ }
1342
+ .toggle-btn:hover {
1343
+ color: var(--chat-text, #ccc);
1344
+ }
1345
+ .toggle-btn.active {
1346
+ color: var(--chat-text, #fff);
1347
+ }
1348
+ .send-btn {
1349
+ display: flex;
1350
+ align-items: center;
1351
+ justify-content: center;
1352
+ width: 28px;
1353
+ height: 28px;
1354
+ background: transparent;
1355
+ border: none;
1356
+ border-radius: 6px;
1357
+ color: var(--chat-text-muted, #666);
1358
+ cursor: pointer;
1359
+ transition: all 0.15s;
1360
+ }
1361
+ .send-btn:hover {
1362
+ color: var(--chat-text, #ccc);
1363
+ }
1364
+
1365
+ /* src/components/input/at-views/AtViewStyles.css */
1366
+ .at-files-view {
1367
+ display: flex;
1368
+ flex-direction: column;
1369
+ }
1370
+ .at-view-section-title {
1371
+ font-size: 11px;
1372
+ color: #888;
1373
+ padding: 6px 8px 4px;
1374
+ text-transform: uppercase;
1375
+ letter-spacing: 0.5px;
1376
+ }
1377
+ .at-view-pathbar {
1378
+ display: flex;
1379
+ align-items: center;
1380
+ gap: 4px;
1381
+ padding: 4px 8px 8px;
1382
+ }
1383
+ .at-view-pathbtn {
1384
+ width: 22px;
1385
+ height: 22px;
1386
+ border-radius: 4px;
1387
+ background: transparent;
1388
+ border: 1px solid rgba(255, 255, 255, 0.1);
1389
+ color: #999;
1390
+ cursor: pointer;
1391
+ display: flex;
1392
+ align-items: center;
1393
+ justify-content: center;
1394
+ }
1395
+ .at-view-pathbtn:hover {
1396
+ background: rgba(255, 255, 255, 0.06);
1397
+ color: #ccc;
1398
+ }
1399
+ .at-view-pathtext {
1400
+ flex: 1;
1401
+ min-width: 0;
1402
+ font-size: 11px;
1403
+ color: #777;
1404
+ white-space: nowrap;
1405
+ overflow: hidden;
1406
+ text-overflow: ellipsis;
1407
+ }
1408
+ .at-view-list {
1409
+ display: flex;
1410
+ flex-direction: column;
1411
+ gap: 1px;
1412
+ }
1413
+ .at-view-item {
1414
+ display: flex;
1415
+ align-items: center;
1416
+ gap: 8px;
1417
+ text-align: left;
1418
+ padding: 7px 10px;
1419
+ border-radius: 6px;
1420
+ border: 1px solid transparent;
1421
+ background: transparent;
1422
+ cursor: pointer;
1423
+ color: #ccc;
1424
+ width: 100%;
1425
+ }
1426
+ .at-view-item:hover {
1427
+ background: rgba(255, 255, 255, 0.06);
1428
+ }
1429
+ .at-view-item.active {
1430
+ background: rgba(59, 130, 246, 0.15);
1431
+ border-color: rgba(59, 130, 246, 0.3);
1432
+ }
1433
+ .at-view-item-icon {
1434
+ color: #999;
1435
+ flex-shrink: 0;
1436
+ }
1437
+ .at-view-item-name {
1438
+ font-size: 13px;
1439
+ color: #ddd;
1440
+ flex-shrink: 0;
1441
+ max-width: 160px;
1442
+ overflow: hidden;
1443
+ text-overflow: ellipsis;
1444
+ white-space: nowrap;
1445
+ }
1446
+ .at-view-item-path {
1447
+ font-size: 11px;
1448
+ color: #555;
1449
+ min-width: 0;
1450
+ overflow: hidden;
1451
+ text-overflow: ellipsis;
1452
+ white-space: nowrap;
1453
+ flex: 1;
1454
+ }
1455
+ .at-view-empty {
1456
+ padding: 12px 10px;
1457
+ color: #666;
1458
+ font-size: 12px;
1459
+ text-align: center;
1460
+ }
1461
+ .at-placeholder-view {
1462
+ display: flex;
1463
+ flex-direction: column;
1464
+ align-items: center;
1465
+ justify-content: center;
1466
+ padding: 32px 16px;
1467
+ text-align: center;
1468
+ }
1469
+ .at-placeholder-icon {
1470
+ color: #555;
1471
+ margin-bottom: 12px;
1472
+ }
1473
+ .at-placeholder-title {
1474
+ font-size: 14px;
1475
+ font-weight: 500;
1476
+ color: #888;
1477
+ margin-bottom: 8px;
1478
+ }
1479
+ .at-placeholder-desc {
1480
+ font-size: 13px;
1481
+ color: #666;
1482
+ margin-bottom: 4px;
1483
+ }
1484
+ .at-placeholder-hint {
1485
+ font-size: 11px;
1486
+ color: #555;
1487
+ }
1488
+
1489
+ /* src/components/input/AtFilePicker.css */
1490
+ .at-picker-dropdown {
1491
+ position: fixed;
1492
+ width: 332px;
1493
+ background: var(--chat-dropdown-bg, #252526);
1494
+ border: 1px solid rgba(255, 255, 255, 0.1);
1495
+ border-radius: 10px;
1496
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
1497
+ z-index: 99999;
1498
+ display: flex;
1499
+ flex-direction: column;
1500
+ overflow: hidden;
1501
+ }
1502
+ .at-picker-header {
1503
+ display: flex;
1504
+ align-items: center;
1505
+ gap: 8px;
1506
+ padding: 10px 12px;
1507
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1508
+ }
1509
+ .at-picker-back {
1510
+ width: 24px;
1511
+ height: 24px;
1512
+ display: flex;
1513
+ align-items: center;
1514
+ justify-content: center;
1515
+ background: transparent;
1516
+ border: none;
1517
+ border-radius: 4px;
1518
+ color: #888;
1519
+ cursor: pointer;
1520
+ flex-shrink: 0;
1521
+ }
1522
+ .at-picker-back:hover {
1523
+ background: rgba(255, 255, 255, 0.08);
1524
+ color: #ccc;
1525
+ }
1526
+ .at-picker-search-icon {
1527
+ color: #666;
1528
+ flex-shrink: 0;
1529
+ }
1530
+ .at-picker-search {
1531
+ flex: 1;
1532
+ background: transparent;
1533
+ border: none;
1534
+ outline: none;
1535
+ color: #ddd;
1536
+ font-size: 13px;
1537
+ }
1538
+ .at-picker-body {
1539
+ padding: 6px;
1540
+ flex: 1;
1541
+ min-height: 0;
1542
+ overflow-y: auto;
1543
+ }
1544
+ .at-picker-body.is-scrolling .at-picker-item,
1545
+ .at-picker-body.is-scrolling .at-view-item {
1546
+ pointer-events: none;
1547
+ }
1548
+ .at-picker-section {
1549
+ margin-bottom: 2px;
1550
+ }
1551
+ .at-picker-recent {
1552
+ padding-bottom: 6px;
1553
+ margin-bottom: 6px;
1554
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
1555
+ }
1556
+ .at-picker-list {
1557
+ display: flex;
1558
+ flex-direction: column;
1559
+ gap: 1px;
1560
+ }
1561
+ .at-picker-item {
1562
+ display: flex;
1563
+ align-items: center;
1564
+ gap: 8px;
1565
+ text-align: left;
1566
+ padding: 7px 10px;
1567
+ border-radius: 6px;
1568
+ border: 1px solid transparent;
1569
+ background: transparent;
1570
+ cursor: pointer;
1571
+ color: #ccc;
1572
+ width: 100%;
1573
+ }
1574
+ .at-picker-item:hover {
1575
+ background: rgba(255, 255, 255, 0.06);
1576
+ }
1577
+ .at-picker-item.active {
1578
+ background: rgba(59, 130, 246, 0.15);
1579
+ border-color: rgba(59, 130, 246, 0.3);
1580
+ }
1581
+ .at-picker-item-icon {
1582
+ color: #999;
1583
+ flex-shrink: 0;
1584
+ }
1585
+ .at-picker-item-name {
1586
+ font-size: 13px;
1587
+ color: #ddd;
1588
+ flex-shrink: 0;
1589
+ max-width: 160px;
1590
+ overflow: hidden;
1591
+ text-overflow: ellipsis;
1592
+ white-space: nowrap;
1593
+ }
1594
+ .at-picker-item-path {
1595
+ font-size: 11px;
1596
+ color: #555;
1597
+ min-width: 0;
1598
+ overflow: hidden;
1599
+ text-overflow: ellipsis;
1600
+ white-space: nowrap;
1601
+ flex: 1;
1602
+ }
1603
+ .at-picker-category .at-picker-item-name {
1604
+ flex: 1;
1605
+ max-width: none;
1606
+ }
1607
+ .at-picker-chevron {
1608
+ color: #555;
1609
+ flex-shrink: 0;
1610
+ }
1611
+ .at-picker-footer {
1612
+ padding: 8px 12px;
1613
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
1614
+ color: #555;
1615
+ font-size: 11px;
1616
+ }
1617
+
1618
+ /* src/components/input/ImagePreviewModal.css */
1619
+ .image-preview-modal {
1620
+ position: fixed;
1621
+ inset: 0;
1622
+ z-index: 99999;
1623
+ display: flex;
1624
+ flex-direction: column;
1625
+ background: rgb(61 61 61 / 40%);
1626
+ backdrop-filter: blur(8px);
1627
+ animation: fadeIn 0.2s ease;
1628
+ }
1629
+ @keyframes fadeIn {
1630
+ from {
1631
+ opacity: 0;
1632
+ }
1633
+ to {
1634
+ opacity: 1;
1635
+ }
1636
+ }
1637
+ .preview-header {
1638
+ position: relative;
1639
+ z-index: 10;
1640
+ display: flex;
1641
+ align-items: center;
1642
+ justify-content: center;
1643
+ gap: 12px;
1644
+ padding: 16px 20px;
1645
+ min-height: 52px;
1646
+ }
1647
+ .preview-counter {
1648
+ color: rgba(255, 255, 255, 0.85);
1649
+ font-size: 14px;
1650
+ font-variant-numeric: tabular-nums;
1651
+ }
1652
+ .preview-close-btn {
1653
+ position: absolute;
1654
+ right: 16px;
1655
+ top: 50%;
1656
+ transform: translateY(-50%);
1657
+ display: flex;
1658
+ align-items: center;
1659
+ justify-content: center;
1660
+ height: 36px;
1661
+ padding: 0 12px;
1662
+ background: rgba(255, 255, 255, 0.1);
1663
+ border: none;
1664
+ border-radius: 8px;
1665
+ color: #fff;
1666
+ cursor: pointer;
1667
+ transition: all 0.15s;
1668
+ }
1669
+ .preview-close-btn:hover {
1670
+ background: rgba(255, 255, 255, 0.2);
1671
+ transform: translateY(-50%) scale(1.05);
1672
+ }
1673
+ .preview-close-btn:active {
1674
+ transform: translateY(-50%) scale(0.95);
1675
+ }
1676
+ .preview-nav-btn {
1677
+ position: absolute;
1678
+ top: 50%;
1679
+ transform: translateY(-50%);
1680
+ z-index: 10;
1681
+ display: flex;
1682
+ align-items: center;
1683
+ justify-content: center;
1684
+ height: 40px;
1685
+ padding: 0 12px;
1686
+ background: rgba(255, 255, 255, 0.1);
1687
+ border: none;
1688
+ border-radius: 8px;
1689
+ color: #fff;
1690
+ cursor: pointer;
1691
+ transition: all 0.15s;
1692
+ }
1693
+ .preview-nav-btn:hover:not(.disabled) {
1694
+ background: rgba(255, 255, 255, 0.2);
1695
+ transform: translateY(-50%) scale(1.1);
1696
+ }
1697
+ .preview-nav-btn:active:not(.disabled) {
1698
+ transform: translateY(-50%) scale(0.95);
1699
+ }
1700
+ .preview-nav-btn.disabled {
1701
+ opacity: 0.4;
1702
+ cursor: not-allowed;
1703
+ }
1704
+ .preview-nav-prev {
1705
+ left: 24px;
1706
+ }
1707
+ .preview-nav-next {
1708
+ right: 24px;
1709
+ }
1710
+ .preview-main {
1711
+ flex: 1;
1712
+ display: flex;
1713
+ align-items: center;
1714
+ justify-content: center;
1715
+ overflow: hidden;
1716
+ padding: 0 80px;
1717
+ }
1718
+ .preview-image {
1719
+ max-width: calc(100% - 80px);
1720
+ max-height: calc(100vh - 140px);
1721
+ object-fit: contain;
1722
+ border-radius: 8px;
1723
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
1724
+ }
1725
+
1726
+ /* src/components/common/ConfirmDialog.css */
1727
+ .confirm-dialog-overlay {
1728
+ position: fixed;
1729
+ inset: 0;
1730
+ z-index: 1000;
1731
+ display: flex;
1732
+ align-items: center;
1733
+ justify-content: center;
1734
+ background: rgba(0, 0, 0, 0.5);
1735
+ backdrop-filter: blur(2px);
1736
+ animation: fadeIn 0.2s ease;
1737
+ }
1738
+ .confirm-dialog {
1739
+ width: 100%;
1740
+ max-width: 400px;
1741
+ margin: 16px;
1742
+ background: var(--chat-dropdown-bg, #252526);
1743
+ border: 1px solid rgba(255, 255, 255, 0.1);
1744
+ border-radius: 12px;
1745
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
1746
+ overflow: hidden;
1747
+ animation: scaleIn 0.2s ease;
1748
+ }
1749
+ .confirm-dialog-header {
1750
+ display: flex;
1751
+ align-items: center;
1752
+ gap: 8px;
1753
+ padding: 12px 16px;
1754
+ border-bottom: 1px solid var(--chat-border, #333);
1755
+ }
1756
+ .confirm-dialog-header .icon {
1757
+ flex-shrink: 0;
1758
+ }
1759
+ .confirm-dialog-header .icon.warning {
1760
+ color: #f59e0b;
1761
+ }
1762
+ .confirm-dialog-header .icon.danger {
1763
+ color: #ef4444;
1764
+ }
1765
+ .confirm-dialog-header .icon.info {
1766
+ color: #3b82f6;
1767
+ }
1768
+ .confirm-dialog-header .title {
1769
+ font-size: 14px;
1770
+ font-weight: 600;
1771
+ color: var(--chat-text, #fff);
1772
+ }
1773
+ .confirm-dialog-content {
1774
+ padding: 16px;
1775
+ font-size: 13px;
1776
+ line-height: 1.6;
1777
+ color: var(--chat-text-muted, #999);
1778
+ }
1779
+ .confirm-dialog-footer {
1780
+ display: flex;
1781
+ justify-content: flex-end;
1782
+ gap: 8px;
1783
+ padding: 12px 16px;
1784
+ border-top: 1px solid var(--chat-border, #333);
1785
+ }
1786
+ .confirm-dialog-footer .btn {
1787
+ padding: 6px 12px;
1788
+ font-size: 13px;
1789
+ font-weight: 500;
1790
+ border: none;
1791
+ border-radius: 4px;
1792
+ cursor: pointer;
1793
+ transition: all 0.15s;
1794
+ }
1795
+ .confirm-dialog-footer .btn-cancel {
1796
+ background: transparent;
1797
+ color: var(--chat-text-muted, #999);
1798
+ border: 1px solid var(--chat-border, #444);
1799
+ }
1800
+ .confirm-dialog-footer .btn-cancel:hover {
1801
+ background: rgba(255, 255, 255, 0.05);
1802
+ color: var(--chat-text, #fff);
1803
+ }
1804
+ .confirm-dialog-footer .btn-info {
1805
+ background: #3b82f6;
1806
+ color: #fff;
1807
+ }
1808
+ .confirm-dialog-footer .btn-info:hover {
1809
+ background: #2563eb;
1810
+ }
1811
+ .confirm-dialog-footer .btn-warning {
1812
+ background: #f59e0b;
1813
+ color: #000;
1814
+ }
1815
+ .confirm-dialog-footer .btn-warning:hover {
1816
+ background: #d97706;
1817
+ }
1818
+ .confirm-dialog-footer .btn-danger {
1819
+ background: #ef4444;
1820
+ color: #fff;
1821
+ }
1822
+ .confirm-dialog-footer .btn-danger:hover {
1823
+ background: #dc2626;
1824
+ }
1825
+ @keyframes fadeIn {
1826
+ from {
1827
+ opacity: 0;
1828
+ }
1829
+ to {
1830
+ opacity: 1;
1831
+ }
1832
+ }
1833
+ @keyframes scaleIn {
1834
+ from {
1835
+ transform: scale(0.95);
1836
+ opacity: 0;
1837
+ }
1838
+ to {
1839
+ transform: scale(1);
1840
+ opacity: 1;
1841
+ }
1842
+ }
1843
+
1844
+ /* src/components/common/Toast.css */
1845
+ .toast-container {
1846
+ position: fixed;
1847
+ top: 60px;
1848
+ left: 50%;
1849
+ transform: translateX(-50%);
1850
+ z-index: 10000;
1851
+ pointer-events: none;
1852
+ animation: toast-in 0.2s ease;
1853
+ }
1854
+ .toast {
1855
+ padding: 8px 16px;
1856
+ border-radius: 6px;
1857
+ font-size: 13px;
1858
+ border: 1px solid;
1859
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
1860
+ }
1861
+ .toast-info,
1862
+ .toast-success {
1863
+ background: var(--chat-bg-secondary, #2a2a2a);
1864
+ color: var(--chat-text, #fff);
1865
+ border-color: var(--chat-border, #444);
1866
+ }
1867
+ .toast-warning {
1868
+ background: rgba(245, 158, 11, 0.15);
1869
+ color: #f59e0b;
1870
+ border-color: rgba(245, 158, 11, 0.3);
1871
+ }
1872
+ .toast-error {
1873
+ background: rgba(239, 68, 68, 0.15);
1874
+ color: #ef4444;
1875
+ border-color: rgba(239, 68, 68, 0.3);
1876
+ }
1877
+ @keyframes toast-in {
1878
+ from {
1879
+ opacity: 0;
1880
+ transform: translateX(-50%) translateY(-10px);
1881
+ }
1882
+ to {
1883
+ opacity: 1;
1884
+ transform: translateX(-50%) translateY(0);
1885
+ }
1886
+ }
1887
+
1888
+ /* src/components/common/IndexingSettings.css */
1889
+ .indexing-settings {
1890
+ display: flex;
1891
+ flex-direction: column;
1892
+ gap: 0;
1893
+ }
1894
+ .indexing-section {
1895
+ align-items: flex-start;
1896
+ }
1897
+ .indexing-content {
1898
+ display: flex;
1899
+ flex-direction: column;
1900
+ gap: 12px;
1901
+ margin-top: 12px;
1902
+ width: 100%;
1903
+ min-width: 0;
1904
+ }
1905
+ .progress-container {
1906
+ display: flex;
1907
+ flex-direction: column;
1908
+ gap: 6px;
1909
+ }
1910
+ .progress-bar {
1911
+ width: 100%;
1912
+ height: 4px;
1913
+ background: var(--chat-border, #333);
1914
+ border-radius: 2px;
1915
+ overflow: hidden;
1916
+ }
1917
+ .progress-fill {
1918
+ height: 100%;
1919
+ background: var(--chat-accent, #3b82f6);
1920
+ border-radius: 2px;
1921
+ transition: width 0.3s ease;
1922
+ }
1923
+ .progress-text {
1924
+ font-size: 13px;
1925
+ color: var(--chat-text-muted, #888);
1926
+ }
1927
+ .stats-info {
1928
+ display: flex;
1929
+ flex-wrap: wrap;
1930
+ gap: 12px;
1931
+ padding: 8px 0;
1932
+ }
1933
+ .stat-item {
1934
+ display: flex;
1935
+ align-items: center;
1936
+ gap: 6px;
1937
+ font-size: 12px;
1938
+ color: var(--chat-text-muted, #888);
1939
+ }
1940
+ .current-file {
1941
+ display: flex;
1942
+ align-items: center;
1943
+ gap: 6px;
1944
+ font-size: 12px;
1945
+ color: var(--chat-text-muted, #888);
1946
+ padding: 6px 8px;
1947
+ background: var(--chat-muted, #2a2a2a);
1948
+ border-radius: 4px;
1949
+ width: 100%;
1950
+ min-width: 0;
1951
+ }
1952
+ .file-path {
1953
+ flex: 1;
1954
+ overflow: hidden;
1955
+ text-overflow: ellipsis;
1956
+ white-space: nowrap;
1957
+ min-width: 0;
1958
+ }
1959
+ .action-buttons {
1960
+ display: flex;
1961
+ gap: 8px;
1962
+ }
1963
+ .action-buttons .edit-btn {
1964
+ margin: 0;
1965
+ }
1966
+ .action-buttons .edit-btn:disabled {
1967
+ opacity: 0.5;
1968
+ cursor: not-allowed;
1969
+ }
1970
+ .action-buttons .delete-btn {
1971
+ color: #ef4444;
1972
+ }
1973
+ .action-buttons .delete-btn:hover:not(:disabled) {
1974
+ color: #ef4444;
1975
+ }
1976
+ .spinning {
1977
+ animation: spin 1s linear infinite;
1978
+ }
1979
+ @keyframes spin {
1980
+ from {
1981
+ transform: rotate(0deg);
1982
+ }
1983
+ to {
1984
+ transform: rotate(360deg);
1985
+ }
1986
+ }
1987
+ .spinning {
1988
+ animation: spin 1s linear infinite;
1989
+ }
1990
+ @keyframes spin {
1991
+ from {
1992
+ transform: rotate(0deg);
1993
+ }
1994
+ to {
1995
+ transform: rotate(360deg);
1996
+ }
1997
+ }
1998
+ .indexing-settings .setting-item {
1999
+ display: flex;
2000
+ align-items: center;
2001
+ justify-content: space-between;
2002
+ padding: 16px 0;
2003
+ border-bottom: 1px solid var(--chat-border, #333);
2004
+ }
2005
+ .indexing-settings .setting-item:last-child {
2006
+ border-bottom: none;
2007
+ }
2008
+ .indexing-settings .setting-info {
2009
+ flex: 1;
2010
+ margin-right: 24px;
2011
+ min-width: 0;
2012
+ }
2013
+ .indexing-settings .setting-label {
2014
+ font-size: 14px;
2015
+ font-weight: 500;
2016
+ color: var(--chat-text, #fff);
2017
+ margin-bottom: 4px;
2018
+ }
2019
+ .indexing-settings .setting-description {
2020
+ font-size: 13px;
2021
+ color: var(--chat-text-muted, #888);
2022
+ line-height: 1.5;
2023
+ margin-bottom: 0;
2024
+ }
2025
+ .link-btn {
2026
+ display: inline;
2027
+ padding: 0;
2028
+ background: transparent;
2029
+ border: none;
2030
+ color: var(--chat-accent, #3b82f6);
2031
+ cursor: pointer;
2032
+ text-decoration: underline;
2033
+ font-size: inherit;
2034
+ }
2035
+ .link-btn:hover {
2036
+ color: var(--chat-accent-hover, #60a5fa);
2037
+ }
2038
+ .indexing-settings .setting-control {
2039
+ flex-shrink: 0;
2040
+ }
2041
+ .edit-btn {
2042
+ display: flex;
2043
+ align-items: center;
2044
+ gap: 6px;
2045
+ padding: 6px 12px;
2046
+ font-size: 13px;
2047
+ font-weight: 500;
2048
+ border: 1px solid var(--chat-border, #333);
2049
+ border-radius: 6px;
2050
+ background: transparent;
2051
+ color: var(--chat-text, #fff);
2052
+ cursor: pointer;
2053
+ transition: all 0.15s;
2054
+ }
2055
+ .edit-btn:hover {
2056
+ background: var(--chat-muted, #2a2a2a);
2057
+ border-color: var(--chat-border, #444);
2058
+ }
2059
+
2060
+ /* src/components/common/SettingsPanel.css */
2061
+ .settings-panel-overlay {
2062
+ position: fixed;
2063
+ top: 0;
2064
+ left: 0;
2065
+ right: 0;
2066
+ bottom: 0;
2067
+ background: rgba(0, 0, 0, 0.7);
2068
+ display: flex;
2069
+ align-items: center;
2070
+ justify-content: center;
2071
+ z-index: 1000;
2072
+ }
2073
+ .settings-panel {
2074
+ background: var(--chat-bg, #1e1e1e);
2075
+ border: 1px solid var(--chat-border, #333);
2076
+ border-radius: 12px;
2077
+ width: 90%;
2078
+ max-width: 900px;
2079
+ height: 80vh;
2080
+ max-height: 700px;
2081
+ display: flex;
2082
+ flex-direction: row;
2083
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
2084
+ overflow: hidden;
2085
+ }
2086
+ .settings-sidebar {
2087
+ width: 240px;
2088
+ background: var(--chat-muted, #2a2a2a);
2089
+ border-right: 1px solid var(--chat-border, #333);
2090
+ display: flex;
2091
+ flex-direction: column;
2092
+ flex-shrink: 0;
2093
+ }
2094
+ .sidebar-header {
2095
+ display: flex;
2096
+ align-items: center;
2097
+ height: 50px;
2098
+ padding: 0 16px;
2099
+ border-bottom: 1px solid var(--chat-border, #333);
2100
+ }
2101
+ .sidebar-title {
2102
+ margin: 0;
2103
+ font-size: 15px;
2104
+ font-weight: 600;
2105
+ color: var(--chat-text, #fff);
2106
+ letter-spacing: 0.2px;
2107
+ line-height: 1;
2108
+ }
2109
+ .sidebar-content {
2110
+ flex: 1;
2111
+ overflow-y: auto;
2112
+ padding: 8px;
2113
+ }
2114
+ .sidebar-item {
2115
+ display: flex;
2116
+ align-items: center;
2117
+ gap: 12px;
2118
+ width: 100%;
2119
+ padding: 10px 12px;
2120
+ margin-bottom: 2px;
2121
+ background: transparent;
2122
+ border: none;
2123
+ border-radius: 8px;
2124
+ font-size: 14px;
2125
+ font-weight: 500;
2126
+ color: var(--chat-text-muted, #888);
2127
+ cursor: pointer;
2128
+ transition: all 0.15s ease;
2129
+ text-align: left;
2130
+ position: relative;
2131
+ }
2132
+ .sidebar-item:hover {
2133
+ background: rgba(255, 255, 255, 0.05);
2134
+ color: var(--chat-text, #ccc);
2135
+ }
2136
+ .sidebar-item.active {
2137
+ background: rgba(255, 255, 255, 0.1);
2138
+ color: var(--chat-text, #fff);
2139
+ }
2140
+ .settings-content {
2141
+ flex: 1;
2142
+ display: flex;
2143
+ flex-direction: column;
2144
+ overflow: hidden;
2145
+ }
2146
+ .content-header {
2147
+ display: flex;
2148
+ align-items: center;
2149
+ justify-content: space-between;
2150
+ height: 50px;
2151
+ padding: 0 16px;
2152
+ border-bottom: 1px solid var(--chat-border, #333);
2153
+ }
2154
+ .content-title {
2155
+ margin: 0;
2156
+ font-size: 15px;
2157
+ font-weight: 600;
2158
+ color: var(--chat-text, #fff);
2159
+ letter-spacing: 0.2px;
2160
+ line-height: 1;
2161
+ }
2162
+ .close-btn {
2163
+ display: flex;
2164
+ align-items: center;
2165
+ justify-content: center;
2166
+ width: 32px;
2167
+ height: 32px;
2168
+ padding: 0;
2169
+ background: transparent;
2170
+ border: none;
2171
+ border-radius: 6px;
2172
+ color: var(--chat-text-muted, #888);
2173
+ cursor: pointer;
2174
+ transition: all 0.15s;
2175
+ }
2176
+ .close-btn:hover {
2177
+ background: var(--chat-muted, #2a2a2a);
2178
+ color: var(--chat-text, #fff);
2179
+ }
2180
+ .content-body {
2181
+ flex: 1;
2182
+ overflow-y: auto;
2183
+ display: flex;
2184
+ flex-direction: column;
2185
+ gap: 24px;
2186
+ padding: 0 16px;
2187
+ }
2188
+ .setting-section {
2189
+ }
2190
+ .section-title {
2191
+ font-size: 16px;
2192
+ font-weight: 500;
2193
+ color: var(--chat-text, #fff);
2194
+ margin-bottom: 4px;
2195
+ }
2196
+ .section-description {
2197
+ font-size: 13px;
2198
+ color: var(--chat-text-muted, #888);
2199
+ margin-bottom: 16px;
2200
+ }
2201
+ .setting-item {
2202
+ display: flex;
2203
+ align-items: center;
2204
+ justify-content: space-between;
2205
+ padding: 16px 0;
2206
+ border-bottom: 1px solid var(--chat-border, #333);
2207
+ }
2208
+ .setting-item:last-child {
2209
+ border-bottom: none;
2210
+ }
2211
+ .setting-info {
2212
+ flex: 1;
2213
+ margin-right: 24px;
2214
+ }
2215
+ .setting-label {
2216
+ font-size: 14px;
2217
+ font-weight: 500;
2218
+ color: var(--chat-text, #fff);
2219
+ margin-bottom: 4px;
2220
+ }
2221
+ .setting-description {
2222
+ font-size: 13px;
2223
+ color: var(--chat-text-muted, #888);
2224
+ line-height: 1.5;
2225
+ }
2226
+ .setting-control {
2227
+ flex-shrink: 0;
2228
+ }
2229
+ .dropdown-wrapper {
2230
+ }
2231
+ .dropdown-wrapper .dropdown-selector .selector-text {
2232
+ max-width: none;
2233
+ white-space: nowrap;
2234
+ }
2235
+ .toggle-switch {
2236
+ position: relative;
2237
+ display: inline-block;
2238
+ width: 44px;
2239
+ height: 24px;
2240
+ cursor: pointer;
2241
+ }
2242
+ .toggle-switch input {
2243
+ opacity: 0;
2244
+ width: 0;
2245
+ height: 0;
2246
+ }
2247
+ .toggle-slider {
2248
+ position: absolute;
2249
+ top: 0;
2250
+ left: 0;
2251
+ right: 0;
2252
+ bottom: 0;
2253
+ background-color: var(--chat-muted, #3c3c3c);
2254
+ border-radius: 24px;
2255
+ transition: all 0.2s;
2256
+ border: 1px solid rgba(255, 255, 255, 0.1);
2257
+ }
2258
+ .toggle-slider:before {
2259
+ position: absolute;
2260
+ content: "";
2261
+ height: 18px;
2262
+ width: 18px;
2263
+ left: 3px;
2264
+ top: 50%;
2265
+ transform: translateY(-50%);
2266
+ background-color: #fff;
2267
+ border-radius: 50%;
2268
+ transition: all 0.2s;
2269
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
2270
+ }
2271
+ .toggle-switch input:checked + .toggle-slider {
2272
+ background-color: rgb(153, 207, 140);
2273
+ border-color: rgba(255, 255, 255, 0.2);
2274
+ }
2275
+ .toggle-switch input:checked + .toggle-slider:before {
2276
+ transform: translate(20px, -50%);
2277
+ }
2278
+ .toggle-switch input:focus + .toggle-slider {
2279
+ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2);
2280
+ }
2281
+
2282
+ /* src/components/message/blocks/blocks.css */
2283
+ .text-block {
2284
+ font-size: 14px;
2285
+ line-height: 1.7;
2286
+ color: var(--chat-text, #ccc);
2287
+ white-space: pre-wrap;
2288
+ word-break: break-word;
2289
+ }
2290
+ .code-block {
2291
+ background: var(--chat-code-bg, #1f2937);
2292
+ border-radius: 8px;
2293
+ overflow: hidden;
2294
+ margin: 8px 0;
2295
+ }
2296
+ .code-header {
2297
+ display: flex;
2298
+ align-items: center;
2299
+ justify-content: space-between;
2300
+ padding: 8px 12px;
2301
+ background: rgba(0, 0, 0, 0.2);
2302
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
2303
+ }
2304
+ .code-language {
2305
+ font-size: 12px;
2306
+ color: var(--chat-text-muted, #888);
2307
+ font-family:
2308
+ "SF Mono",
2309
+ Monaco,
2310
+ monospace;
2311
+ }
2312
+ .code-actions {
2313
+ display: flex;
2314
+ gap: 4px;
2315
+ }
2316
+ .code-action-btn {
2317
+ display: flex;
2318
+ align-items: center;
2319
+ justify-content: center;
2320
+ width: 28px;
2321
+ height: 28px;
2322
+ border: none;
2323
+ background: transparent;
2324
+ border-radius: 4px;
2325
+ color: var(--chat-text-muted, #888);
2326
+ cursor: pointer;
2327
+ transition: all 0.15s;
2328
+ }
2329
+ .code-action-btn:hover {
2330
+ background: rgba(255, 255, 255, 0.1);
2331
+ color: var(--chat-text, #ccc);
2332
+ }
2333
+ .code-content {
2334
+ margin: 0;
2335
+ padding: 12px;
2336
+ overflow-x: auto;
2337
+ font-family:
2338
+ "SF Mono",
2339
+ Monaco,
2340
+ Consolas,
2341
+ monospace;
2342
+ font-size: 13px;
2343
+ line-height: 1.5;
2344
+ color: var(--chat-code-text, #e5e7eb);
2345
+ }
2346
+ .code-content::-webkit-scrollbar {
2347
+ width: 6px;
2348
+ height: 6px;
2349
+ }
2350
+ .code-content::-webkit-scrollbar-track {
2351
+ background: transparent;
2352
+ }
2353
+ .code-content::-webkit-scrollbar-thumb {
2354
+ background: var(--chat-scrollbar, rgba(255, 255, 255, 0.2));
2355
+ border-radius: 3px;
2356
+ }
2357
+ .code-content::-webkit-scrollbar-thumb:hover {
2358
+ background: var(--chat-scrollbar-hover, rgba(255, 255, 255, 0.3));
2359
+ }
2360
+ .code-content code {
2361
+ font-family: inherit;
2362
+ }
2363
+ .code-content .hljs-keyword {
2364
+ color: #c678dd;
2365
+ }
2366
+ .code-content .hljs-string {
2367
+ color: #98c379;
2368
+ }
2369
+ .code-content .hljs-number {
2370
+ color: #d19a66;
2371
+ }
2372
+ .code-content .hljs-comment {
2373
+ color: #5c6370;
2374
+ font-style: italic;
2375
+ }
2376
+ .code-content .hljs-function {
2377
+ color: #61afef;
2378
+ }
2379
+ .code-content .hljs-class {
2380
+ color: #e5c07b;
2381
+ }
2382
+ .code-content .hljs-variable {
2383
+ color: #e06c75;
2384
+ }
2385
+ .code-content .hljs-operator {
2386
+ color: #56b6c2;
2387
+ }
2388
+ .code-content .hljs-punctuation {
2389
+ color: #abb2bf;
2390
+ }
2391
+ .code-content .hljs-property {
2392
+ color: #e06c75;
2393
+ }
2394
+ .code-content .hljs-attr {
2395
+ color: #d19a66;
2396
+ }
2397
+ .code-content .hljs-built_in {
2398
+ color: #e5c07b;
2399
+ }
2400
+ .code-content .hljs-title {
2401
+ color: #61afef;
2402
+ }
2403
+ .code-content .hljs-params {
2404
+ color: #abb2bf;
2405
+ }
2406
+ .code-content .hljs-literal {
2407
+ color: #56b6c2;
2408
+ }
2409
+ .code-content .hljs-type {
2410
+ color: #e5c07b;
2411
+ }
2412
+
2413
+ /* src/components/message/ContentRenderer.css */
2414
+ .content-renderer {
2415
+ display: flex;
2416
+ flex-direction: column;
2417
+ gap: 4px;
2418
+ }
2419
+
2420
+ /* src/components/message/tool-results/tool-results.css */
2421
+ .default-tool-result {
2422
+ background: var(--chat-bg, #1e1e1e);
2423
+ border-radius: 6px;
2424
+ overflow: hidden;
2425
+ }
2426
+ .result-content {
2427
+ margin: 0;
2428
+ padding: 8px;
2429
+ font-size: 13px;
2430
+ line-height: 1.5;
2431
+ color: var(--chat-text-muted, #999);
2432
+ font-family:
2433
+ "SF Mono",
2434
+ Monaco,
2435
+ monospace;
2436
+ white-space: pre-wrap;
2437
+ word-break: break-word;
2438
+ overflow-x: auto;
2439
+ }
2440
+ .weather-card {
2441
+ background:
2442
+ linear-gradient(
2443
+ 135deg,
2444
+ #667eea 0%,
2445
+ #764ba2 100%);
2446
+ border-radius: 12px;
2447
+ padding: 16px;
2448
+ color: #fff;
2449
+ min-width: 200px;
2450
+ }
2451
+ .weather-header {
2452
+ display: flex;
2453
+ align-items: center;
2454
+ gap: 8px;
2455
+ margin-bottom: 12px;
2456
+ }
2457
+ .weather-icon {
2458
+ opacity: 0.9;
2459
+ }
2460
+ .weather-location {
2461
+ font-size: 14px;
2462
+ font-weight: 500;
2463
+ }
2464
+ .weather-main {
2465
+ margin-bottom: 12px;
2466
+ }
2467
+ .weather-temp {
2468
+ font-size: 48px;
2469
+ font-weight: 300;
2470
+ line-height: 1;
2471
+ }
2472
+ .weather-condition {
2473
+ font-size: 14px;
2474
+ opacity: 0.9;
2475
+ margin-top: 4px;
2476
+ }
2477
+ .weather-details {
2478
+ display: flex;
2479
+ gap: 16px;
2480
+ padding-top: 12px;
2481
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
2482
+ }
2483
+ .weather-detail {
2484
+ display: flex;
2485
+ align-items: center;
2486
+ gap: 4px;
2487
+ font-size: 13px;
2488
+ opacity: 0.9;
2489
+ }
2490
+ .weather-forecast {
2491
+ margin-top: 12px;
2492
+ padding-top: 12px;
2493
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
2494
+ display: flex;
2495
+ gap: 12px;
2496
+ overflow-x: auto;
2497
+ }
2498
+ .forecast-item {
2499
+ text-align: center;
2500
+ min-width: 60px;
2501
+ }
2502
+ .forecast-date {
2503
+ font-size: 12px;
2504
+ opacity: 0.8;
2505
+ margin-bottom: 4px;
2506
+ }
2507
+ .forecast-temp {
2508
+ font-size: 13px;
2509
+ font-weight: 500;
2510
+ }
2511
+ .forecast-condition {
2512
+ font-size: 11px;
2513
+ opacity: 0.8;
2514
+ margin-top: 2px;
2515
+ }
2516
+ .search-results-card {
2517
+ background: var(--chat-muted, #2d2d2d);
2518
+ border-radius: 8px;
2519
+ overflow: hidden;
2520
+ }
2521
+ .search-header {
2522
+ display: flex;
2523
+ align-items: center;
2524
+ gap: 8px;
2525
+ padding: 10px 12px;
2526
+ background: rgba(0, 0, 0, 0.2);
2527
+ color: var(--chat-text-muted, #888);
2528
+ font-size: 13px;
2529
+ }
2530
+ .search-count {
2531
+ margin-left: auto;
2532
+ font-size: 12px;
2533
+ opacity: 0.7;
2534
+ }
2535
+ .search-list {
2536
+ display: flex;
2537
+ flex-direction: column;
2538
+ }
2539
+ .search-item {
2540
+ display: block;
2541
+ padding: 10px 12px;
2542
+ text-decoration: none;
2543
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
2544
+ transition: background 0.15s;
2545
+ }
2546
+ .search-item:last-child {
2547
+ border-bottom: none;
2548
+ }
2549
+ .search-item:hover {
2550
+ background: rgba(255, 255, 255, 0.05);
2551
+ }
2552
+ .item-title {
2553
+ font-size: 14px;
2554
+ color: var(--chat-text, #ccc);
2555
+ font-weight: 500;
2556
+ margin-bottom: 4px;
2557
+ overflow: hidden;
2558
+ text-overflow: ellipsis;
2559
+ white-space: nowrap;
2560
+ }
2561
+ .item-snippet {
2562
+ font-size: 12px;
2563
+ color: var(--chat-text-muted, #888);
2564
+ line-height: 1.4;
2565
+ margin-bottom: 4px;
2566
+ display: -webkit-box;
2567
+ -webkit-line-clamp: 2;
2568
+ -webkit-box-orient: vertical;
2569
+ overflow: hidden;
2570
+ }
2571
+ .item-url {
2572
+ font-size: 11px;
2573
+ color: var(--chat-text-muted, #666);
2574
+ }
2575
+ /*# sourceMappingURL=index.css.map */