tech-debt-visualizer 0.2.8 → 0.2.10

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.
@@ -106,30 +106,97 @@ body.dashboard-page {
106
106
  flex-shrink: 0;
107
107
  }
108
108
 
109
- .dashboard-score {
110
- display: inline-flex;
111
- align-items: baseline;
112
- gap: 0.2rem;
113
- padding: 0.35rem 0.65rem;
109
+ /* ——— Score block in header: really pop ——— */
110
+ .dashboard-score-block {
111
+ padding: 0.5rem 0.9rem;
114
112
  border-radius: var(--radius);
113
+ font-weight: 700;
114
+ }
115
+
116
+ .dashboard-score-main {
117
+ display: flex;
118
+ align-items: baseline;
119
+ gap: 0.3rem;
120
+ flex-wrap: wrap;
121
+ }
122
+
123
+ .dashboard-score-value {
124
+ font-size: 1.75rem;
125
+ line-height: 1;
126
+ letter-spacing: -0.03em;
127
+ }
128
+
129
+ .dashboard-score-of {
130
+ font-size: 1rem;
115
131
  font-weight: 600;
132
+ opacity: 0.9;
133
+ }
134
+
135
+ .dashboard-score-label {
136
+ font-size: 0.95rem;
137
+ font-weight: 800;
138
+ text-transform: uppercase;
139
+ letter-spacing: 0.06em;
140
+ margin-left: 0.25rem;
116
141
  }
117
142
 
118
- .dashboard-score-value { font-size: 1.25rem; line-height: 1; }
119
- .dashboard-score-of { font-size: 0.85rem; font-weight: 500; color: var(--text-muted); }
120
- .dashboard-score-label { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; margin-left: 0.35rem; opacity: 0.95; }
143
+ .dashboard-score-desc {
144
+ margin: 0.35rem 0 0;
145
+ font-size: 13px;
146
+ line-height: 1.35;
147
+ font-weight: 600;
148
+ opacity: 0.95;
149
+ max-width: 320px;
150
+ }
121
151
 
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; }
152
+ .dashboard-score-block.tier-1 {
153
+ background: rgba(229, 57, 53, 0.25);
154
+ color: #ff8a80;
155
+ box-shadow: 0 0 0 1px rgba(229, 57, 53, 0.3);
156
+ }
157
+ .dashboard-score-block.tier-2 {
158
+ background: rgba(245, 124, 0, 0.25);
159
+ color: #ffb74d;
160
+ box-shadow: 0 0 0 1px rgba(245, 124, 0, 0.3);
161
+ }
162
+ .dashboard-score-block.tier-3 {
163
+ background: rgba(249, 168, 37, 0.25);
164
+ color: #ffd54f;
165
+ box-shadow: 0 0 0 1px rgba(249, 168, 37, 0.3);
166
+ }
167
+ .dashboard-score-block.tier-4 {
168
+ background: rgba(41, 182, 246, 0.25);
169
+ color: #82b1ff;
170
+ box-shadow: 0 0 0 1px rgba(41, 182, 246, 0.3);
171
+ }
172
+ .dashboard-score-block.tier-5 {
173
+ background: rgba(67, 160, 71, 0.25);
174
+ color: #81c784;
175
+ box-shadow: 0 0 0 1px rgba(67, 160, 71, 0.3);
176
+ }
127
177
 
128
178
  .dashboard-date {
129
179
  font-size: 12px;
130
180
  color: var(--text-muted);
131
181
  }
132
182
 
183
+ /* ——— AI prompts button in header (between score and date) ——— */
184
+ .btn-ai-prompts-header {
185
+ font-size: 12px;
186
+ font-weight: 600;
187
+ padding: 0.4rem 0.75rem;
188
+ background: var(--surface);
189
+ color: var(--link);
190
+ border: 1px solid var(--border);
191
+ border-radius: var(--radius);
192
+ cursor: pointer;
193
+ white-space: nowrap;
194
+ }
195
+ .btn-ai-prompts-header:hover {
196
+ background: rgba(87, 148, 242, 0.1);
197
+ border-color: var(--link);
198
+ }
199
+
133
200
  /* ——— Main content: 2×2 grid, fills viewport, scroll inside cells ——— */
