@abstractframework/panel-chat 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,553 @@
1
+ .pc-chat-content {
2
+ min-width: 0;
3
+ max-width: 100%;
4
+ }
5
+
6
+ /* Markdown */
7
+ .pc-md {
8
+ font-size: var(--font-size-md, 13px);
9
+ line-height: 1.45;
10
+ }
11
+
12
+ .pc-md h1,
13
+ .pc-md h2,
14
+ .pc-md h3 {
15
+ margin: 10px 0 6px 0;
16
+ font-size: var(--font-size-base, 14px);
17
+ }
18
+
19
+ .pc-md code {
20
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
21
+ font-size: var(--font-size-sm, 12px);
22
+ padding: 1px 4px;
23
+ border-radius: 6px;
24
+ background: var(--ui-code-bg, rgba(0, 0, 0, 0.18));
25
+ border: 1px solid var(--ui-code-border, rgba(255, 255, 255, 0.08));
26
+ }
27
+
28
+ .pc-md_pre {
29
+ margin: 10px 0;
30
+ padding: 10px 12px;
31
+ border-radius: 10px;
32
+ background: var(--ui-code-block-bg, rgba(0, 0, 0, 0.25));
33
+ border: 1px solid var(--ui-code-block-border, rgba(255, 255, 255, 0.08));
34
+ overflow-x: auto;
35
+ max-width: 100%;
36
+ }
37
+
38
+ .pc-md_pre code {
39
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
40
+ font-size: var(--font-size-sm, 12px);
41
+ white-space: pre;
42
+ padding: 0;
43
+ border: none;
44
+ background: transparent;
45
+ }
46
+
47
+ .pc-md_ul {
48
+ margin: 8px 0 8px 18px;
49
+ padding: 0;
50
+ }
51
+
52
+ .pc-md_ol {
53
+ margin: 8px 0 8px 22px;
54
+ padding: 0;
55
+ }
56
+
57
+ .pc-md_p {
58
+ margin: 8px 0;
59
+ }
60
+
61
+ .pc-md_hr {
62
+ border: none;
63
+ border-top: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
64
+ margin: 12px 0;
65
+ }
66
+
67
+ .pc-md_quote {
68
+ margin: 10px 0;
69
+ padding: 10px 12px;
70
+ border-left: 3px solid rgba(96, 165, 250, 0.55);
71
+ border-radius: 10px;
72
+ background: var(--ui-surface-1, rgba(0, 0, 0, 0.18));
73
+ }
74
+
75
+ .pc-md_table_wrap {
76
+ margin: 10px 0;
77
+ overflow: auto;
78
+ border-radius: 10px;
79
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
80
+ background: var(--ui-surface-1, rgba(0, 0, 0, 0.18));
81
+ }
82
+
83
+ .pc-md_table {
84
+ width: 100%;
85
+ border-collapse: collapse;
86
+ font-size: var(--font-size-sm, 12px);
87
+ line-height: 1.4;
88
+ }
89
+
90
+ .pc-md_table th,
91
+ .pc-md_table td {
92
+ padding: 8px 10px;
93
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.08));
94
+ vertical-align: top;
95
+ text-align: left;
96
+ }
97
+
98
+ .pc-md_table th {
99
+ font-weight: 600;
100
+ background: var(--ui-surface-2, rgba(255, 255, 255, 0.04));
101
+ }
102
+
103
+ .pc-md_hl {
104
+ border-radius: 6px;
105
+ padding: 0 3px;
106
+ border: 1px solid rgba(251, 191, 36, 0.30);
107
+ background: rgba(251, 191, 36, 0.10);
108
+ box-shadow: 0 0 0 1px rgba(251, 191, 36, 0.10), 0 10px 30px rgba(0, 0, 0, 0.50);
109
+ color: rgba(251, 191, 36, 0.98);
110
+ }
111
+
112
+ /* JSON viewer */
113
+ .pc-json-viewer {
114
+ min-width: 0;
115
+ max-width: 100%;
116
+ }
117
+
118
+ .pc-json-viewer__toolbar {
119
+ display: flex;
120
+ justify-content: flex-end;
121
+ margin-bottom: 6px;
122
+ }
123
+
124
+ .pc-btn {
125
+ background: var(--ui-overlay-bg, rgba(255, 255, 255, 0.08));
126
+ border: 1px solid var(--ui-overlay-border, rgba(255, 255, 255, 0.12));
127
+ color: var(--ui-chip-text, rgba(255, 255, 255, 0.92));
128
+ border-radius: 8px;
129
+ padding: 6px 10px;
130
+ font-size: var(--font-size-sm, 12px);
131
+ cursor: pointer;
132
+ }
133
+
134
+ .pc-btn:hover {
135
+ background: var(--ui-overlay-bg-hover, rgba(255, 255, 255, 0.12));
136
+ }
137
+
138
+ .pc-json-viewer__tree {
139
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
140
+ font-size: var(--font-size-sm, 12px);
141
+ line-height: 1.35;
142
+ overflow-x: auto;
143
+ max-width: 100%;
144
+ padding: 6px 0;
145
+ }
146
+
147
+ .pc-json-viewer__line,
148
+ .pc-json-viewer__summary {
149
+ white-space: pre;
150
+ overflow-wrap: anywhere;
151
+ }
152
+
153
+ .pc-json-viewer__summary {
154
+ cursor: pointer;
155
+ list-style: none;
156
+ }
157
+
158
+ .pc-json-viewer__summary::-webkit-details-marker {
159
+ display: none;
160
+ }
161
+
162
+ .pc-json-viewer__caret {
163
+ display: inline-block;
164
+ width: 14px;
165
+ opacity: 0.75;
166
+ }
167
+
168
+ .pc-json-viewer__punct {
169
+ opacity: 0.7;
170
+ }
171
+
172
+ .pc-json-token.key {
173
+ color: #9cdcfe;
174
+ }
175
+
176
+ .pc-json-token.string {
177
+ color: #ce9178;
178
+ }
179
+
180
+ .pc-json-token.number {
181
+ color: #b5cea8;
182
+ }
183
+
184
+ .pc-json-token.boolean {
185
+ color: #569cd6;
186
+ }
187
+
188
+ .pc-json-token.null {
189
+ color: #808080;
190
+ }
191
+
192
+ /* Composer */
193
+ .pc-composer {
194
+ display: flex;
195
+ flex-direction: column;
196
+ gap: 8px;
197
+ width: 100%;
198
+ }
199
+
200
+ .pc-composer__textarea {
201
+ width: 100%;
202
+ resize: none;
203
+ min-height: 0;
204
+ border-radius: 12px;
205
+ padding: 10px 12px;
206
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
207
+ background: var(--ui-surface-1, rgba(0, 0, 0, 0.18));
208
+ color: var(--ui-text-1, rgba(255, 255, 255, 0.92));
209
+ outline: none;
210
+ font-size: var(--font-size-md, 13px);
211
+ line-height: 1.35;
212
+ }
213
+
214
+ .pc-composer__textarea:focus {
215
+ border-color: rgba(96, 165, 250, 0.35);
216
+ box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.12);
217
+ }
218
+
219
+ /* Prevent iOS Safari auto-zoom on focus (needs >= 16px). */
220
+ @media (pointer: coarse) {
221
+ .pc-composer__textarea {
222
+ font-size: var(--font-size-lg, 16px);
223
+ }
224
+ }
225
+
226
+ .pc-composer__row {
227
+ display: flex;
228
+ justify-content: space-between;
229
+ align-items: center;
230
+ gap: 10px;
231
+ }
232
+
233
+ .pc-composer__actions {
234
+ display: flex;
235
+ gap: 8px;
236
+ align-items: center;
237
+ flex-wrap: wrap;
238
+ }
239
+
240
+ /* ------------------------------------------------------------------ */
241
+ /* Chat thread + message cards */
242
+ /* ------------------------------------------------------------------ */
243
+
244
+ .pc-chat-thread {
245
+ display: flex;
246
+ flex-direction: column;
247
+ gap: 10px;
248
+ min-width: 0;
249
+ max-width: 100%;
250
+ overflow: auto;
251
+ padding-right: 4px;
252
+ }
253
+
254
+ .pc-chat-item {
255
+ position: relative;
256
+ border-radius: 12px;
257
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
258
+ background: var(--ui-surface-1, rgba(0, 0, 0, 0.18));
259
+ padding: 12px 14px;
260
+ max-width: min(92%, 86ch);
261
+ }
262
+
263
+ .pc-chat-item--user {
264
+ align-self: flex-end;
265
+ background: var(--info-subtle, rgba(96, 165, 250, 0.10));
266
+ border-color: var(--info-border, rgba(96, 165, 250, 0.30));
267
+ border-bottom-right-radius: var(--radius-sm, 6px);
268
+ }
269
+
270
+ .pc-chat-item--assistant {
271
+ align-self: flex-start;
272
+ background: var(--accent-subtle, rgba(233, 69, 96, 0.10));
273
+ border-color: var(--accent-border, rgba(233, 69, 96, 0.30));
274
+ border-bottom-left-radius: var(--radius-sm, 6px);
275
+ }
276
+
277
+ .pc-chat-item--status {
278
+ width: 100%;
279
+ max-width: 100%;
280
+ align-self: stretch;
281
+ background: var(--ui-surface-2, rgba(255, 255, 255, 0.06));
282
+ border-color: var(--ui-border-1, rgba(255, 255, 255, 0.10));
283
+ }
284
+
285
+ .pc-chat-item--warn {
286
+ width: 100%;
287
+ max-width: 100%;
288
+ align-self: stretch;
289
+ background: linear-gradient(135deg, var(--warning-subtle, rgba(245, 158, 11, 0.12)) 0%, rgba(0, 0, 0, 0.04) 100%);
290
+ border-color: var(--warning-border, rgba(245, 158, 11, 0.30));
291
+ }
292
+
293
+ .pc-chat-item--error {
294
+ width: 100%;
295
+ max-width: 100%;
296
+ align-self: stretch;
297
+ background: linear-gradient(135deg, var(--error-subtle, rgba(239, 68, 68, 0.12)) 0%, rgba(0, 0, 0, 0.04) 100%);
298
+ border-color: var(--error-border, rgba(239, 68, 68, 0.30));
299
+ }
300
+
301
+ .pc-chat-item--report_bug {
302
+ width: 100%;
303
+ max-width: 100%;
304
+ align-self: stretch;
305
+ background: linear-gradient(135deg, rgba(239, 68, 68, 0.12) 0%, rgba(0, 0, 0, 0.04) 100%);
306
+ border-color: var(--error-border, rgba(239, 68, 68, 0.30));
307
+ }
308
+
309
+ .pc-chat-item--report_feature {
310
+ width: 100%;
311
+ max-width: 100%;
312
+ align-self: stretch;
313
+ background: linear-gradient(135deg, var(--success-subtle, rgba(34, 197, 94, 0.12)) 0%, rgba(0, 0, 0, 0.04) 100%);
314
+ border-color: var(--success-border, rgba(34, 197, 94, 0.30));
315
+ }
316
+
317
+ .pc-chat-header {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 10px;
321
+ margin-bottom: 10px;
322
+ min-width: 0;
323
+ }
324
+
325
+ .pc-chat-avatar {
326
+ width: 24px;
327
+ height: 24px;
328
+ border-radius: 999px;
329
+ background: var(--ui-surface-2, rgba(255, 255, 255, 0.06));
330
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
331
+ color: var(--text-secondary, rgba(255, 255, 255, 0.70));
332
+ display: flex;
333
+ align-items: center;
334
+ justify-content: center;
335
+ flex: 0 0 auto;
336
+ }
337
+
338
+ .pc-chat-item--user .pc-chat-avatar {
339
+ background: var(--info-subtle, rgba(96, 165, 250, 0.10));
340
+ border-color: var(--info-border, rgba(96, 165, 250, 0.30));
341
+ color: var(--info, rgba(96, 165, 250, 0.95));
342
+ }
343
+
344
+ .pc-chat-item--assistant .pc-chat-avatar {
345
+ background: var(--accent-subtle, rgba(233, 69, 96, 0.10));
346
+ border-color: var(--accent-border, rgba(233, 69, 96, 0.30));
347
+ color: var(--accent, rgba(233, 69, 96, 0.95));
348
+ }
349
+
350
+ .pc-chat-item--warn .pc-chat-avatar,
351
+ .pc-chat-item--report_bug .pc-chat-avatar {
352
+ background: var(--warning-subtle, rgba(245, 158, 11, 0.12));
353
+ border-color: var(--warning-border, rgba(245, 158, 11, 0.30));
354
+ color: var(--warning, rgba(245, 158, 11, 0.95));
355
+ }
356
+
357
+ .pc-chat-item--error .pc-chat-avatar {
358
+ background: var(--error-subtle, rgba(239, 68, 68, 0.12));
359
+ border-color: var(--error-border, rgba(239, 68, 68, 0.30));
360
+ color: var(--error, rgba(239, 68, 68, 0.95));
361
+ }
362
+
363
+ .pc-chat-item--report_feature .pc-chat-avatar {
364
+ background: var(--success-subtle, rgba(34, 197, 94, 0.12));
365
+ border-color: var(--success-border, rgba(34, 197, 94, 0.30));
366
+ color: var(--success, rgba(34, 197, 94, 0.95));
367
+ }
368
+
369
+ .pc-chat-role {
370
+ font-weight: 650;
371
+ font-size: var(--font-size-md, 13px);
372
+ color: var(--text-primary, rgba(255, 255, 255, 0.92));
373
+ min-width: 0;
374
+ }
375
+
376
+ .pc-chat-header-spacer {
377
+ flex: 1 1 auto;
378
+ min-width: 0;
379
+ }
380
+
381
+ .pc-chat-time {
382
+ font-size: var(--font-size-xs, 11px);
383
+ color: var(--text-muted, rgba(255, 255, 255, 0.55));
384
+ font-family: var(--font-mono, ui-monospace, monospace);
385
+ }
386
+
387
+ .pc-chat-header-actions {
388
+ display: flex;
389
+ align-items: center;
390
+ gap: 8px;
391
+ }
392
+
393
+ .pc-chat-icon-btn {
394
+ opacity: 0.75;
395
+ transition: background 150ms ease, color 150ms ease, opacity 150ms ease, transform 150ms ease;
396
+ width: 36px;
397
+ height: 36px;
398
+ padding: 0;
399
+ display: inline-flex;
400
+ align-items: center;
401
+ justify-content: center;
402
+ border-radius: 10px;
403
+ border: none;
404
+ background: transparent;
405
+ color: var(--text-secondary, rgba(255, 255, 255, 0.80));
406
+ cursor: pointer;
407
+ }
408
+
409
+ .pc-chat-icon-btn svg {
410
+ display: block;
411
+ }
412
+
413
+ .pc-chat-icon-btn:hover {
414
+ opacity: 1;
415
+ background: var(--ui-overlay-bg-hover, rgba(255, 255, 255, 0.08));
416
+ color: var(--text-primary, rgba(255, 255, 255, 0.92));
417
+ transform: translateY(-0.5px);
418
+ }
419
+
420
+ .pc-chat-icon-btn--copied {
421
+ opacity: 1;
422
+ background: var(--success-subtle, rgba(34, 197, 94, 0.12));
423
+ color: var(--success, rgba(34, 197, 94, 0.95));
424
+ }
425
+
426
+ .pc-chat-icon-btn--failed {
427
+ opacity: 1;
428
+ background: var(--error-subtle, rgba(239, 68, 68, 0.12));
429
+ color: var(--error, rgba(239, 68, 68, 0.95));
430
+ }
431
+
432
+ .pc-chat-body {
433
+ font-size: var(--font-size-base, 14px);
434
+ line-height: 1.55;
435
+ color: var(--text-primary, rgba(255, 255, 255, 0.92));
436
+ min-width: 0;
437
+ overflow-wrap: anywhere;
438
+ }
439
+
440
+ .pc-chat-attachments {
441
+ margin-top: 10px;
442
+ display: flex;
443
+ flex-wrap: wrap;
444
+ gap: 8px;
445
+ }
446
+
447
+ .pc-chat-attachment-chip {
448
+ display: inline-flex;
449
+ align-items: center;
450
+ gap: 6px;
451
+ padding: 5px 10px;
452
+ border-radius: 999px;
453
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
454
+ background: var(--ui-surface-2, rgba(255, 255, 255, 0.06));
455
+ color: var(--text-secondary, rgba(255, 255, 255, 0.75));
456
+ cursor: pointer;
457
+ max-width: 100%;
458
+ transition: all 150ms ease;
459
+ }
460
+
461
+ .pc-chat-attachment-chip:hover:not(:disabled) {
462
+ border-color: var(--accent-border, rgba(233, 69, 96, 0.35));
463
+ background: var(--accent-subtle, rgba(233, 69, 96, 0.10));
464
+ color: var(--text-primary, rgba(255, 255, 255, 0.92));
465
+ }
466
+
467
+ .pc-chat-attachment-chip:disabled {
468
+ opacity: 0.55;
469
+ cursor: not-allowed;
470
+ }
471
+
472
+ .pc-chat-attachment-name {
473
+ max-width: 260px;
474
+ overflow: hidden;
475
+ text-overflow: ellipsis;
476
+ white-space: nowrap;
477
+ font-family: var(--font-mono, ui-monospace, monospace);
478
+ font-size: var(--font-size-sm, 12px);
479
+ }
480
+
481
+ .pc-chat-attachment-target {
482
+ font-size: var(--font-size-xxs, 10px);
483
+ font-weight: 700;
484
+ letter-spacing: 0.04em;
485
+ text-transform: uppercase;
486
+ padding: 1px 6px;
487
+ border-radius: 999px;
488
+ border: 1px solid var(--ui-border-2, rgba(255, 255, 255, 0.14));
489
+ background: rgba(148, 163, 184, 0.08);
490
+ color: var(--text-secondary, rgba(255, 255, 255, 0.80));
491
+ flex: 0 0 auto;
492
+ }
493
+
494
+ .pc-chat-attachment-target--server {
495
+ border-color: var(--info-border, rgba(96, 165, 250, 0.30));
496
+ background: var(--info-subtle, rgba(96, 165, 250, 0.10));
497
+ color: var(--info, rgba(96, 165, 250, 0.95));
498
+ }
499
+
500
+ .pc-chat-attachment-target--client {
501
+ border-color: var(--accent-border, rgba(233, 69, 96, 0.30));
502
+ background: var(--accent-subtle, rgba(233, 69, 96, 0.10));
503
+ color: var(--accent, rgba(233, 69, 96, 0.95));
504
+ }
505
+
506
+ .pc-chat-attachment-target--repo {
507
+ border-color: var(--success-border, rgba(34, 197, 94, 0.30));
508
+ background: var(--success-subtle, rgba(34, 197, 94, 0.10));
509
+ color: var(--success, rgba(34, 197, 94, 0.95));
510
+ }
511
+
512
+ .pc-chat-stats {
513
+ margin-top: 10px;
514
+ display: flex;
515
+ flex-wrap: wrap;
516
+ gap: 8px;
517
+ font-size: var(--font-size-sm, 12px);
518
+ color: var(--text-muted, rgba(255, 255, 255, 0.60));
519
+ }
520
+
521
+ .pc-chat-stat {
522
+ display: inline-flex;
523
+ align-items: center;
524
+ gap: 6px;
525
+ padding: 4px 10px;
526
+ border-radius: 999px;
527
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
528
+ background: var(--ui-surface-2, rgba(255, 255, 255, 0.06));
529
+ color: var(--text-secondary, rgba(255, 255, 255, 0.80));
530
+ cursor: default;
531
+ }
532
+
533
+ .pc-chat-stat:disabled {
534
+ opacity: 1;
535
+ }
536
+
537
+ .pc-chat-stat--clickable {
538
+ cursor: pointer;
539
+ }
540
+
541
+ .pc-chat-stat--clickable:hover {
542
+ border-color: var(--ui-border-2, rgba(255, 255, 255, 0.14));
543
+ background: var(--ui-overlay-bg-hover, rgba(255, 255, 255, 0.10));
544
+ color: var(--text-primary, rgba(255, 255, 255, 0.92));
545
+ }
546
+
547
+ .pc-chat-stat-icon {
548
+ opacity: 0.8;
549
+ }
550
+
551
+ .pc-chat-stat-label {
552
+ font-family: var(--font-mono, ui-monospace, monospace);
553
+ }