@tanstack/ai-devtools-core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/dist/esm/components/ConversationDetails.d.ts +2 -0
  4. package/dist/esm/components/ConversationDetails.js +134 -0
  5. package/dist/esm/components/ConversationDetails.js.map +1 -0
  6. package/dist/esm/components/ConversationsList.d.ts +2 -0
  7. package/dist/esm/components/ConversationsList.js +30 -0
  8. package/dist/esm/components/ConversationsList.js.map +1 -0
  9. package/dist/esm/components/Shell.d.ts +1 -0
  10. package/dist/esm/components/Shell.js +94 -0
  11. package/dist/esm/components/Shell.js.map +1 -0
  12. package/dist/esm/components/conversation/ChunkBadges.d.ts +7 -0
  13. package/dist/esm/components/conversation/ChunkBadges.js +54 -0
  14. package/dist/esm/components/conversation/ChunkBadges.js.map +1 -0
  15. package/dist/esm/components/conversation/ChunkItem.d.ts +9 -0
  16. package/dist/esm/components/conversation/ChunkItem.js +247 -0
  17. package/dist/esm/components/conversation/ChunkItem.js.map +1 -0
  18. package/dist/esm/components/conversation/ChunksCollapsible.d.ts +7 -0
  19. package/dist/esm/components/conversation/ChunksCollapsible.js +77 -0
  20. package/dist/esm/components/conversation/ChunksCollapsible.js.map +1 -0
  21. package/dist/esm/components/conversation/ChunksTab.d.ts +8 -0
  22. package/dist/esm/components/conversation/ChunksTab.js +87 -0
  23. package/dist/esm/components/conversation/ChunksTab.js.map +1 -0
  24. package/dist/esm/components/conversation/ConversationHeader.d.ts +7 -0
  25. package/dist/esm/components/conversation/ConversationHeader.js +187 -0
  26. package/dist/esm/components/conversation/ConversationHeader.js.map +1 -0
  27. package/dist/esm/components/conversation/ConversationTabs.d.ts +10 -0
  28. package/dist/esm/components/conversation/ConversationTabs.js +88 -0
  29. package/dist/esm/components/conversation/ConversationTabs.js.map +1 -0
  30. package/dist/esm/components/conversation/EmbeddingsTab.d.ts +7 -0
  31. package/dist/esm/components/conversation/EmbeddingsTab.js +90 -0
  32. package/dist/esm/components/conversation/EmbeddingsTab.js.map +1 -0
  33. package/dist/esm/components/conversation/MessageCard.d.ts +7 -0
  34. package/dist/esm/components/conversation/MessageCard.js +152 -0
  35. package/dist/esm/components/conversation/MessageCard.js.map +1 -0
  36. package/dist/esm/components/conversation/MessageGroup.d.ts +15 -0
  37. package/dist/esm/components/conversation/MessageGroup.js +119 -0
  38. package/dist/esm/components/conversation/MessageGroup.js.map +1 -0
  39. package/dist/esm/components/conversation/MessagesTab.d.ts +7 -0
  40. package/dist/esm/components/conversation/MessagesTab.js +37 -0
  41. package/dist/esm/components/conversation/MessagesTab.js.map +1 -0
  42. package/dist/esm/components/conversation/SummariesTab.d.ts +7 -0
  43. package/dist/esm/components/conversation/SummariesTab.js +110 -0
  44. package/dist/esm/components/conversation/SummariesTab.js.map +1 -0
  45. package/dist/esm/components/conversation/ToolCallDisplay.d.ts +7 -0
  46. package/dist/esm/components/conversation/ToolCallDisplay.js +123 -0
  47. package/dist/esm/components/conversation/ToolCallDisplay.js.map +1 -0
  48. package/dist/esm/components/conversation/index.d.ts +7 -0
  49. package/dist/esm/components/list/ConversationRow.d.ts +7 -0
  50. package/dist/esm/components/list/ConversationRow.js +122 -0
  51. package/dist/esm/components/list/ConversationRow.js.map +1 -0
  52. package/dist/esm/components/list/index.d.ts +1 -0
  53. package/dist/esm/components/utils/format.d.ts +6 -0
  54. package/dist/esm/components/utils/format.js +68 -0
  55. package/dist/esm/components/utils/format.js.map +1 -0
  56. package/dist/esm/components/utils/index.d.ts +1 -0
  57. package/dist/esm/core.d.ts +18 -0
  58. package/dist/esm/core.js +9 -0
  59. package/dist/esm/core.js.map +1 -0
  60. package/dist/esm/index.d.ts +9 -0
  61. package/dist/esm/index.js +6 -0
  62. package/dist/esm/index.js.map +1 -0
  63. package/dist/esm/production.d.ts +2 -0
  64. package/dist/esm/production.js +5 -0
  65. package/dist/esm/production.js.map +1 -0
  66. package/dist/esm/store/ai-context.d.ts +126 -0
  67. package/dist/esm/store/ai-context.js +1081 -0
  68. package/dist/esm/store/ai-context.js.map +1 -0
  69. package/dist/esm/store/ai-store.d.ts +1 -0
  70. package/dist/esm/styles/tokens.d.ts +298 -0
  71. package/dist/esm/styles/tokens.js +107 -0
  72. package/dist/esm/styles/tokens.js.map +1 -0
  73. package/dist/esm/styles/use-styles.d.ts +226 -0
  74. package/dist/esm/styles/use-styles.js +1538 -0
  75. package/dist/esm/styles/use-styles.js.map +1 -0
  76. package/package.json +61 -0
  77. package/src/components/ConversationDetails.tsx +89 -0
  78. package/src/components/ConversationsList.tsx +21 -0
  79. package/src/components/Shell.tsx +93 -0
  80. package/src/components/conversation/ChunkBadges.tsx +51 -0
  81. package/src/components/conversation/ChunkItem.tsx +273 -0
  82. package/src/components/conversation/ChunksCollapsible.tsx +58 -0
  83. package/src/components/conversation/ChunksTab.tsx +85 -0
  84. package/src/components/conversation/ConversationHeader.tsx +130 -0
  85. package/src/components/conversation/ConversationTabs.tsx +104 -0
  86. package/src/components/conversation/EmbeddingsTab.tsx +80 -0
  87. package/src/components/conversation/MessageCard.tsx +137 -0
  88. package/src/components/conversation/MessageGroup.tsx +101 -0
  89. package/src/components/conversation/MessagesTab.tsx +30 -0
  90. package/src/components/conversation/SummariesTab.tsx +91 -0
  91. package/src/components/conversation/ToolCallDisplay.tsx +99 -0
  92. package/src/components/conversation/index.ts +8 -0
  93. package/src/components/list/ConversationRow.tsx +85 -0
  94. package/src/components/list/index.ts +1 -0
  95. package/src/components/utils/format.ts +61 -0
  96. package/src/components/utils/index.ts +1 -0
  97. package/src/core.tsx +10 -0
  98. package/src/index.ts +8 -0
  99. package/src/production.ts +3 -0
  100. package/src/store/ai-context.tsx +1784 -0
  101. package/src/store/ai-store.ts +2 -0
  102. package/src/styles/tokens.ts +305 -0
  103. package/src/styles/use-styles.ts +1537 -0
