claude-team-dashboard 1.2.2

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.

Potentially problematic release.


This version of claude-team-dashboard might be problematic. Click here for more details.

Files changed (49) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/LICENSE +21 -0
  3. package/README.md +722 -0
  4. package/cleanup.js +73 -0
  5. package/config.js +50 -0
  6. package/dist/assets/icons-Ijf8rQIc.js +1 -0
  7. package/dist/assets/index-Cqc1m1x_.css +1 -0
  8. package/dist/assets/index-jGy3ms0W.js +9 -0
  9. package/dist/assets/react-vendor-DbmSkCAF.js +1 -0
  10. package/dist/index.html +16 -0
  11. package/index.html +13 -0
  12. package/package.json +93 -0
  13. package/server.js +953 -0
  14. package/src/App.jsx +372 -0
  15. package/src/animations-enhanced.css +929 -0
  16. package/src/animations.css +783 -0
  17. package/src/components/ActivityFeed.jsx +289 -0
  18. package/src/components/AgentActivity.jsx +104 -0
  19. package/src/components/AgentCard.jsx +163 -0
  20. package/src/components/AgentOutputViewer.jsx +334 -0
  21. package/src/components/ArchiveViewer.jsx +283 -0
  22. package/src/components/ConnectionStatus.jsx +124 -0
  23. package/src/components/DetailedTaskProgress.jsx +126 -0
  24. package/src/components/ErrorBoundary.jsx +132 -0
  25. package/src/components/Header.jsx +154 -0
  26. package/src/components/LiveAgentStream.jsx +176 -0
  27. package/src/components/LiveCommunication.jsx +326 -0
  28. package/src/components/LiveMetrics.jsx +100 -0
  29. package/src/components/RealTimeMessages.jsx +298 -0
  30. package/src/components/SkeletonLoader.jsx +384 -0
  31. package/src/components/StatsOverview.jsx +209 -0
  32. package/src/components/SystemStatus.jsx +57 -0
  33. package/src/components/TaskList.jsx +306 -0
  34. package/src/components/TeamCard.jsx +126 -0
  35. package/src/components/TeamHistory.jsx +204 -0
  36. package/src/components/__tests__/ConnectionStatus.test.jsx +54 -0
  37. package/src/components/__tests__/StatsOverview.test.jsx +66 -0
  38. package/src/config/constants.js +59 -0
  39. package/src/hooks/useCounterAnimation.js +219 -0
  40. package/src/hooks/useWebSocket.js +76 -0
  41. package/src/index.css +1818 -0
  42. package/src/main.jsx +17 -0
  43. package/src/polish-enhancements.css +303 -0
  44. package/src/premium-visual-polish.css +830 -0
  45. package/src/responsive-enhancements.css +666 -0
  46. package/src/styles/theme.css +395 -0
  47. package/src/test/setup.js +19 -0
  48. package/start.js +36 -0
  49. package/vite.config.js +37 -0
