tech-debt-visualizer 0.2.6 → 0.2.7

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.
@@ -57,7 +57,7 @@ body.dashboard-page {
57
57
  flex-direction: column;
58
58
  }
59
59
 
60
- /* ——— Dashboard header (Grafana top bar: title left, score right) ——— */
60
+ /* ——— Dashboard header (Grafana: bar with accent) ——— */
61
61
  .dashboard-header {
62
62
  display: flex;
63
63
  align-items: center;
@@ -67,6 +67,7 @@ body.dashboard-page {
67
67
  padding: 0.75rem 1.5rem;
68
68
  background: var(--bg-elevated);
69
69
  border-bottom: 1px solid var(--border);
70
+ border-left: 3px solid var(--link);
70
71
  position: sticky;
71
72
  top: 0;
72
73
  z-index: 10;
@@ -118,11 +119,11 @@ body.dashboard-page {
118
119
  .dashboard-score-of { font-size: 0.85rem; font-weight: 500; color: var(--text-muted); }
119
120
  .dashboard-score-label { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; margin-left: 0.35rem; opacity: 0.95; }
120
121
 
121
- .dashboard-score.tier-1 { background: rgba(229, 57, 53, 0.25); color: #ff8a80; font-weight: 700; }
122
- .dashboard-score.tier-2 { background: rgba(245, 124, 0, 0.25); color: #ffb74d; font-weight: 700; }
123
- .dashboard-score.tier-3 { background: rgba(249, 168, 37, 0.25); color: #ffd54f; font-weight: 700; }
124
- .dashboard-score.tier-4 { background: rgba(41, 182, 246, 0.25); color: #82b1ff; font-weight: 700; }
125
- .dashboard-score.tier-5 { background: rgba(67, 160, 71, 0.25); color: #81c784; font-weight: 700; }
122
+ .dashboard-score.tier-1 { background: rgba(229, 57, 53, 0.2); color: #ff8a80; font-weight: 700; }
123
+ .dashboard-score.tier-2 { background: rgba(245, 124, 0, 0.2); color: #ffb74d; font-weight: 700; }
124
+ .dashboard-score.tier-3 { background: rgba(249, 168, 37, 0.2); color: #ffd54f; font-weight: 700; }
125
+ .dashboard-score.tier-4 { background: rgba(41, 182, 246, 0.2); color: #82b1ff; font-weight: 700; }
126
+ .dashboard-score.tier-5 { background: rgba(67, 160, 71, 0.2); color: #81c784; font-weight: 700; }
126
127
 
127
128
  .dashboard-date {
128
129
  font-size: 12px;
@@ -195,29 +196,33 @@ body.dashboard-page {
195
196
  .dashboard-main { padding: 0.5rem 0.75rem; }
196
197
  }
197
198
 
198
- /* ——— Footer: AI prompts button ——— */
199
+ /* ——— Footer: AI prompts button (Grafana-style, fits dashboard) ——— */
199
200
  .dashboard-footer {
200
201
  flex-shrink: 0;
201
- padding: 0.5rem 0;
202
- border-top: 1px solid var(--border-subtle);
202
+ padding: 0.6rem 0 0;
203
+ border-top: 1px solid var(--border);
203
204
  margin-top: 0.5rem;
205
+ display: flex;
206
+ align-items: center;
204
207
  }
205
208
 
206
209
  .btn-ai-prompts {
207
210
  font: inherit;
208
- font-size: 13px;
211
+ font-size: 12px;
209
212
  font-weight: 600;
210
- padding: 0.5rem 1rem;
213
+ letter-spacing: 0.02em;
214
+ padding: 0.45rem 0.9rem;
211
215
  background: var(--surface);
212
- color: var(--text);
216
+ color: var(--link);
213
217
  border: 1px solid var(--border);
214
218
  border-radius: var(--radius);
215
219
  cursor: pointer;
220
+ transition: background 0.15s ease, border-color 0.15s ease;
216
221
  }
217
222
 
218
223
  .btn-ai-prompts:hover {
219
- background: var(--surface-hover);
220
- border-color: var(--text-muted);
224
+ background: rgba(87, 148, 242, 0.08);
225
+ border-color: var(--link);
221
226
  }
222
227
 
223
228
  /* ——— AI prompts overlay (blank screen) ——— */
@@ -310,19 +315,22 @@ body.dashboard-page {
310
315
  .panel-header {
311
316
  padding: 0.6rem 0.85rem;
312
317
  border-bottom: 1px solid var(--border-subtle);
313
- background: rgba(0, 0, 0, 0.04);
318
+ background: rgba(0, 0, 0, 0.05);
314
319
  flex-shrink: 0;
315
320
  }
316
321
 
322
+ .panel-title {
323
+ color: var(--text);
324
+ }
325
+
317
326
  [data-theme="light"] .panel-header {
318
- background: rgba(0, 0, 0, 0.02);
327
+ background: rgba(0, 0, 0, 0.03);
319
328
  }
320
329
 
321
330
  .panel-title {
322
331
  margin: 0;
323
332
  font-size: 12px;
324
333
  font-weight: 700;
325
- color: var(--text);
326
334
  letter-spacing: 0.02em;
327
335
  text-transform: uppercase;
328
336
  }
@@ -342,7 +350,16 @@ body.dashboard-page {
342
350
  text-align: center;
343
351
  }
344
352
 
345
- /* ——— Score panel (top-left): numeric score only, scrollable ——— */
353
+ /* ——— Score panel (top-left): numeric score, tier accent ——— */
354
+ .panel-score {
355
+ border-left: 3px solid var(--link);
356
+ }
357
+ .panel-score[data-tier="1"] { border-left-color: var(--tier-1); }
358
+ .panel-score[data-tier="2"] { border-left-color: var(--tier-2); }
359
+ .panel-score[data-tier="3"] { border-left-color: var(--tier-3); }
360
+ .panel-score[data-tier="4"] { border-left-color: var(--tier-4); }
361
+ .panel-score[data-tier="5"] { border-left-color: var(--tier-5); }
362
+
346
363
  .panel-score .panel-body-score {
347
364
  text-align: center;
348
365
  padding: 1rem 0.85rem;
@@ -436,9 +453,16 @@ body.dashboard-page {
436
453
  gap: 0.75rem 1.25rem;
437
454
  }
438
455
 
456
+ .panel-heatmap .panel-header-heatmap {
457
+ border-left: 2px solid var(--tier-3);
458
+ }
439
459
  .panel-heatmap .panel-title { margin-right: 0.5rem; }
440
460
  .panel-heatmap .panel-desc { margin: 0.15rem 0 0; flex-basis: 100%; }
441
461
 
462
+ .panel-list .panel-header {
463
+ border-left: 2px solid var(--link);
464
+ }
465
+
442
466
  .legend-inline {
443
467
  margin: 0;
444
468
  margin-left: auto;
@@ -470,45 +494,62 @@ body.dashboard-page {
470
494
  margin: 0;
471
495
  }
472
496
 
473
- /* ——— Treemap: square boxes per file ——— */
497
+ /* ——— Treemap: colored block + file name visible ——— */
474
498
  #treemap {
475
499
  display: flex;
476
500
  flex-wrap: wrap;
477
- gap: 6px;
501
+ gap: 10px 12px;
478
502
  min-height: 120px;
479
503
  padding: 0.25rem 0;
480
504
  }
481
505
 
482
506
  .treemap-cell {
483
- width: 44px;
484
- height: 44px;
485
- min-width: 44px;
486
- min-height: 44px;
507
+ width: 92px;
487
508
  flex: none;
488
509
  display: flex;
510
+ flex-direction: column;
489
511
  align-items: center;
490
- justify-content: center;
491
- padding: 4px;
492
- font-size: 10px;
512
+ gap: 4px;
493
513
  cursor: pointer;
494
- overflow: hidden;
495
- text-overflow: ellipsis;
496
- white-space: nowrap;
497
- border: 1px solid rgba(0, 0, 0, 0.15);
514
+ padding: 0;
515
+ border: none;
516
+ background: none;
517
+ }
518
+
519
+ .treemap-cell-block {
520
+ width: 40px;
521
+ height: 40px;
522
+ flex-shrink: 0;
498
523
  border-radius: 4px;
524
+ border: 1px solid rgba(0, 0, 0, 0.15);
525
+ }
526
+
527
+ .treemap-cell-name {
528
+ font-size: 10px;
529
+ line-height: 1.3;
530
+ color: var(--text);
499
531
  text-align: center;
532
+ max-width: 100%;
533
+ overflow: hidden;
534
+ display: -webkit-box;
535
+ -webkit-line-clamp: 2;
536
+ -webkit-box-orient: vertical;
537
+ word-break: break-all;
500
538
  }
501
539
 
502
- .treemap-cell:hover {
540
+ .treemap-cell:hover .treemap-cell-block {
503
541
  outline: 2px solid var(--link);
504
542
  outline-offset: 1px;
505
543
  }
544
+ .treemap-cell:hover .treemap-cell-name {
545
+ color: var(--link);
546
+ }
506
547
 
507
- .treemap-cell[data-severity="critical"] { background: var(--tier-1); color: #fff; border-color: rgba(0,0,0,0.2); }
508
- .treemap-cell[data-severity="high"] { background: var(--tier-2); color: #fff; border-color: rgba(0,0,0,0.15); }
509
- .treemap-cell[data-severity="medium"] { background: var(--tier-3); color: #1a1a1a; border-color: rgba(0,0,0,0.1); }
510
- .treemap-cell[data-severity="low"] { background: var(--tier-5); color: #fff; border-color: rgba(0,0,0,0.1); }
511
- .treemap-cell[data-severity="none"] { background: var(--border); color: var(--text-muted); border-color: var(--border-subtle); }
548
+ .treemap-cell[data-severity="critical"] .treemap-cell-block { background: var(--tier-1); border-color: rgba(0,0,0,0.2); }
549
+ .treemap-cell[data-severity="high"] .treemap-cell-block { background: var(--tier-2); border-color: rgba(0,0,0,0.15); }
550
+ .treemap-cell[data-severity="medium"] .treemap-cell-block { background: var(--tier-3); border-color: rgba(0,0,0,0.1); }
551
+ .treemap-cell[data-severity="low"] .treemap-cell-block { background: var(--tier-5); border-color: rgba(0,0,0,0.1); }
552
+ .treemap-cell[data-severity="none"] .treemap-cell-block { background: var(--border); border-color: var(--border-subtle); }
512
553
 
513
554
  .legend {
514
555
  display: flex;
@@ -142,11 +142,14 @@ fileScores.forEach(function (_ref) {
142
142
  var llmScore =
143
143
  fileM && fileM.llmFileScore != null ? " (LLM debt: " + fileM.llmFileScore + "/100)" : "";
144
144
  var severity = (fileM && fileM.llmSeverity) ? fileM.llmSeverity : worstSeverity(items);
145
+ var basename = file.split("/").pop() || file;
145
146
  var cell = document.createElement("div");
146
147
  cell.className = "treemap-cell";
147
148
  cell.dataset.severity = severity;
148
149
  cell.title = file + llmScore;
149
- cell.textContent = file.split("/").pop() || file;
150
+ cell.innerHTML =
151
+ '<span class="treemap-cell-block" aria-hidden="true"></span>' +
152
+ '<span class="treemap-cell-name">' + escapeHtml(basename) + "</span>";
150
153
  cell.addEventListener("click", function () { showDetail(file, items); });
151
154
  treemapEl.appendChild(cell);
152
155
  });
@@ -104,7 +104,7 @@ function buildHtml(run, title, darkMode, css, script) {
104
104
  <main class="dashboard-main">
105
105
  <div class="dashboard-grid-2x2">
106
106
  <div class="dashboard-cell dashboard-cell-score">
107
- <div class="panel panel-score">
107
+ <div class="panel panel-score" data-tier="${cleanliness.tier}">
108
108
  <div class="panel-header">
109
109
  <h2 class="panel-title">Technical Debt Cleanliness Score</h2>
110
110
  </div>
@@ -167,7 +167,7 @@ function buildHtml(run, title, darkMode, css, script) {
167
167
  </div>
168
168
 
169
169
  <div class="dashboard-cell dashboard-cell-list">
170
- <div class="panel">
170
+ <div class="panel panel-list">
171
171
  <div class="panel-header">
172
172
  <h2 class="panel-title">Ratings & files</h2>
173
173
  <p class="panel-desc">Files rated above none by static or LLM. Click for full details.</p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tech-debt-visualizer",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "description": "Language-agnostic CLI that analyzes repos and generates interactive technical debt visualizations with AI-powered insights",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",