@@ -0,0 +1,1538 @@
1
+ import * as goober from "goober";
2
+ import { createSignal, createEffect } from "solid-js";
3
+ import { useTheme } from "@tanstack/devtools-ui";
4
+ import { tokens } from "./tokens.js";
5
+ const stylesFactory = (theme) => {
6
+ const { colors, font, size, alpha, border } = tokens;
7
+ const { fontFamily, size: fontSize } = font;
8
+ const css = goober.css;
9
+ const t = (light, dark) => theme === "light" ? light : dark;
10
+ return {
11
+ mainContainer: css`
12
+ display: flex;
13
+ flex: 1;
14
+ min-height: 80%;
15
+ overflow: hidden;
16
+ padding: ${size[2]};
17
+ `,
18
+ dragHandle: css`
19
+ width: 8px;
20
+ background: ${t(colors.gray[300], colors.darkGray[600])};
21
+ cursor: col-resize;
22
+ position: relative;
23
+ transition: all 0.2s ease;
24
+ user-select: none;
25
+ pointer-events: all;
26
+ margin: 0 ${size[1]};
27
+ border-radius: 2px;
28
+
29
+ &:hover {
30
+ background: ${t(colors.blue[600], colors.blue[500])};
31
+ margin: 0 ${size[1]};
32
+ }
33
+
34
+ &.dragging {
35
+ background: ${t(colors.blue[700], colors.blue[600])};
36
+ margin: 0 ${size[1]};
37
+ }
38
+
39
+ &::after {
40
+ content: '';
41
+ position: absolute;
42
+ top: 50%;
43
+ left: 50%;
44
+ transform: translate(-50%, -50%);
45
+ width: 2px;
46
+ height: 20px;
47
+ background: ${t(colors.gray[400], colors.darkGray[400])};
48
+ border-radius: 1px;
49
+ pointer-events: none;
50
+ }
51
+
52
+ &:hover::after,
53
+ &.dragging::after {
54
+ background: ${t(colors.blue[500], colors.blue[300])};
55
+ }
56
+ `,
57
+ leftPanel: css`
58
+ background: ${t(colors.gray[100], colors.darkGray[800])};
59
+ border-radius: ${border.radius.lg};
60
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
61
+ display: flex;
62
+ flex-direction: column;
63
+ overflow: hidden;
64
+ min-height: 0;
65
+ flex-shrink: 0;
66
+ `,
67
+ rightPanel: css`
68
+ background: ${t(colors.gray[100], colors.darkGray[800])};
69
+ border-radius: ${border.radius.lg};
70
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
71
+ display: flex;
72
+ flex-direction: column;
73
+ overflow: hidden;
74
+ min-height: 0;
75
+ flex: 1;
76
+ `,
77
+ panelHeader: css`
78
+ font-size: ${fontSize.md};
79
+ font-weight: ${font.weight.bold};
80
+ color: ${t(colors.blue[700], colors.blue[400])};
81
+ padding: ${size[2]};
82
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
83
+ background: ${t(colors.gray[100], colors.darkGray[800])};
84
+ flex-shrink: 0;
85
+ `,
86
+ utilList: css`
87
+ flex: 1;
88
+ overflow-y: auto;
89
+ padding: ${size[1]};
90
+ min-height: 0;
91
+ `,
92
+ utilGroup: css`
93
+ margin-bottom: ${size[2]};
94
+ `,
95
+ utilGroupHeader: css`
96
+ font-size: ${fontSize.xs};
97
+ font-weight: ${font.weight.semibold};
98
+ color: ${t(colors.gray[600], colors.gray[400])};
99
+ text-transform: uppercase;
100
+ letter-spacing: 0.05em;
101
+ margin-bottom: ${size[1]};
102
+ padding: ${size[1]} ${size[2]};
103
+ background: ${t(colors.gray[200], colors.darkGray[700])};
104
+ border-radius: ${border.radius.md};
105
+ `,
106
+ utilRow: css`
107
+ display: flex;
108
+ justify-content: space-between;
109
+ align-items: center;
110
+ padding: ${size[2]};
111
+ margin-bottom: ${size[1]};
112
+ background: ${t(colors.gray[200], colors.darkGray[700])};
113
+ border-radius: ${border.radius.md};
114
+ cursor: pointer;
115
+ transition: all 0.2s ease;
116
+ border: 1px solid transparent;
117
+
118
+ &:hover {
119
+ background: ${t(colors.gray[300], colors.darkGray[600])};
120
+ border-color: ${t(colors.gray[400], colors.darkGray[500])};
121
+ }
122
+ `,
123
+ utilRowSelected: css`
124
+ background: ${t(colors.blue[100], colors.blue[900] + alpha[20])};
125
+ border-color: ${t(colors.blue[600], colors.blue[500])};
126
+ box-shadow: 0 0 0 1px
127
+ ${t(colors.blue[600] + alpha[30], colors.blue[500] + alpha[30])};
128
+ `,
129
+ utilKey: css`
130
+ font-family: ${fontFamily.mono};
131
+ font-size: ${fontSize.xs};
132
+ color: ${t(colors.gray[900], colors.gray[100])};
133
+ flex: 1;
134
+ overflow: hidden;
135
+ text-overflow: ellipsis;
136
+ white-space: nowrap;
137
+ `,
138
+ utilStatus: css`
139
+ font-size: ${fontSize.xs};
140
+ color: ${t(colors.gray[600], colors.gray[400])};
141
+ text-transform: uppercase;
142
+ letter-spacing: 0.05em;
143
+ padding: ${size[1]} ${size[1]};
144
+ background: ${t(colors.gray[300], colors.darkGray[600])};
145
+ border-radius: ${border.radius.sm};
146
+ margin-left: ${size[1]};
147
+ `,
148
+ stateDetails: css`
149
+ flex: 1;
150
+ overflow-y: auto;
151
+ padding: ${size[2]};
152
+ min-height: 0;
153
+ `,
154
+ stateHeader: css`
155
+ margin-bottom: ${size[2]};
156
+ padding-bottom: ${size[2]};
157
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
158
+ `,
159
+ stateTitle: css`
160
+ font-size: ${fontSize.md};
161
+ font-weight: ${font.weight.bold};
162
+ color: ${t(colors.blue[700], colors.blue[400])};
163
+ margin-bottom: ${size[1]};
164
+ `,
165
+ stateKey: css`
166
+ font-family: ${fontFamily.mono};
167
+ font-size: ${fontSize.xs};
168
+ color: ${t(colors.gray[600], colors.gray[400])};
169
+ word-break: break-all;
170
+ `,
171
+ stateContent: css`
172
+ background: ${t(colors.gray[100], colors.darkGray[700])};
173
+ border-radius: ${border.radius.md};
174
+ padding: ${size[2]};
175
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
176
+ `,
177
+ detailsGrid: css`
178
+ display: grid;
179
+ grid-template-columns: 1fr;
180
+ gap: ${size[2]};
181
+ align-items: start;
182
+ `,
183
+ detailSection: css`
184
+ background: ${t(colors.white, colors.darkGray[700])};
185
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
186
+ border-radius: ${border.radius.md};
187
+ padding: ${size[2]};
188
+ `,
189
+ detailSectionHeader: css`
190
+ font-size: ${fontSize.sm};
191
+ font-weight: ${font.weight.bold};
192
+ color: ${t(colors.gray[800], colors.gray[200])};
193
+ margin-bottom: ${size[1]};
194
+ text-transform: uppercase;
195
+ letter-spacing: 0.04em;
196
+ `,
197
+ actionsRow: css`
198
+ display: flex;
199
+ flex-wrap: wrap;
200
+ gap: ${size[2]};
201
+ `,
202
+ actionButton: css`
203
+ display: inline-flex;
204
+ align-items: center;
205
+ gap: ${size[1]};
206
+ padding: ${size[1]} ${size[2]};
207
+ border-radius: ${border.radius.md};
208
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[500])};
209
+ background: ${t(colors.gray[200], colors.darkGray[600])};
210
+ color: ${t(colors.gray[900], colors.gray[100])};
211
+ font-size: ${fontSize.xs};
212
+ cursor: pointer;
213
+ user-select: none;
214
+ transition:
215
+ background 0.15s,
216
+ border-color 0.15s;
217
+ &:hover {
218
+ background: ${t(colors.gray[300], colors.darkGray[500])};
219
+ border-color: ${t(colors.gray[400], colors.darkGray[400])};
220
+ }
221
+ &:disabled {
222
+ opacity: 0.5;
223
+ cursor: not-allowed;
224
+ &:hover {
225
+ background: ${t(colors.gray[200], colors.darkGray[600])};
226
+ border-color: ${t(colors.gray[300], colors.darkGray[500])};
227
+ }
228
+ }
229
+ `,
230
+ actionDotBlue: css`
231
+ width: 6px;
232
+ height: 6px;
233
+ border-radius: 9999px;
234
+ background: ${colors.blue[400]};
235
+ `,
236
+ actionDotGreen: css`
237
+ width: 6px;
238
+ height: 6px;
239
+ border-radius: 9999px;
240
+ background: ${colors.green[400]};
241
+ `,
242
+ actionDotRed: css`
243
+ width: 6px;
244
+ height: 6px;
245
+ border-radius: 9999px;
246
+ background: ${colors.red[400]};
247
+ `,
248
+ actionDotYellow: css`
249
+ width: 6px;
250
+ height: 6px;
251
+ border-radius: 9999px;
252
+ background: ${colors.yellow[400]};
253
+ `,
254
+ actionDotOrange: css`
255
+ width: 6px;
256
+ height: 6px;
257
+ border-radius: 9999px;
258
+ background: ${colors.pink[400]};
259
+ `,
260
+ actionDotPurple: css`
261
+ width: 6px;
262
+ height: 6px;
263
+ border-radius: 9999px;
264
+ background: ${colors.purple[400]};
265
+ `,
266
+ infoGrid: css`
267
+ display: grid;
268
+ grid-template-columns: auto 1fr;
269
+ gap: ${size[1]};
270
+ row-gap: ${size[1]};
271
+ align-items: center;
272
+ `,
273
+ infoLabel: css`
274
+ color: ${t(colors.gray[600], colors.gray[400])};
275
+ font-size: ${fontSize.xs};
276
+ text-transform: uppercase;
277
+ letter-spacing: 0.05em;
278
+ `,
279
+ infoValueMono: css`
280
+ font-family: ${fontFamily.mono};
281
+ font-size: ${fontSize.xs};
282
+ color: ${t(colors.gray[900], colors.gray[100])};
283
+ word-break: break-all;
284
+ `,
285
+ noSelection: css`
286
+ flex: 1;
287
+ display: flex;
288
+ align-items: center;
289
+ justify-content: center;
290
+ color: ${t(colors.gray[500], colors.gray[500])};
291
+ font-style: italic;
292
+ text-align: center;
293
+ padding: ${size[4]};
294
+ `,
295
+ // Keep existing styles for backward compatibility
296
+ sectionContainer: css`
297
+ display: flex;
298
+ flex-wrap: wrap;
299
+ gap: ${size[4]};
300
+ `,
301
+ section: css`
302
+ background: ${t(colors.gray[100], colors.darkGray[800])};
303
+ border-radius: ${border.radius.lg};
304
+ box-shadow: ${tokens.shadow.md(
305
+ t(colors.gray[400] + alpha[80], colors.black + alpha[80])
306
+ )};
307
+ padding: ${size[4]};
308
+ margin-bottom: ${size[4]};
309
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
310
+ min-width: 0;
311
+ max-width: 33%;
312
+ max-height: fit-content;
313
+ `,
314
+ sectionHeader: css`
315
+ font-size: ${fontSize.lg};
316
+ font-weight: ${font.weight.bold};
317
+ margin-bottom: ${size[2]};
318
+ color: ${t(colors.blue[600], colors.blue[400])};
319
+ letter-spacing: 0.01em;
320
+ display: flex;
321
+ align-items: center;
322
+ gap: ${size[2]};
323
+ `,
324
+ sectionEmpty: css`
325
+ color: ${t(colors.gray[500], colors.gray[500])};
326
+ font-size: ${fontSize.sm};
327
+ font-style: italic;
328
+ margin: ${size[2]} 0;
329
+ `,
330
+ instanceList: css`
331
+ display: flex;
332
+ flex-direction: column;
333
+ gap: ${size[2]};
334
+ background: ${t(colors.gray[200], colors.darkGray[700])};
335
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
336
+ `,
337
+ instanceCard: css`
338
+ background: ${t(colors.gray[200], colors.darkGray[700])};
339
+ border-radius: ${border.radius.md};
340
+ padding: ${size[3]};
341
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
342
+ font-size: ${fontSize.sm};
343
+ color: ${t(colors.gray[900], colors.gray[100])};
344
+ font-family: ${fontFamily.mono};
345
+ overflow-x: auto;
346
+ transition:
347
+ box-shadow 0.3s,
348
+ background 0.3s;
349
+ `,
350
+ // Shell component styles
351
+ shell: {
352
+ sectionHeader: css`
353
+ padding: ${size[3]} ${size[4]};
354
+ font-size: ${fontSize.sm};
355
+ font-weight: ${font.weight.semibold};
356
+ color: ${t(colors.gray[100], colors.gray[200])};
357
+ text-transform: uppercase;
358
+ letter-spacing: 0.5px;
359
+ text-align: center;
360
+ background: ${t(colors.gray[700], colors.darkGray[600])};
361
+ border-bottom: 1px solid ${t(colors.gray[600], colors.darkGray[500])};
362
+ `,
363
+ filterContainer: css`
364
+ display: flex;
365
+ flex-direction: column;
366
+ gap: ${size[2]};
367
+ padding: ${size[3]};
368
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
369
+ `,
370
+ filterButtonsRow: css`
371
+ display: flex;
372
+ gap: ${size[1.5]};
373
+ flex-wrap: wrap;
374
+ `,
375
+ filterButton: css`
376
+ display: inline-flex;
377
+ align-items: center;
378
+ gap: ${size[1]};
379
+ padding: ${size[1]} ${size[2]};
380
+ border-radius: ${border.radius.md};
381
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[500])};
382
+ background: ${t(colors.gray[200], colors.darkGray[600])};
383
+ color: ${t(colors.gray[900], colors.gray[100])};
384
+ font-size: ${fontSize.xs};
385
+ cursor: pointer;
386
+ user-select: none;
387
+ transition:
388
+ background 0.15s,
389
+ border-color 0.15s;
390
+ &:hover {
391
+ background: ${t(colors.gray[300], colors.darkGray[500])};
392
+ border-color: ${t(colors.gray[400], colors.darkGray[400])};
393
+ }
394
+ `,
395
+ filterButtonActive: css`
396
+ background: ${colors.pink[400]};
397
+ color: ${colors.white};
398
+ border-color: ${colors.pink[400]};
399
+ &:hover {
400
+ background: ${colors.pink[500]};
401
+ border-color: ${colors.pink[500]};
402
+ }
403
+ `,
404
+ actionsRow: css`
405
+ display: flex;
406
+ gap: ${size[1.5]};
407
+ `,
408
+ clearAllButton: css`
409
+ flex: 1;
410
+ font-size: ${fontSize.xs};
411
+ `
412
+ },
413
+ // ConversationsList component styles
414
+ conversationsList: {
415
+ rowMain: css`
416
+ display: flex;
417
+ flex-direction: column;
418
+ gap: 4px;
419
+ flex: 1;
420
+ min-width: 0;
421
+ `,
422
+ rowTop: css`
423
+ display: flex;
424
+ align-items: center;
425
+ justify-content: space-between;
426
+ gap: ${size[2]};
427
+ `,
428
+ rowRight: css`
429
+ display: flex;
430
+ align-items: center;
431
+ gap: ${size[1]};
432
+ flex-shrink: 0;
433
+ `,
434
+ rowContent: css`
435
+ display: flex;
436
+ align-items: center;
437
+ gap: ${size[2]};
438
+ flex: 1;
439
+ `,
440
+ rowInfo: css`
441
+ display: flex;
442
+ align-items: center;
443
+ gap: ${size[1]};
444
+ min-width: 0;
445
+ flex: 1;
446
+ `,
447
+ typeDot: css`
448
+ width: 8px;
449
+ height: 8px;
450
+ border-radius: 50%;
451
+ `,
452
+ label: css`
453
+ font-weight: ${font.weight.semibold};
454
+ `,
455
+ toolCallsBadge: css`
456
+ display: flex;
457
+ align-items: center;
458
+ gap: 3px;
459
+ padding: 2px 6px;
460
+ border-radius: ${border.radius.sm};
461
+ background: oklch(0.35 0.1 280);
462
+ color: oklch(0.8 0.12 280);
463
+ font-size: ${fontSize.xs};
464
+ font-weight: ${font.weight.semibold};
465
+ `,
466
+ statusDot: css`
467
+ width: 6px;
468
+ height: 6px;
469
+ border-radius: 50%;
470
+ margin-left: auto;
471
+ `,
472
+ stats: css`
473
+ display: flex;
474
+ align-items: center;
475
+ gap: ${size[2]};
476
+ font-size: 10px;
477
+ opacity: 0.7;
478
+ flex-wrap: wrap;
479
+ `,
480
+ statItem: css`
481
+ display: flex;
482
+ align-items: center;
483
+ gap: 2px;
484
+ white-space: nowrap;
485
+ `,
486
+ tokensBadge: css`
487
+ display: flex;
488
+ align-items: center;
489
+ gap: 2px;
490
+ padding: 1px 5px;
491
+ border-radius: ${border.radius.sm};
492
+ background: oklch(0.35 0.08 220);
493
+ color: oklch(0.75 0.12 220);
494
+ font-size: 10px;
495
+ font-weight: ${font.weight.semibold};
496
+ white-space: nowrap;
497
+ `,
498
+ loadingIndicator: css`
499
+ font-size: 12px;
500
+ color: oklch(0.7 0.17 142);
501
+ animation: spin 1s linear infinite;
502
+ @keyframes spin {
503
+ from {
504
+ transform: rotate(0deg);
505
+ }
506
+ to {
507
+ transform: rotate(360deg);
508
+ }
509
+ }
510
+ `
511
+ },
512
+ // ConversationDetails component styles
513
+ conversationDetails: {
514
+ emptyState: css`
515
+ display: flex;
516
+ align-items: center;
517
+ justify-content: center;
518
+ height: 100%;
519
+ color: ${t(colors.gray[500], colors.gray[500])};
520
+ font-size: ${fontSize.sm};
521
+ `,
522
+ container: css`
523
+ display: flex;
524
+ flex-direction: column;
525
+ height: 100%;
526
+ `,
527
+ headerContent: css`
528
+ display: flex;
529
+ flex-direction: column;
530
+ gap: ${size[1]};
531
+ `,
532
+ headerRow: css`
533
+ display: flex;
534
+ align-items: center;
535
+ gap: ${size[3]};
536
+ `,
537
+ headerLabel: css`
538
+ font-weight: ${font.weight.semibold};
539
+ font-size: ${fontSize.sm};
540
+ `,
541
+ statusBadge: css`
542
+ font-size: ${fontSize.xs};
543
+ padding: 2px ${size[2]};
544
+ border-radius: ${border.radius.sm};
545
+ `,
546
+ statusActive: css`
547
+ background: ${colors.blue[500]}20;
548
+ color: ${colors.blue[500]};
549
+ `,
550
+ statusCompleted: css`
551
+ background: ${colors.green[500]}20;
552
+ color: ${colors.green[500]};
553
+ `,
554
+ statusError: css`
555
+ background: ${colors.red[500]}20;
556
+ color: ${colors.red[500]};
557
+ `,
558
+ metaInfo: css`
559
+ font-size: ${fontSize.xs};
560
+ color: ${t(colors.gray[600], colors.gray[400])};
561
+ `,
562
+ usageInfo: css`
563
+ font-size: ${fontSize.xs};
564
+ color: ${t(colors.gray[600], colors.gray[400])};
565
+ display: flex;
566
+ align-items: center;
567
+ gap: ${size[2]};
568
+ `,
569
+ usageLabel: css`
570
+ font-weight: ${font.weight.semibold};
571
+ color: ${colors.blue[500]};
572
+ `,
573
+ usageBold: css`
574
+ font-weight: ${font.weight.semibold};
575
+ `,
576
+ toolsRow: css`
577
+ display: flex;
578
+ align-items: flex-start;
579
+ gap: ${size[2]};
580
+ margin-top: ${size[2]};
581
+ `,
582
+ toolsLabel: css`
583
+ font-size: ${fontSize.sm};
584
+ flex-shrink: 0;
585
+ `,
586
+ optionsRow: css`
587
+ display: flex;
588
+ align-items: flex-start;
589
+ gap: ${size[2]};
590
+ margin-top: ${size[1]};
591
+ `,
592
+ optionsLabel: css`
593
+ font-size: ${fontSize.xs};
594
+ color: ${t(colors.gray[600], colors.gray[400])};
595
+ flex-shrink: 0;
596
+ white-space: nowrap;
597
+ `,
598
+ optionsCompact: css`
599
+ display: flex;
600
+ flex-wrap: wrap;
601
+ gap: 4px;
602
+ `,
603
+ optionBadge: css`
604
+ display: inline-flex;
605
+ align-items: center;
606
+ padding: 1px 6px;
607
+ background: ${t(colors.gray[200], colors.darkGray[700])};
608
+ color: ${t(colors.gray[700], colors.gray[300])};
609
+ border-radius: ${border.radius.sm};
610
+ font-size: 10px;
611
+ font-family: ${fontFamily.mono};
612
+ max-width: 200px;
613
+ overflow: hidden;
614
+ text-overflow: ellipsis;
615
+ white-space: nowrap;
616
+ `,
617
+ toggleButton: css`
618
+ background: transparent;
619
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
620
+ color: ${t(colors.gray[600], colors.gray[400])};
621
+ padding: ${size[1]} ${size[2]};
622
+ border-radius: ${border.radius.sm};
623
+ font-size: ${fontSize.xs};
624
+ cursor: pointer;
625
+ transition: all 0.15s ease;
626
+ margin-top: ${size[2]};
627
+ &:hover {
628
+ background: ${t(colors.gray[100], colors.darkGray[700])};
629
+ color: ${t(colors.gray[700], colors.gray[300])};
630
+ }
631
+ `,
632
+ extendedInfo: css`
633
+ margin-top: ${size[3]};
634
+ padding: ${size[3]};
635
+ background: ${t(colors.gray[50], colors.darkGray[800])};
636
+ border-radius: ${border.radius.md};
637
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
638
+ `,
639
+ infoSection: css`
640
+ margin-bottom: ${size[3]};
641
+ &:last-child {
642
+ margin-bottom: 0;
643
+ }
644
+ `,
645
+ infoLabel: css`
646
+ font-weight: ${font.weight.semibold};
647
+ font-size: ${fontSize.xs};
648
+ color: ${t(colors.gray[700], colors.gray[300])};
649
+ display: block;
650
+ margin-bottom: ${size[1]};
651
+ `,
652
+ toolsList: css`
653
+ display: flex;
654
+ flex-wrap: wrap;
655
+ gap: ${size[1]};
656
+ `,
657
+ toolBadge: css`
658
+ display: inline-flex;
659
+ align-items: center;
660
+ padding: 2px ${size[2]};
661
+ background: ${colors.purple[500]}20;
662
+ color: ${colors.purple[400]};
663
+ border-radius: ${border.radius.sm};
664
+ font-size: ${fontSize.xs};
665
+ font-family: ${fontFamily.mono};
666
+ `,
667
+ jsonPreview: css`
668
+ margin: 0;
669
+ padding: ${size[2]};
670
+ background: ${t(colors.gray[100], colors.darkGray[900])};
671
+ border-radius: ${border.radius.sm};
672
+ font-size: ${fontSize.xs};
673
+ font-family: ${fontFamily.mono};
674
+ overflow-x: auto;
675
+ max-height: 200px;
676
+ overflow-y: auto;
677
+ color: ${t(colors.gray[700], colors.gray[300])};
678
+ white-space: pre-wrap;
679
+ word-break: break-word;
680
+ `,
681
+ tabsContainer: css`
682
+ display: flex;
683
+ gap: ${size[2]};
684
+ padding: ${size[3]};
685
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
686
+ `,
687
+ tabButtonActive: css`
688
+ background: ${colors.pink[400]};
689
+ color: ${colors.white};
690
+ border-color: ${colors.pink[400]};
691
+ `,
692
+ contentArea: css`
693
+ flex: 1;
694
+ overflow: auto;
695
+ padding: ${size[3]};
696
+ `,
697
+ emptyMessages: css`
698
+ padding: ${size[6]};
699
+ color: ${t(colors.gray[500], colors.gray[500])};
700
+ font-size: ${fontSize.sm};
701
+ text-align: center;
702
+ `,
703
+ messagesList: css`
704
+ display: flex;
705
+ flex-direction: column;
706
+ gap: ${size[3]};
707
+ `,
708
+ messageCard: css`
709
+ border-radius: ${border.radius.lg};
710
+ overflow: hidden;
711
+ `,
712
+ messageCardUser: css`
713
+ padding: ${size[4]};
714
+ border: 1.5px solid oklch(0.45 0.12 260);
715
+ `,
716
+ messageCardAssistant: css`
717
+ padding: ${size[4]};
718
+ border: 1.5px solid oklch(0.45 0.12 142);
719
+ `,
720
+ messageCardClient: css`
721
+ border: 2px solid oklch(0.45 0.15 142);
722
+ `,
723
+ messageCardServer: css`
724
+ border: 2px solid oklch(0.45 0.12 45);
725
+ `,
726
+ messageHeader: css`
727
+ display: flex;
728
+ align-items: center;
729
+ gap: 10px;
730
+ margin-bottom: ${size[3]};
731
+ `,
732
+ avatarUser: css`
733
+ width: 28px;
734
+ height: 28px;
735
+ border-radius: 50%;
736
+ background: oklch(0.5 0.2 260);
737
+ display: flex;
738
+ align-items: center;
739
+ justify-content: center;
740
+ font-weight: ${font.weight.bold};
741
+ font-size: ${fontSize.sm};
742
+ color: ${colors.white};
743
+ flex-shrink: 0;
744
+ `,
745
+ avatarAssistant: css`
746
+ width: 28px;
747
+ height: 28px;
748
+ border-radius: 50%;
749
+ background: oklch(0.5 0.2 142);
750
+ display: flex;
751
+ align-items: center;
752
+ justify-content: center;
753
+ font-weight: ${font.weight.bold};
754
+ font-size: ${fontSize.sm};
755
+ color: ${colors.white};
756
+ flex-shrink: 0;
757
+ `,
758
+ avatarClient: css`
759
+ width: 28px;
760
+ height: 28px;
761
+ border-radius: 50%;
762
+ background: oklch(0.5 0.22 142);
763
+ display: flex;
764
+ align-items: center;
765
+ justify-content: center;
766
+ font-weight: ${font.weight.bold};
767
+ font-size: ${fontSize.sm};
768
+ color: ${colors.white};
769
+ flex-shrink: 0;
770
+ `,
771
+ avatarServer: css`
772
+ width: 28px;
773
+ height: 28px;
774
+ border-radius: 50%;
775
+ background: oklch(0.55 0.18 45);
776
+ display: flex;
777
+ align-items: center;
778
+ justify-content: center;
779
+ font-weight: ${font.weight.bold};
780
+ font-size: ${fontSize.sm};
781
+ color: ${colors.white};
782
+ flex-shrink: 0;
783
+ `,
784
+ roleLabel: css`
785
+ flex: 1;
786
+ `,
787
+ roleLabelUser: css`
788
+ font-weight: ${font.weight.semibold};
789
+ font-size: ${fontSize.sm};
790
+ color: oklch(0.7 0.15 260);
791
+ text-transform: capitalize;
792
+ `,
793
+ roleLabelAssistant: css`
794
+ font-weight: ${font.weight.semibold};
795
+ font-size: ${fontSize.sm};
796
+ color: oklch(0.7 0.15 142);
797
+ text-transform: capitalize;
798
+ `,
799
+ roleLabelClient: css`
800
+ font-weight: ${font.weight.semibold};
801
+ font-size: ${fontSize.sm};
802
+ color: oklch(0.75 0.18 142);
803
+ text-transform: capitalize;
804
+ `,
805
+ roleLabelServer: css`
806
+ font-weight: ${font.weight.semibold};
807
+ font-size: ${fontSize.sm};
808
+ color: oklch(0.75 0.15 45);
809
+ text-transform: capitalize;
810
+ `,
811
+ sourceBanner: css`
812
+ display: flex;
813
+ align-items: center;
814
+ gap: 8px;
815
+ padding: 6px 12px;
816
+ font-size: 10px;
817
+ font-weight: ${font.weight.medium};
818
+ text-transform: uppercase;
819
+ letter-spacing: 0.5px;
820
+ `,
821
+ sourceBannerClient: css`
822
+ background: oklch(0.25 0.04 142);
823
+ color: oklch(0.7 0.08 142);
824
+ `,
825
+ sourceBannerServer: css`
826
+ background: oklch(0.25 0.04 45);
827
+ color: oklch(0.7 0.06 45);
828
+ `,
829
+ sourceBannerIcon: css`
830
+ font-size: 14px;
831
+ `,
832
+ sourceBannerText: css`
833
+ flex: 1;
834
+ `,
835
+ messageCardContent: css`
836
+ padding: ${size[4]};
837
+ padding-top: ${size[3]};
838
+ `,
839
+ sourceBadge: css`
840
+ font-size: 10px;
841
+ padding: 2px 6px;
842
+ border-radius: 4px;
843
+ font-family: ${fontFamily.mono};
844
+ font-weight: ${font.weight.medium};
845
+ `,
846
+ sourceBadgeClient: css`
847
+ background: oklch(0.25 0.08 260);
848
+ color: oklch(0.75 0.12 260);
849
+ `,
850
+ sourceBadgeServer: css`
851
+ background: oklch(0.25 0.08 45);
852
+ color: oklch(0.75 0.12 45);
853
+ `,
854
+ timestamp: css`
855
+ font-size: 10px;
856
+ color: oklch(0.6 0.05 260);
857
+ font-family: ${fontFamily.mono};
858
+ `,
859
+ messageUsage: css`
860
+ display: flex;
861
+ align-items: center;
862
+ gap: 4px;
863
+ font-size: 10px;
864
+ font-family: ${fontFamily.mono};
865
+ color: oklch(0.65 0.12 142);
866
+ margin-left: auto;
867
+ padding: 2px 6px;
868
+ background: oklch(0.2 0.03 142);
869
+ border-radius: 4px;
870
+ `,
871
+ messageUsageIcon: css`
872
+ font-size: 10px;
873
+ `,
874
+ thinkingDetails: css`
875
+ margin-bottom: ${size[2]};
876
+ border: 1px solid oklch(0.35 0.1 280);
877
+ border-radius: 6px;
878
+ background: oklch(0.18 0.02 280);
879
+ overflow: hidden;
880
+ `,
881
+ thinkingSummary: css`
882
+ padding: ${size[2]};
883
+ cursor: pointer;
884
+ font-size: ${fontSize.sm};
885
+ color: oklch(0.75 0.1 280);
886
+ font-weight: ${font.weight.semibold};
887
+ &:hover {
888
+ background: oklch(0.22 0.03 280);
889
+ }
890
+ `,
891
+ thinkingContent: css`
892
+ padding: ${size[2]};
893
+ font-size: ${fontSize.xs};
894
+ line-height: 1.5;
895
+ white-space: pre-wrap;
896
+ word-break: break-word;
897
+ color: oklch(0.7 0.05 280);
898
+ font-family: ${fontFamily.mono};
899
+ border-top: 1px solid oklch(0.3 0.05 280);
900
+ max-height: 300px;
901
+ overflow-y: auto;
902
+ `,
903
+ messageContent: css`
904
+ font-size: ${fontSize.sm};
905
+ line-height: 1.6;
906
+ white-space: pre-wrap;
907
+ word-break: break-word;
908
+ color: oklch(0.85 0.02 260);
909
+ font-family:
910
+ system-ui,
911
+ -apple-system,
912
+ sans-serif;
913
+ `,
914
+ toolCallsContainer: css`
915
+ margin-top: ${size[3]};
916
+ display: flex;
917
+ flex-direction: column;
918
+ gap: 8px;
919
+ `,
920
+ toolCall: css`
921
+ border-radius: 8px;
922
+ font-size: ${fontSize.xs};
923
+ overflow: hidden;
924
+ `,
925
+ toolCallNormal: css`
926
+ background: oklch(0.22 0.02 260);
927
+ border: 1px solid oklch(0.3 0.05 280);
928
+ `,
929
+ toolCallApproval: css`
930
+ background: oklch(0.22 0.08 60);
931
+ border: 1px solid oklch(0.4 0.12 60);
932
+ `,
933
+ toolCallHeader: css`
934
+ display: flex;
935
+ align-items: center;
936
+ gap: 6px;
937
+ padding: 10px 12px;
938
+ cursor: pointer;
939
+ list-style: none;
940
+ &::-webkit-details-marker {
941
+ display: none;
942
+ }
943
+ &::before {
944
+ content: '▶';
945
+ font-size: 10px;
946
+ color: oklch(0.6 0.1 280);
947
+ transition: transform 0.2s ease;
948
+ }
949
+ details[open] > &::before {
950
+ transform: rotate(90deg);
951
+ }
952
+ &:hover {
953
+ background: oklch(0.25 0.04 280);
954
+ }
955
+ `,
956
+ toolCallContent: css`
957
+ padding: ${size[2]} ${size[3]} ${size[3]};
958
+ border-top: 1px solid oklch(0.3 0.05 280);
959
+ `,
960
+ toolCallName: css`
961
+ font-weight: ${font.weight.semibold};
962
+ `,
963
+ toolCallNameNormal: css`
964
+ color: oklch(0.75 0.15 280);
965
+ `,
966
+ toolCallNameApproval: css`
967
+ color: oklch(0.75 0.15 60);
968
+ `,
969
+ toolStateBadge: css`
970
+ font-size: 10px;
971
+ padding: 2px 6px;
972
+ border-radius: 3px;
973
+ `,
974
+ toolStateBadgeNormal: css`
975
+ background: oklch(0.35 0.1 280);
976
+ color: oklch(0.8 0.1 280);
977
+ `,
978
+ toolStateBadgeApproval: css`
979
+ background: oklch(0.35 0.12 60);
980
+ color: oklch(0.85 0.1 60);
981
+ `,
982
+ approvalRequiredBadge: css`
983
+ font-size: 10px;
984
+ padding: 2px 6px;
985
+ border-radius: 3px;
986
+ background: oklch(0.45 0.15 30);
987
+ color: oklch(0.95 0.05 60);
988
+ font-weight: ${font.weight.semibold};
989
+ `,
990
+ toolArguments: css`
991
+ font-family: ${fontFamily.mono};
992
+ font-size: ${fontSize.xs};
993
+ color: oklch(0.7 0.05 260);
994
+ white-space: pre-wrap;
995
+ word-break: break-all;
996
+ `,
997
+ toolSection: css`
998
+ margin-top: ${size[2]};
999
+ border-top: 1px solid oklch(0.28 0.03 260);
1000
+ padding-top: ${size[2]};
1001
+ `,
1002
+ toolSectionLabel: css`
1003
+ font-size: 10px;
1004
+ font-weight: ${font.weight.semibold};
1005
+ color: oklch(0.6 0.08 260);
1006
+ text-transform: uppercase;
1007
+ letter-spacing: 0.05em;
1008
+ margin-bottom: ${size[1]};
1009
+ `,
1010
+ toolJsonContainer: css`
1011
+ font-family: ${fontFamily.mono};
1012
+ font-size: ${fontSize.xs};
1013
+ color: oklch(0.8 0.05 260);
1014
+ background: oklch(0.18 0.02 260);
1015
+ border-radius: 4px;
1016
+ padding: ${size[4]};
1017
+ padding-left: ${size[8]};
1018
+ `,
1019
+ chunksDetails: css`
1020
+ margin-top: ${size[3]};
1021
+ `,
1022
+ chunksSummary: css`
1023
+ cursor: pointer;
1024
+ font-size: ${fontSize.xs};
1025
+ font-weight: ${font.weight.semibold};
1026
+ color: oklch(0.65 0.08 260);
1027
+ padding: ${size[2]};
1028
+ background: oklch(0.2 0.02 260);
1029
+ border-radius: 6px;
1030
+ border: 1px solid oklch(0.28 0.03 260);
1031
+ user-select: none;
1032
+ list-style: none;
1033
+ &::-webkit-details-marker {
1034
+ display: none;
1035
+ }
1036
+ &::marker {
1037
+ display: none;
1038
+ }
1039
+ details[open] > & .chunks-arrow {
1040
+ transform: rotate(90deg);
1041
+ }
1042
+ `,
1043
+ chunksSummaryRow: css`
1044
+ display: flex;
1045
+ align-items: center;
1046
+ gap: ${size[1]};
1047
+ `,
1048
+ chunksSummaryArrow: css`
1049
+ font-size: 8px;
1050
+ transition: transform 0.15s ease;
1051
+ color: oklch(0.5 0.05 260);
1052
+ details[open] > summary > div > & {
1053
+ transform: rotate(90deg);
1054
+ }
1055
+ `,
1056
+ chunksSummaryTitle: css`
1057
+ margin-right: ${size[1]};
1058
+ `,
1059
+ chunksSummaryContent: css`
1060
+ display: flex;
1061
+ flex-direction: column;
1062
+ gap: 6px;
1063
+ `,
1064
+ chunksSummaryHeader: css`
1065
+ display: flex;
1066
+ align-items: center;
1067
+ gap: ${size[2]};
1068
+ `,
1069
+ chunkBadge: css`
1070
+ padding: 2px 6px;
1071
+ border-radius: 3px;
1072
+ font-size: 9px;
1073
+ `,
1074
+ chunkBadgeTool: css`
1075
+ background: oklch(0.3 0.1 280);
1076
+ color: oklch(0.75 0.12 280);
1077
+ `,
1078
+ chunkBadgeError: css`
1079
+ background: oklch(0.3 0.15 25);
1080
+ color: oklch(0.75 0.2 25);
1081
+ `,
1082
+ chunkBadgeSuccess: css`
1083
+ background: oklch(0.3 0.1 142);
1084
+ color: oklch(0.75 0.15 142);
1085
+ `,
1086
+ chunkBadgeApproval: css`
1087
+ background: oklch(0.3 0.15 50);
1088
+ color: oklch(0.75 0.2 50);
1089
+ `,
1090
+ chunkBadgeCount: css`
1091
+ background: oklch(0.3 0.08 260);
1092
+ color: oklch(0.75 0.1 260);
1093
+ font-weight: ${font.weight.semibold};
1094
+ `,
1095
+ contentPreview: css`
1096
+ font-family: ${fontFamily.mono};
1097
+ font-size: 10px;
1098
+ color: oklch(0.75 0.05 260);
1099
+ white-space: pre-wrap;
1100
+ word-break: break-word;
1101
+ max-width: 100%;
1102
+ font-weight: ${font.weight.normal};
1103
+ margin-top: 2px;
1104
+ `,
1105
+ chunksContainer: css`
1106
+ margin-top: ${size[2]};
1107
+ padding: ${size[2]};
1108
+ background: oklch(0.18 0.02 260);
1109
+ border-radius: 6px;
1110
+ border: 1px solid oklch(0.25 0.03 260);
1111
+ `,
1112
+ chunksList: css`
1113
+ display: flex;
1114
+ flex-direction: column;
1115
+ gap: ${size[1]};
1116
+ `,
1117
+ chunkItem: css`
1118
+ padding: 6px ${size[2]};
1119
+ border-radius: ${border.radius.sm};
1120
+ background: oklch(0.22 0.02 260);
1121
+ border: 1px solid oklch(0.28 0.03 260);
1122
+ font-size: 10px;
1123
+ `,
1124
+ chunkItemLarge: css`
1125
+ padding: ${size[2]} 10px;
1126
+ border-radius: 6px;
1127
+ background: oklch(0.22 0.02 260);
1128
+ border: 1px solid oklch(0.28 0.03 260);
1129
+ font-size: ${fontSize.xs};
1130
+ `,
1131
+ chunkHeader: css`
1132
+ display: flex;
1133
+ align-items: center;
1134
+ gap: 6px;
1135
+ margin-bottom: ${size[1]};
1136
+ `,
1137
+ chunkHeaderLarge: css`
1138
+ display: flex;
1139
+ align-items: center;
1140
+ gap: ${size[2]};
1141
+ margin-bottom: 6px;
1142
+ `,
1143
+ chunkNumber: css`
1144
+ font-size: 9px;
1145
+ font-weight: ${font.weight.semibold};
1146
+ color: oklch(0.6 0.05 260);
1147
+ min-width: 24px;
1148
+ `,
1149
+ chunkNumberLarge: css`
1150
+ font-size: 10px;
1151
+ font-weight: ${font.weight.semibold};
1152
+ color: oklch(0.6 0.05 260);
1153
+ min-width: 32px;
1154
+ `,
1155
+ chunkTypeBadge: css`
1156
+ display: flex;
1157
+ align-items: center;
1158
+ gap: 3px;
1159
+ `,
1160
+ chunkTypeBadgeLarge: css`
1161
+ display: flex;
1162
+ align-items: center;
1163
+ gap: ${size[1]};
1164
+ `,
1165
+ chunkTypeDot: css`
1166
+ width: 5px;
1167
+ height: 5px;
1168
+ border-radius: 50%;
1169
+ `,
1170
+ chunkTypeDotLarge: css`
1171
+ width: 6px;
1172
+ height: 6px;
1173
+ border-radius: 50%;
1174
+ `,
1175
+ chunkTypeLabel: css`
1176
+ font-weight: ${font.weight.semibold};
1177
+ color: oklch(0.7 0.08 260);
1178
+ `,
1179
+ chunkTypeLabelLarge: css`
1180
+ font-weight: ${font.weight.semibold};
1181
+ color: oklch(0.75 0.08 260);
1182
+ `,
1183
+ chunkToolBadge: css`
1184
+ padding: 1px ${size[1]};
1185
+ border-radius: 3px;
1186
+ background: oklch(0.3 0.1 280);
1187
+ color: oklch(0.75 0.12 280);
1188
+ font-size: 9px;
1189
+ font-weight: ${font.weight.semibold};
1190
+ `,
1191
+ chunkToolBadgeLarge: css`
1192
+ padding: 2px 6px;
1193
+ border-radius: 3px;
1194
+ background: oklch(0.3 0.1 280);
1195
+ color: oklch(0.75 0.12 280);
1196
+ font-size: 10px;
1197
+ font-weight: ${font.weight.semibold};
1198
+ `,
1199
+ chunkTimestamp: css`
1200
+ margin-left: auto;
1201
+ color: ${t(colors.gray[500], colors.gray[500])};
1202
+ font-size: 9px;
1203
+ `,
1204
+ chunkTimestampLarge: css`
1205
+ margin-left: auto;
1206
+ color: ${t(colors.gray[500], colors.gray[500])};
1207
+ font-size: 10px;
1208
+ `,
1209
+ rawJsonButton: css`
1210
+ padding: 1px ${size[1]};
1211
+ border-radius: 2px;
1212
+ border: 1px solid oklch(0.32 0.05 260);
1213
+ color: oklch(0.7 0.08 260);
1214
+ font-size: 8px;
1215
+ cursor: pointer;
1216
+ font-family: ${fontFamily.mono};
1217
+ font-weight: ${font.weight.semibold};
1218
+ `,
1219
+ rawJsonButtonInactive: css`
1220
+ background: oklch(0.28 0.03 260);
1221
+ `,
1222
+ rawJsonButtonActive: css`
1223
+ background: oklch(0.35 0.1 260);
1224
+ `,
1225
+ rawJsonButtonLarge: css`
1226
+ padding: 2px 6px;
1227
+ border-radius: 3px;
1228
+ border: 1px solid oklch(0.32 0.05 260);
1229
+ color: oklch(0.7 0.08 260);
1230
+ font-size: 10px;
1231
+ cursor: pointer;
1232
+ font-family: ${fontFamily.mono};
1233
+ font-weight: ${font.weight.semibold};
1234
+ `,
1235
+ chunkContent: css`
1236
+ font-family: ${fontFamily.mono};
1237
+ white-space: pre-wrap;
1238
+ word-break: break-word;
1239
+ padding: ${size[1]} 6px;
1240
+ background: oklch(0.2 0.01 260);
1241
+ border-radius: 3px;
1242
+ color: oklch(0.8 0.05 260);
1243
+ font-size: 10px;
1244
+ `,
1245
+ chunkContentLarge: css`
1246
+ font-family: ${fontFamily.mono};
1247
+ white-space: pre-wrap;
1248
+ word-break: break-word;
1249
+ padding: 6px ${size[2]};
1250
+ background: oklch(0.2 0.01 260);
1251
+ border-radius: ${border.radius.sm};
1252
+ color: oklch(0.8 0.05 260);
1253
+ font-size: ${fontSize.xs};
1254
+ `,
1255
+ chunkError: css`
1256
+ color: oklch(0.65 0.2 25);
1257
+ font-family: ${fontFamily.mono};
1258
+ padding: ${size[1]} 6px;
1259
+ background: oklch(0.2 0.05 25);
1260
+ border-radius: 3px;
1261
+ `,
1262
+ chunkErrorLarge: css`
1263
+ color: oklch(0.65 0.2 25);
1264
+ font-family: ${fontFamily.mono};
1265
+ padding: 6px ${size[2]};
1266
+ background: oklch(0.2 0.05 25);
1267
+ border-radius: ${border.radius.sm};
1268
+ `,
1269
+ chunkFinish: css`
1270
+ color: oklch(0.7 0.12 142);
1271
+ padding: ${size[1]} 6px;
1272
+ background: oklch(0.2 0.03 142);
1273
+ border-radius: 3px;
1274
+ font-weight: ${font.weight.semibold};
1275
+ `,
1276
+ chunkFinishLarge: css`
1277
+ color: oklch(0.7 0.12 142);
1278
+ padding: 6px ${size[2]};
1279
+ background: oklch(0.2 0.03 142);
1280
+ border-radius: ${border.radius.sm};
1281
+ font-weight: ${font.weight.semibold};
1282
+ `,
1283
+ chunkApproval: css`
1284
+ padding: 6px ${size[2]};
1285
+ background: oklch(0.25 0.12 50);
1286
+ border-radius: ${border.radius.sm};
1287
+ border: 1px solid oklch(0.35 0.15 50);
1288
+ `,
1289
+ chunkApprovalLarge: css`
1290
+ padding: ${size[2]};
1291
+ background: oklch(0.25 0.12 50);
1292
+ border-radius: 6px;
1293
+ border: 1px solid oklch(0.35 0.15 50);
1294
+ `,
1295
+ chunkApprovalTitle: css`
1296
+ color: oklch(0.75 0.15 50);
1297
+ font-weight: ${font.weight.semibold};
1298
+ margin-bottom: ${size[1]};
1299
+ font-size: 10px;
1300
+ `,
1301
+ chunkApprovalTitleLarge: css`
1302
+ color: oklch(0.75 0.15 50);
1303
+ font-weight: ${font.weight.semibold};
1304
+ margin-bottom: 6px;
1305
+ font-size: ${fontSize.xs};
1306
+ `,
1307
+ chunkApprovalInput: css`
1308
+ font-family: ${fontFamily.mono};
1309
+ font-size: 9px;
1310
+ color: oklch(0.7 0.08 50);
1311
+ white-space: pre-wrap;
1312
+ word-break: break-word;
1313
+ `,
1314
+ chunkApprovalInputLarge: css`
1315
+ font-family: ${fontFamily.mono};
1316
+ font-size: 10px;
1317
+ color: oklch(0.7 0.08 50);
1318
+ white-space: pre-wrap;
1319
+ word-break: break-word;
1320
+ `,
1321
+ chunkToolCall: css`
1322
+ padding: ${size[2]} ${size[3]};
1323
+ background: oklch(0.22 0.08 280);
1324
+ border-radius: ${border.radius.sm};
1325
+ border: 1px solid oklch(0.32 0.1 280);
1326
+ margin-top: ${size[1]};
1327
+ `,
1328
+ chunkToolCallHeader: css`
1329
+ display: flex;
1330
+ align-items: center;
1331
+ justify-content: space-between;
1332
+ margin-bottom: ${size[2]};
1333
+ `,
1334
+ chunkToolCallTitle: css`
1335
+ color: oklch(0.75 0.12 280);
1336
+ font-weight: ${font.weight.semibold};
1337
+ font-size: 10px;
1338
+ `,
1339
+ chunkToolResult: css`
1340
+ padding: ${size[2]} ${size[3]};
1341
+ background: oklch(0.22 0.08 160);
1342
+ border-radius: ${border.radius.sm};
1343
+ border: 1px solid oklch(0.32 0.1 160);
1344
+ margin-top: ${size[1]};
1345
+ `,
1346
+ chunkToolResultHeader: css`
1347
+ display: flex;
1348
+ align-items: center;
1349
+ justify-content: space-between;
1350
+ margin-bottom: ${size[2]};
1351
+ `,
1352
+ chunkToolResultTitle: css`
1353
+ color: oklch(0.75 0.12 160);
1354
+ font-weight: ${font.weight.semibold};
1355
+ font-size: 10px;
1356
+ `,
1357
+ rawJson: css`
1358
+ font-family: ${fontFamily.mono};
1359
+ white-space: pre-wrap;
1360
+ word-break: break-word;
1361
+ padding: 6px;
1362
+ background: oklch(0.16 0.01 260);
1363
+ border-radius: 3px;
1364
+ color: oklch(0.75 0.08 260);
1365
+ font-size: 9px;
1366
+ max-height: 200px;
1367
+ overflow-y: auto;
1368
+ `,
1369
+ rawJsonLarge: css`
1370
+ font-family: ${fontFamily.mono};
1371
+ white-space: pre-wrap;
1372
+ word-break: break-word;
1373
+ padding: ${size[2]};
1374
+ background: oklch(0.16 0.01 260);
1375
+ border-radius: ${border.radius.sm};
1376
+ color: oklch(0.75 0.08 260);
1377
+ font-size: 10px;
1378
+ max-height: 300px;
1379
+ overflow-y: auto;
1380
+ `,
1381
+ noChunks: css`
1382
+ padding: ${size[3]};
1383
+ color: ${t(colors.gray[500], colors.gray[500])};
1384
+ font-size: ${fontSize.xs};
1385
+ `,
1386
+ streamContainer: css`
1387
+ padding: ${size[3]};
1388
+ background: oklch(0.18 0.02 260);
1389
+ border-radius: ${border.radius.lg};
1390
+ border: 1px solid oklch(0.25 0.03 260);
1391
+ `,
1392
+ streamHeader: css`
1393
+ margin-bottom: ${size[3]};
1394
+ padding-bottom: ${size[2]};
1395
+ border-bottom: 1px solid oklch(0.25 0.03 260);
1396
+ `,
1397
+ streamHeaderRow: css`
1398
+ display: flex;
1399
+ align-items: center;
1400
+ gap: ${size[2]};
1401
+ margin-bottom: ${size[1]};
1402
+ `,
1403
+ streamTitle: css`
1404
+ font-weight: ${font.weight.semibold};
1405
+ font-size: ${fontSize.sm};
1406
+ color: oklch(0.8 0.05 260);
1407
+ `,
1408
+ streamSubtitle: css`
1409
+ font-size: ${fontSize.xs};
1410
+ color: ${t(colors.gray[500], colors.gray[500])};
1411
+ `,
1412
+ messageGroups: css`
1413
+ display: flex;
1414
+ flex-direction: column;
1415
+ gap: ${size[2]};
1416
+ `,
1417
+ messageGroupDetails: css`
1418
+ margin-bottom: ${size[1]};
1419
+ `,
1420
+ messageGroupSummary: css`
1421
+ cursor: pointer;
1422
+ font-size: ${fontSize.xs};
1423
+ font-weight: ${font.weight.semibold};
1424
+ color: oklch(0.65 0.08 260);
1425
+ padding: 10px;
1426
+ background: oklch(0.2 0.02 260);
1427
+ border-radius: 6px;
1428
+ border: 1px solid oklch(0.28 0.03 260);
1429
+ user-select: none;
1430
+ `,
1431
+ messageGroupContent: css`
1432
+ display: flex;
1433
+ flex-direction: column;
1434
+ gap: 6px;
1435
+ `,
1436
+ messageGroupHeader: css`
1437
+ display: flex;
1438
+ align-items: center;
1439
+ gap: ${size[2]};
1440
+ `,
1441
+ messageId: css`
1442
+ font-family: ${fontFamily.mono};
1443
+ font-size: 9px;
1444
+ color: oklch(0.6 0.05 260);
1445
+ font-weight: ${font.weight.normal};
1446
+ `,
1447
+ // Embedding and Summarize operation styles
1448
+ operationCard: css`
1449
+ padding: ${size[4]};
1450
+ border-radius: ${border.radius.lg};
1451
+ background: linear-gradient(
1452
+ 135deg,
1453
+ oklch(0.25 0.04 200) 0%,
1454
+ oklch(0.22 0.03 200) 100%
1455
+ );
1456
+ border: 1.5px solid oklch(0.5 0.15 200);
1457
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
1458
+ `,
1459
+ operationHeader: css`
1460
+ display: flex;
1461
+ align-items: center;
1462
+ gap: ${size[2]};
1463
+ margin-bottom: ${size[3]};
1464
+ `,
1465
+ operationIcon: css`
1466
+ font-size: ${fontSize.lg};
1467
+ `,
1468
+ operationTitle: css`
1469
+ font-weight: ${font.weight.semibold};
1470
+ font-size: ${fontSize.sm};
1471
+ color: oklch(0.85 0.1 200);
1472
+ flex: 1;
1473
+ `,
1474
+ operationStatus: css`
1475
+ font-size: ${fontSize.xs};
1476
+ padding: 2px ${size[2]};
1477
+ border-radius: ${border.radius.sm};
1478
+ `,
1479
+ operationStatusCompleted: css`
1480
+ background: ${colors.green[500]}20;
1481
+ color: ${colors.green[400]};
1482
+ `,
1483
+ operationStatusPending: css`
1484
+ background: ${colors.yellow[500]}20;
1485
+ color: ${colors.yellow[400]};
1486
+ `,
1487
+ durationBadge: css`
1488
+ font-size: ${fontSize.xs};
1489
+ padding: 2px ${size[2]};
1490
+ border-radius: ${border.radius.sm};
1491
+ background: oklch(0.3 0.1 280);
1492
+ color: oklch(0.8 0.1 280);
1493
+ font-family: ${fontFamily.mono};
1494
+ `,
1495
+ operationDetails: css`
1496
+ display: flex;
1497
+ flex-direction: column;
1498
+ gap: ${size[2]};
1499
+ `,
1500
+ operationDetail: css`
1501
+ display: flex;
1502
+ align-items: center;
1503
+ gap: ${size[2]};
1504
+ font-size: ${fontSize.xs};
1505
+ `,
1506
+ operationLabel: css`
1507
+ color: oklch(0.65 0.08 200);
1508
+ font-weight: ${font.weight.semibold};
1509
+ min-width: 70px;
1510
+ `,
1511
+ operationValue: css`
1512
+ color: oklch(0.8 0.05 200);
1513
+ font-family: ${fontFamily.mono};
1514
+ `,
1515
+ // Iteration badge
1516
+ iterationBadge: css`
1517
+ font-size: ${fontSize.xs};
1518
+ padding: 2px ${size[2]};
1519
+ border-radius: ${border.radius.sm};
1520
+ background: ${colors.purple[500]}20;
1521
+ color: ${colors.purple[400]};
1522
+ font-weight: ${font.weight.semibold};
1523
+ `
1524
+ }
1525
+ };
1526
+ };
1527
+ function useStyles() {
1528
+ const { theme } = useTheme();
1529
+ const [styles, setStyles] = createSignal(stylesFactory(theme()));
1530
+ createEffect(() => {
1531
+ setStyles(stylesFactory(theme()));
1532
+ });
1533
+ return styles;
1534
+ }
1535
+ export {
1536
+ useStyles
1537
+ };
1538
+ //# sourceMappingURL=use-styles.js.map