@@ -0,0 +1,666 @@
1
+ /* ========================================
2
+ RESPONSIVE DESIGN ENHANCEMENTS
3
+ Mobile-First Premium Experience
4
+ ======================================== */
5
+
6
+ /* ==========================================
7
+ MOBILE OPTIMIZATIONS (< 640px)
8
+ ========================================== */
9
+
10
+ @media (max-width: 640px) {
11
+ /* Reduced card border radius for mobile */
12
+ .card, .stat-card {
13
+ border-radius: 16px !important;
14
+ padding: 1.25rem !important;
15
+ }
16
+
17
+ /* Message cards optimized for mobile */
18
+ .message-card {
19
+ padding: 1rem !important;
20
+ border-radius: 14px !important;
21
+ }
22
+
23
+ /* Smaller shadows for mobile */
24
+ .card:hover, .stat-card:hover, .message-card:hover {
25
+ transform: translateY(-2px) scale(1.002);
26
+ box-shadow:
27
+ 0 12px 32px rgba(0, 0, 0, 0.4),
28
+ 0 4px 12px rgba(0, 0, 0, 0.25),
29
+ 0 0 20px rgba(249, 115, 22, 0.08);
30
+ }
31
+
32
+ /* Optimized buttons for touch */
33
+ button, .btn {
34
+ min-height: 44px;
35
+ min-width: 44px;
36
+ padding: 12px 20px;
37
+ border-radius: 10px;
38
+ }
39
+
40
+ /* Filter buttons for mobile touch */
41
+ .filter-button {
42
+ min-height: 44px;
43
+ padding: 0.625rem 1.125rem;
44
+ font-size: 0.875rem;
45
+ }
46
+
47
+ /* Agent badges more readable on mobile */
48
+ .agent-badge {
49
+ font-size: 0.8125rem;
50
+ padding: 0.375rem 0.875rem;
51
+ }
52
+
53
+ /* Message emoji slightly smaller on mobile */
54
+ .message-emoji {
55
+ font-size: 1.375rem;
56
+ }
57
+
58
+ /* Badge adjustments */
59
+ .badge {
60
+ padding: 6px 14px !important;
61
+ font-size: 11px;
62
+ }
63
+
64
+ /* Icon containers smaller on mobile */
65
+ .icon-container {
66
+ padding: 10px;
67
+ border-radius: 12px;
68
+ }
69
+
70
+ /* Progress bars slightly thicker for visibility */
71
+ .progress-bar {
72
+ height: 8px;
73
+ }
74
+
75
+ /* Reduce heading sizes */
76
+ h1 {
77
+ font-size: 1.75rem; /* 28px */
78
+ line-height: 1.2;
79
+ }
80
+
81
+ h2 {
82
+ font-size: 1.5rem; /* 24px */
83
+ line-height: 1.25;
84
+ }
85
+
86
+ h3 {
87
+ font-size: 1.25rem; /* 20px */
88
+ line-height: 1.3;
89
+ }
90
+
91
+ /* Stat numbers smaller on mobile */
92
+ .stat-number {
93
+ font-size: 1.875rem; /* 30px */
94
+ }
95
+
96
+ /* Reduce spacing */
97
+ .gap-6 {
98
+ gap: 1rem; /* 16px */
99
+ }
100
+
101
+ .gap-4 {
102
+ gap: 0.75rem; /* 12px */
103
+ }
104
+
105
+ /* Scrollbar thinner on mobile */
106
+ ::-webkit-scrollbar {
107
+ width: 8px;
108
+ height: 8px;
109
+ }
110
+
111
+ /* Simplified animations for performance */
112
+ .card::before,
113
+ .stat-card::before,
114
+ .icon-container::before {
115
+ animation: none;
116
+ }
117
+
118
+ /* Touch-friendly spacing */
119
+ nav[role="tablist"] button {
120
+ padding: 12px 16px;
121
+ min-width: auto;
122
+ }
123
+
124
+ /* Mobile-specific utility classes */
125
+ .mobile-stack {
126
+ display: flex;
127
+ flex-direction: column;
128
+ gap: 1rem;
129
+ }
130
+
131
+ /* Reduce glow effects for battery */
132
+ .badge::before,
133
+ .live-indicator,
134
+ .section-divider::before {
135
+ animation-duration: 3s;
136
+ }
137
+ }
138
+
139
+ /* ==========================================
140
+ TABLET OPTIMIZATIONS (641px - 1024px)
141
+ ========================================== */
142
+
143
+ @media (min-width: 641px) and (max-width: 1024px) {
144
+ /* Medium card styling */
145
+ .card, .stat-card {
146
+ border-radius: 18px !important;
147
+ padding: 1.5rem !important;
148
+ }
149
+
150
+ /* Tablet-optimized grid */
151
+ .tablet-grid-2 {
152
+ display: grid;
153
+ grid-template-columns: repeat(2, minmax(0, 1fr));
154
+ gap: 1.25rem;
155
+ }
156
+
157
+ /* Button sizing for tablets */
158
+ button, .btn {
159
+ padding: 10px 18px;
160
+ border-radius: 11px;
161
+ }
162
+
163
+ /* Icon containers medium size */
164
+ .icon-container {
165
+ padding: 12px;
166
+ border-radius: 14px;
167
+ }
168
+
169
+ /* Balanced hover effects */
170
+ .card:hover, .stat-card:hover {
171
+ transform: translateY(-5px) scale(1.008);
172
+ }
173
+
174
+ /* Optimized badge size */
175
+ .badge {
176
+ padding: 7px 16px !important;
177
+ font-size: 11.5px;
178
+ }
179
+ }
180
+
181
+ /* ==========================================
182
+ DESKTOP OPTIMIZATIONS (1025px - 1440px)
183
+ ========================================== */
184
+
185
+ @media (min-width: 1025px) and (max-width: 1440px) {
186
+ /* Standard desktop cards */
187
+ .card, .stat-card {
188
+ border-radius: 20px !important;
189
+ }
190
+
191
+ /* Desktop grid layouts */
192
+ .desktop-grid-3 {
193
+ display: grid;
194
+ grid-template-columns: repeat(3, minmax(0, 1fr));
195
+ gap: 1.5rem;
196
+ }
197
+
198
+ .desktop-grid-4 {
199
+ display: grid;
200
+ grid-template-columns: repeat(4, minmax(0, 1fr));
201
+ gap: 1.5rem;
202
+ }
203
+
204
+ /* Full hover effects */
205
+ .card:hover, .stat-card:hover {
206
+ transform: translateY(-6px) scale(1.01);
207
+ }
208
+ }
209
+
210
+ /* ==========================================
211
+ LARGE DESKTOP (> 1440px)
212
+ ========================================== */
213
+
214
+ @media (min-width: 1441px) {
215
+ /* Larger cards for big screens */
216
+ .card, .stat-card {
217
+ border-radius: 22px !important;
218
+ padding: 2rem !important;
219
+ }
220
+
221
+ /* Enhanced spacing */
222
+ .container {
223
+ max-width: 1600px;
224
+ }
225
+
226
+ /* Larger icon containers */
227
+ .icon-container {
228
+ padding: 16px;
229
+ border-radius: 18px;
230
+ }
231
+
232
+ /* Larger badges */
233
+ .badge {
234
+ padding: 9px 20px !important;
235
+ font-size: 13px;
236
+ }
237
+
238
+ /* Enhanced stat numbers */
239
+ .stat-number {
240
+ font-size: 2.5rem; /* 40px */
241
+ }
242
+
243
+ /* More dramatic hover effects */
244
+ .card:hover, .stat-card:hover {
245
+ transform: translateY(-8px) scale(1.015);
246
+ }
247
+ }
248
+
249
+ /* ==========================================
250
+ ULTRA-WIDE DISPLAYS (> 1920px)
251
+ ========================================== */
252
+
253
+ @media (min-width: 1921px) {
254
+ .container {
255
+ max-width: 1800px;
256
+ }
257
+
258
+ /* Maximum card size */
259
+ .card, .stat-card {
260
+ border-radius: 24px !important;
261
+ }
262
+
263
+ /* Grid for ultra-wide */
264
+ .ultrawide-grid-6 {
265
+ display: grid;
266
+ grid-template-columns: repeat(6, minmax(0, 1fr));
267
+ gap: 2rem;
268
+ }
269
+ }
270
+
271
+ /* ==========================================
272
+ LANDSCAPE MOBILE (Small Height)
273
+ ========================================== */
274
+
275
+ @media (max-height: 600px) and (orientation: landscape) {
276
+ /* Compact header */
277
+ header {
278
+ padding: 0.75rem 1.5rem;
279
+ }
280
+
281
+ /* Reduce vertical spacing */
282
+ .card, .stat-card {
283
+ padding: 1rem !important;
284
+ }
285
+
286
+ /* Compact stat cards */
287
+ .stat-number {
288
+ font-size: 1.5rem; /* 24px */
289
+ margin-bottom: 0.25rem;
290
+ }
291
+
292
+ /* Smaller gaps */
293
+ .gap-6 {
294
+ gap: 0.75rem;
295
+ }
296
+
297
+ .space-y-6 > * + * {
298
+ margin-top: 1rem;
299
+ }
300
+
301
+ /* Compact badges */
302
+ .badge {
303
+ padding: 4px 12px !important;
304
+ font-size: 10px;
305
+ }
306
+ }
307
+
308
+ /* ==========================================
309
+ PRINT STYLES
310
+ ========================================== */
311
+
312
+ @media print {
313
+ /* Remove animations */
314
+ * {
315
+ animation: none !important;
316
+ transition: none !important;
317
+ }
318
+
319
+ /* Simplify shadows */
320
+ .card, .stat-card {
321
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
322
+ }
323
+
324
+ /* Hide interactive elements */
325
+ button,
326
+ nav[role="tablist"],
327
+ .connection-status {
328
+ display: none !important;
329
+ }
330
+
331
+ /* Black and white mode */
332
+ body {
333
+ background: white !important;
334
+ color: black !important;
335
+ }
336
+
337
+ .card, .stat-card {
338
+ background: white !important;
339
+ border: 1px solid #ccc !important;
340
+ page-break-inside: avoid;
341
+ }
342
+
343
+ /* Ensure text is readable */
344
+ .text-white,
345
+ .text-gray-300,
346
+ .text-gray-400 {
347
+ color: black !important;
348
+ }
349
+ }
350
+
351
+ /* ==========================================
352
+ TOUCH DEVICE ENHANCEMENTS
353
+ ========================================== */
354
+
355
+ @media (hover: none) and (pointer: coarse) {
356
+ /* Larger touch targets */
357
+ button, a, input, select, textarea {
358
+ min-height: 44px;
359
+ min-width: 44px;
360
+ }
361
+
362
+ /* Remove hover-only effects */
363
+ .card:hover::before,
364
+ .stat-card:hover::before,
365
+ .icon-container:hover::before {
366
+ opacity: 0 !important;
367
+ }
368
+
369
+ /* Simplify hover states to active states */
370
+ .card:active,
371
+ .stat-card:active {
372
+ transform: scale(0.98);
373
+ transition: transform 0.1s ease;
374
+ }
375
+
376
+ /* No hover effects on badges */
377
+ .badge:hover {
378
+ transform: none;
379
+ }
380
+
381
+ /* Touch feedback for buttons */
382
+ button:active,
383
+ .btn:active {
384
+ transform: scale(0.96);
385
+ transition: transform 0.1s ease;
386
+ }
387
+
388
+ /* Disable complex animations for performance */
389
+ .shimmer-text,
390
+ .progress-fill::after,
391
+ .icon-container::before {
392
+ animation: none !important;
393
+ }
394
+ }
395
+
396
+ /* ==========================================
397
+ HIGH DPI DISPLAYS (Retina)
398
+ ========================================== */
399
+
400
+ @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
401
+ /* Sharper borders */
402
+ .card, .stat-card {
403
+ border-width: 0.5px;
404
+ }
405
+
406
+ /* Enhanced text rendering */
407
+ body {
408
+ -webkit-font-smoothing: antialiased;
409
+ -moz-osx-font-smoothing: grayscale;
410
+ text-rendering: optimizeLegibility;
411
+ }
412
+
413
+ /* Crisp shadows */
414
+ .card, .stat-card {
415
+ box-shadow:
416
+ 0 20px 60px rgba(0, 0, 0, 0.55),
417
+ 0 8px 24px rgba(0, 0, 0, 0.35),
418
+ 0 2px 8px rgba(0, 0, 0, 0.25),
419
+ inset 0 0.5px 0 rgba(255, 255, 255, 0.08);
420
+ }
421
+ }
422
+
423
+ /* ==========================================
424
+ DARK MODE ENHANCEMENTS
425
+ ========================================== */
426
+
427
+ @media (prefers-color-scheme: dark) {
428
+ /* Already optimized for dark mode */
429
+ /* These are optional enhancements */
430
+
431
+ /* Slightly brighter in pure dark mode preference */
432
+ .card, .stat-card {
433
+ background: linear-gradient(
434
+ 135deg,
435
+ rgba(30, 41, 59, 0.99) 0%,
436
+ rgba(15, 23, 42, 0.97) 100%
437
+ );
438
+ }
439
+
440
+ /* Enhanced contrast */
441
+ .text-white {
442
+ color: #ffffff;
443
+ }
444
+
445
+ .text-gray-400 {
446
+ color: #a1a1aa;
447
+ }
448
+ }
449
+
450
+ /* ==========================================
451
+ LIGHT MODE (Optional Support)
452
+ ========================================== */
453
+
454
+ @media (prefers-color-scheme: light) {
455
+ /* Light mode overrides if needed in future */
456
+ /* Currently dashboard is dark-only by design */
457
+
458
+ body {
459
+ /* Keep dark theme for consistency */
460
+ color-scheme: dark;
461
+ }
462
+ }
463
+
464
+ /* ==========================================
465
+ CONTRAST PREFERENCES
466
+ ========================================== */
467
+
468
+ @media (prefers-contrast: high) {
469
+ /* Enhanced borders */
470
+ .card, .stat-card {
471
+ border: 2px solid rgba(255, 255, 255, 0.2) !important;
472
+ }
473
+
474
+ /* Stronger text contrast */
475
+ .text-gray-400 {
476
+ color: #d1d5db !important;
477
+ }
478
+
479
+ /* More visible focus states */
480
+ *:focus-visible {
481
+ outline-width: 4px;
482
+ outline-offset: 4px;
483
+ }
484
+
485
+ /* Stronger badge borders */
486
+ .badge {
487
+ border-width: 2px !important;
488
+ }
489
+ }
490
+
491
+ @media (prefers-contrast: low) {
492
+ /* Softer shadows */
493
+ .card, .stat-card {
494
+ box-shadow:
495
+ 0 20px 60px rgba(0, 0, 0, 0.3),
496
+ 0 8px 24px rgba(0, 0, 0, 0.2);
497
+ }
498
+
499
+ /* Subtler borders */
500
+ .card, .stat-card {
501
+ border-color: rgba(255, 255, 255, 0.05);
502
+ }
503
+ }
504
+
505
+ /* ==========================================
506
+ SAFE AREA INSETS (iOS Notch Support)
507
+ ========================================== */
508
+
509
+ @supports (padding: max(0px)) {
510
+ body {
511
+ padding-left: max(0px, env(safe-area-inset-left));
512
+ padding-right: max(0px, env(safe-area-inset-right));
513
+ }
514
+
515
+ header {
516
+ padding-left: max(1.5rem, env(safe-area-inset-left));
517
+ padding-right: max(1.5rem, env(safe-area-inset-right));
518
+ padding-top: max(1rem, env(safe-area-inset-top));
519
+ }
520
+
521
+ footer {
522
+ padding-left: max(1.5rem, env(safe-area-inset-left));
523
+ padding-right: max(1.5rem, env(safe-area-inset-right));
524
+ padding-bottom: max(1.5rem, env(safe-area-inset-bottom));
525
+ }
526
+ }
527
+
528
+ /* ==========================================
529
+ UTILITY CLASSES FOR RESPONSIVE
530
+ ========================================== */
531
+
532
+ /* Hide on mobile */
533
+ @media (max-width: 640px) {
534
+ .mobile-hide {
535
+ display: none !important;
536
+ }
537
+ }
538
+
539
+ /* Hide on tablet */
540
+ @media (min-width: 641px) and (max-width: 1024px) {
541
+ .tablet-hide {
542
+ display: none !important;
543
+ }
544
+ }
545
+
546
+ /* Hide on desktop */
547
+ @media (min-width: 1025px) {
548
+ .desktop-hide {
549
+ display: none !important;
550
+ }
551
+ }
552
+
553
+ /* Show only on mobile */
554
+ .mobile-only {
555
+ display: block;
556
+ }
557
+
558
+ @media (min-width: 641px) {
559
+ .mobile-only {
560
+ display: none !important;
561
+ }
562
+ }
563
+
564
+ /* Show only on tablet */
565
+ .tablet-only {
566
+ display: none;
567
+ }
568
+
569
+ @media (min-width: 641px) and (max-width: 1024px) {
570
+ .tablet-only {
571
+ display: block !important;
572
+ }
573
+ }
574
+
575
+ /* Show only on desktop */
576
+ .desktop-only {
577
+ display: none;
578
+ }
579
+
580
+ @media (min-width: 1025px) {
581
+ .desktop-only {
582
+ display: block !important;
583
+ }
584
+ }
585
+
586
+ /* ==========================================
587
+ RESPONSIVE TYPOGRAPHY SCALE
588
+ ========================================== */
589
+
590
+ /* Fluid typography that scales with viewport */
591
+ @media (min-width: 640px) {
592
+ .fluid-text-xl {
593
+ font-size: clamp(1.25rem, 2vw, 1.5rem);
594
+ }
595
+
596
+ .fluid-text-2xl {
597
+ font-size: clamp(1.5rem, 2.5vw, 2rem);
598
+ }
599
+
600
+ .fluid-text-3xl {
601
+ font-size: clamp(1.875rem, 3vw, 2.5rem);
602
+ }
603
+
604
+ .fluid-text-4xl {
605
+ font-size: clamp(2.25rem, 4vw, 3rem);
606
+ }
607
+ }
608
+
609
+ /* ==========================================
610
+ PERFORMANCE OPTIMIZATIONS
611
+ ========================================== */
612
+
613
+ /* Reduce motion on low-end devices */
614
+ @media (prefers-reduced-motion: reduce) {
615
+ /* Instant transitions */
616
+ * {
617
+ animation-duration: 0.01ms !important;
618
+ animation-iteration-count: 1 !important;
619
+ transition-duration: 0.01ms !important;
620
+ }
621
+
622
+ /* Disable infinite animations */
623
+ .badge::before,
624
+ .icon-container::before,
625
+ .card::before,
626
+ .stat-card::before,
627
+ .progress-fill,
628
+ .progress-fill::after,
629
+ .live-indicator,
630
+ .live-indicator::before,
631
+ .live-indicator::after,
632
+ .shimmer-text,
633
+ .section-divider::before {
634
+ animation: none !important;
635
+ }
636
+ }
637
+
638
+ /* ==========================================
639
+ CONTAINER QUERIES (Modern Browsers)
640
+ ========================================== */
641
+
642
+ @supports (container-type: inline-size) {
643
+ .stat-card-container {
644
+ container-type: inline-size;
645
+ }
646
+
647
+ @container (min-width: 300px) {
648
+ .stat-card {
649
+ padding: 1.5rem !important;
650
+ }
651
+
652
+ .stat-number {
653
+ font-size: 2rem;
654
+ }
655
+ }
656
+
657
+ @container (min-width: 400px) {
658
+ .stat-card {
659
+ padding: 2rem !important;
660
+ }
661
+
662
+ .stat-number {
663
+ font-size: 2.25rem;
664
+ }
665
+ }
666
+ }