134
201
  .dashboard-main {
135
202
  flex: 1;
@@ -196,7 +263,7 @@ body.dashboard-page {
196
263
  .dashboard-main { padding: 0.5rem 0.75rem; }
197
264
  }
198
265
 
199
- /* ——— Footer: AI prompts button (Grafana-style, fits dashboard) ——— */
266
+ /* ——— Footer (hidden when empty; button moved to header) ——— */
200
267
  .dashboard-footer {
201
268
  flex-shrink: 0;
202
269
  padding: 0.6rem 0 0;
@@ -205,6 +272,12 @@ body.dashboard-page {
205
272
  display: flex;
206
273
  align-items: center;
207
274
  }
275
+ .dashboard-footer:empty {
276
+ display: none;
277
+ padding: 0;
278
+ margin: 0;
279
+ border: none;
280
+ }
208
281
 
209
282
  .btn-ai-prompts {
210
283
  font: inherit;
@@ -445,19 +518,32 @@ body.dashboard-page {
445
518
  .priority-inline { grid-template-columns: 1fr; }
446
519
  }
447
520
 
448
- /* ——— Heatmap panel (bottom-left) ——— */
521
+ /* ——— Heatmap panel ——— */
449
522
  .panel-heatmap .panel-header-heatmap {
450
523
  display: flex;
524
+ flex-direction: column;
525
+ gap: 0.35rem;
526
+ border-left: 2px solid var(--tier-3);
527
+ }
528
+
529
+ .panel-heatmap .panel-title { margin-right: 0.5rem; }
530
+
531
+ .panel-heatmap-row {
532
+ display: flex;
533
+ align-items: center;
534
+ gap: 1rem;
451
535
  flex-wrap: wrap;
452
- align-items: baseline;
453
- gap: 0.75rem 1.25rem;
454
536
  }
455
537
 
456
- .panel-heatmap .panel-header-heatmap {
457
- border-left: 2px solid var(--tier-3);
538
+ .panel-heatmap-row .panel-desc {
539
+ margin: 0;
540
+ flex: 0 1 auto;
541
+ }
542
+
543
+ .panel-heatmap-row .legend-inline {
544
+ margin: 0;
545
+ margin-left: auto;
458
546
  }
459
- .panel-heatmap .panel-title { margin-right: 0.5rem; }
460
- .panel-heatmap .panel-desc { margin: 0.15rem 0 0; flex-basis: 100%; }
461
547
 
462
548
  .panel-list .panel-header {
463
549
  border-left: 2px solid var(--link);
@@ -465,7 +551,6 @@ body.dashboard-page {
465
551
 
466
552
  .legend-inline {
467
553
  margin: 0;
468
- margin-left: auto;
469
554
  }
470
555
 
471
556
  .panel-body-heatmap {
@@ -92,11 +92,15 @@ function buildHtml(run, title, darkMode, css, script) {
92
92
  <span class="dashboard-meta">${escapeHtml(run.repoPath)}</span>
93
93
  </div>
94
94
  <div class="dashboard-header-right">
95
- <div class="dashboard-score tier-${cleanliness.tier}" aria-label="Score ${cleanliness.tier} of 5">
96
- <span class="dashboard-score-value">${cleanliness.tier}</span>
97
- <span class="dashboard-score-of">/ 5</span>
98
- <span class="dashboard-score-label">${escapeHtml(cleanliness.label)}</span>
95
+ <div class="dashboard-score-block tier-${cleanliness.tier}" aria-label="Score ${cleanliness.tier} of 5">
96
+ <div class="dashboard-score-main">
97
+ <span class="dashboard-score-value">${cleanliness.tier}</span>
98
+ <span class="dashboard-score-of">of 5</span>
99
+ <span class="dashboard-score-label">${escapeHtml(cleanliness.label)}</span>
100
+ </div>
101
+ <p class="dashboard-score-desc">${escapeHtml(cleanliness.description)}</p>
99
102
  </div>
103
+ <button type="button" class="btn-ai-prompts btn-ai-prompts-header" id="btnAiPrompts">AI cleanup prompts</button>
100
104
  <span class="dashboard-date">${run.completedAt ?? run.startedAt}</span>
101
105
  </div>
102
106
  </header>
@@ -124,13 +128,15 @@ function buildHtml(run, title, darkMode, css, script) {
124
128
  <div class="panel panel-heatmap">
125
129
  <div class="panel-header panel-header-heatmap">
126
130
  <h2 class="panel-title">Files by debt</h2>
127
- <p class="panel-desc">Size = complexity + churn. Color = severity. Click for details.</p>
128
- <div class="legend legend-inline">
129
- <span><span class="swatch swatch-crit"></span> Critical</span>
130
- <span><span class="swatch swatch-high"></span> High</span>
131
- <span><span class="swatch swatch-med"></span> Medium</span>
132
- <span><span class="swatch swatch-low"></span> Low</span>
133
- <span><span class="swatch swatch-none"></span> None</span>
131
+ <div class="panel-heatmap-row">
132
+ <p class="panel-desc">Size = complexity + churn. Color = severity. Click for details.</p>
133
+ <div class="legend legend-inline">
134
+ <span><span class="swatch swatch-crit"></span> Critical</span>
135
+ <span><span class="swatch swatch-high"></span> High</span>
136
+ <span><span class="swatch swatch-med"></span> Medium</span>
137
+ <span><span class="swatch swatch-low"></span> Low</span>
138
+ <span><span class="swatch swatch-none"></span> None</span>
139
+ </div>
134
140
  </div>
135
141
  </div>
136
142
  <div class="panel-body panel-body-heatmap">
@@ -179,9 +185,7 @@ function buildHtml(run, title, darkMode, css, script) {
179
185
  </div>
180
186
  </div>
181
187
 
182
- <div class="dashboard-footer">
183
- <button type="button" class="btn-ai-prompts" id="btnAiPrompts">AI cleanup prompts</button>
184
- </div>
188
+ <div class="dashboard-footer"></div>
185
189
  </main>
186
190
 
187
191
  <div id="aiPromptsOverlay" class="overlay" aria-hidden="true">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tech-debt-visualizer",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
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",