tech-debt-visualizer 0.2.4 → 0.2.5

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.
@@ -1,4 +1,4 @@
1
- /* Technical Debt Report — Grafana-style dashboard */
1
+ /* Technical Debt Report — Colorful dashboard, clean fit, scroll in sections */
2
2
  :root {
3
3
  --bg: #0b0c0e;
4
4
  --bg-elevated: #111214;
@@ -9,8 +9,13 @@
9
9
  --text: #e8e9ea;
10
10
  --text-muted: #8b9199;
11
11
  --link: #5794f2;
12
- --radius: 4px;
13
- --shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
12
+ --radius: 6px;
13
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
14
+ --tier-1: #e53935;
15
+ --tier-2: #f57c00;
16
+ --tier-3: #f9a825;
17
+ --tier-4: #29b6f6;
18
+ --tier-5: #43a047;
14
19
  }
15
20
 
16
21
  [data-theme="light"] {
@@ -24,6 +29,11 @@
24
29
  --text-muted: #6b7077;
25
30
  --link: #3274d9;
26
31
  --shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
32
+ --tier-1: #c62828;
33
+ --tier-2: #ef6c00;
34
+ --tier-3: #f9a825;
35
+ --tier-4: #0288d1;
36
+ --tier-5: #2e7d32;
27
37
  }
28
38
 
29
39
  * { box-sizing: border-box; }
@@ -40,7 +50,11 @@ body {
40
50
  }
41
51
 
42
52
  body.dashboard-page {
43
- padding-bottom: 2rem;
53
+ padding-bottom: 0;
54
+ height: 100vh;
55
+ overflow: hidden;
56
+ display: flex;
57
+ flex-direction: column;
44
58
  }
45
59
 
46
60
  /* ——— Dashboard header (Grafana top bar: title left, score right) ——— */
@@ -104,70 +118,82 @@ body.dashboard-page {
104
118
  .dashboard-score-of { font-size: 0.85rem; font-weight: 500; color: var(--text-muted); }
105
119
  .dashboard-score-label { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; margin-left: 0.35rem; opacity: 0.95; }
106
120
 
107
- .dashboard-score.tier-1 { background: rgba(204, 0, 0, 0.2); color: #f66; }
108
- .dashboard-score.tier-2 { background: rgba(232, 93, 0, 0.2); color: #f90; }
109
- .dashboard-score.tier-3 { background: rgba(184, 134, 11, 0.2); color: #db9; }
110
- .dashboard-score.tier-4 { background: rgba(0, 102, 153, 0.2); color: #6cf; }
111
- .dashboard-score.tier-5 { background: rgba(10, 107, 10, 0.2); color: #6c6; }
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; }
112
126
 
113
127
  .dashboard-date {
114
128
  font-size: 12px;
115
129
  color: var(--text-muted);
116
130
  }
117
131
 
118
- /* ——— Main content: 2×2 dashboard grid ——— */
132
+ /* ——— Main content: 2×2 grid, fills viewport, scroll inside cells ——— */
119
133
  .dashboard-main {
120
- max-width: 1400px;
134
+ flex: 1;
135
+ min-height: 0;
136
+ max-width: 1600px;
121
137
  margin: 0 auto;
122
- padding: 1rem 1.5rem;
123
- min-height: calc(100vh - 52px);
138
+ padding: 0.75rem 1rem;
139
+ width: 100%;
140
+ overflow: hidden;
124
141
  }
125
142
 
126
143
  .dashboard-grid-2x2 {
127
144
  display: grid;
128
145
  grid-template-columns: 1fr 1fr;
129
- grid-template-rows: auto minmax(320px, 1fr);
130
- gap: 1rem;
131
- align-items: start;
146
+ grid-template-rows: auto 1fr;
147
+ gap: 0.75rem;
148
+ height: 100%;
149
+ min-height: 0;
150
+ align-items: stretch;
132
151
  }
133
152
 
134
153
  .dashboard-cell {
135
154
  min-height: 0;
136
155
  min-width: 0;
156
+ overflow: hidden;
137
157
  }
138
158
 
139
159
  .dashboard-cell .panel {
140
160
  height: 100%;
141
161
  display: flex;
142
162
  flex-direction: column;
163
+ min-height: 0;
143
164
  }
144
165
 
145
166
  .dashboard-cell .panel-body {
146
167
  flex: 1;
147
168
  min-height: 0;
148
169
  overflow: auto;
170
+ -webkit-overflow-scrolling: touch;
149
171
  }
150
172
 
151
- .dashboard-cell-score .panel-body-score { flex: 1 1 auto; overflow: visible; }
173
+ .dashboard-cell-score .panel-body-score { flex: 0 1 auto; overflow: visible; min-height: 0; }
152
174
 
153
175
  .dashboard-cell-heatmap .panel-body-heatmap,
154
176
  .dashboard-cell-list .panel-body {
155
- min-height: 280px;
177
+ min-height: 0;
156
178
  }
157
179
 
158
180
  @media (max-width: 900px) {
181
+ body.dashboard-page { height: auto; overflow: auto; }
159
182
  .dashboard-grid-2x2 {
160
183
  grid-template-columns: 1fr;
161
184
  grid-template-rows: auto auto auto auto;
185
+ height: auto;
162
186
  }
187
+ .dashboard-cell-heatmap .panel-body-heatmap { min-height: 240px; }
188
+ .dashboard-cell-list .panel-body { min-height: 240px; }
163
189
  }
164
190
 
165
191
  @media (max-width: 560px) {
166
- .dashboard-header { padding: 0.6rem 1rem; }
167
- .dashboard-main { padding: 0.75rem 1rem; }
192
+ .dashboard-header { padding: 0.5rem 0.75rem; }
193
+ .dashboard-main { padding: 0.5rem 0.75rem; }
168
194
  }
169
195
 
170
- /* ——— Panels (Grafana-style) ——— */
196
+ /* ——— Panels: borders, colored accents ——— */
171
197
  .panel {
172
198
  background: var(--surface);
173
199
  border: 1px solid var(--border);
@@ -177,94 +203,154 @@ body.dashboard-page {
177
203
  }
178
204
 
179
205
  .panel-header {
180
- padding: 0.75rem 1rem;
206
+ padding: 0.6rem 0.85rem;
181
207
  border-bottom: 1px solid var(--border-subtle);
182
- background: rgba(0, 0, 0, 0.03);
208
+ background: rgba(0, 0, 0, 0.04);
209
+ flex-shrink: 0;
183
210
  }
184
211
 
212
+ .panel-header-accent { border-left: 3px solid var(--tier-4); }
213
+ .panel-header-accent-orange { border-left: 3px solid var(--tier-2); }
214
+ .panel-header-accent-blue { border-left: 3px solid var(--link); }
215
+
216
+ .panel-score-tier-1 .panel-header-accent { border-left-color: var(--tier-1); }
217
+ .panel-score-tier-2 .panel-header-accent { border-left-color: var(--tier-2); }
218
+ .panel-score-tier-3 .panel-header-accent { border-left-color: var(--tier-3); }
219
+ .panel-score-tier-4 .panel-header-accent { border-left-color: var(--tier-4); }
220
+ .panel-score-tier-5 .panel-header-accent { border-left-color: var(--tier-5); }
221
+
185
222
  [data-theme="light"] .panel-header {
186
223
  background: rgba(0, 0, 0, 0.02);
187
224
  }
188
225
 
189
226
  .panel-title {
190
227
  margin: 0;
191
- font-size: 13px;
192
- font-weight: 600;
228
+ font-size: 12px;
229
+ font-weight: 700;
193
230
  color: var(--text);
194
- letter-spacing: -0.01em;
231
+ letter-spacing: 0.02em;
232
+ text-transform: uppercase;
195
233
  }
196
234
 
197
235
  .panel-desc {
198
- margin: 0.25rem 0 0;
199
- font-size: 12px;
236
+ margin: 0.2rem 0 0;
237
+ font-size: 11px;
200
238
  color: var(--text-muted);
201
- line-height: 1.4;
239
+ line-height: 1.35;
202
240
  }
203
241
 
204
242
  .panel-body {
205
- padding: 1rem;
243
+ padding: 0.85rem 1rem;
206
244
  }
207
245
 
208
246
  .panel-body-center {
209
247
  text-align: center;
210
248
  }
211
249
 
212
- /* ——— Score panel (top-left: shield + caption + stats) ——— */
250
+ /* ——— Score panel: shield + big number + tier color ——— */
251
+ .panel-score {
252
+ border-top: 2px solid transparent;
253
+ }
254
+ .panel-score-tier-1 { border-top-color: var(--tier-1); }
255
+ .panel-score-tier-2 { border-top-color: var(--tier-2); }
256
+ .panel-score-tier-3 { border-top-color: var(--tier-3); }
257
+ .panel-score-tier-4 { border-top-color: var(--tier-4); }
258
+ .panel-score-tier-5 { border-top-color: var(--tier-5); }
259
+
213
260
  .panel-score .panel-body-score {
214
261
  text-align: center;
215
- padding: 1.25rem 1rem;
262
+ padding: 1rem 0.85rem;
216
263
  }
217
264
 
218
- .panel-score .score-badge {
219
- display: inline-block;
220
- margin-bottom: 0.75rem;
265
+ .score-display {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ gap: 1rem;
270
+ margin-bottom: 0.6rem;
271
+ flex-wrap: wrap;
272
+ }
273
+
274
+ .score-shield-wrap {
221
275
  line-height: 0;
276
+ flex-shrink: 0;
222
277
  }
223
278
 
224
279
  .panel-score .score-badge-svg {
225
280
  display: block;
226
- width: 100px;
281
+ width: 72px;
227
282
  height: auto;
228
- margin: 0 auto;
229
283
  }
230
284
 
231
285
  .panel-score .score-badge-svg .score-badge-num {
232
- font-size: 36px;
233
- font-weight: 800;
234
- letter-spacing: -0.02em;
286
+ font-size: 28px;
287
+ font-weight: 900;
288
+ letter-spacing: -0.03em;
289
+ fill: #fff;
235
290
  }
236
291
 
237
292
  .panel-score .score-badge-svg .score-badge-of {
238
- font-size: 11px;
293
+ font-size: 10px;
239
294
  font-weight: 700;
240
- letter-spacing: 0.08em;
295
+ letter-spacing: 0.1em;
241
296
  text-transform: uppercase;
242
- opacity: 0.95;
297
+ fill: rgba(255,255,255,0.95);
243
298
  }
244
299
 
245
- .panel-score .score-label {
246
- margin: 0 0 0.25rem;
247
- font-size: 1rem;
300
+ .score-numeric {
301
+ display: flex;
302
+ align-items: baseline;
303
+ gap: 0.2rem;
304
+ }
305
+
306
+ .score-num {
307
+ font-size: 2.25rem;
308
+ font-weight: 800;
309
+ line-height: 1;
310
+ letter-spacing: -0.04em;
311
+ }
312
+
313
+ .panel-score-tier-1 .score-num { color: var(--tier-1); }
314
+ .panel-score-tier-2 .score-num { color: var(--tier-2); }
315
+ .panel-score-tier-3 .score-num { color: var(--tier-3); }
316
+ .panel-score-tier-4 .score-num { color: var(--tier-4); }
317
+ .panel-score-tier-5 .score-num { color: var(--tier-5); }
318
+
319
+ .score-of {
320
+ font-size: 0.95rem;
248
321
  font-weight: 600;
249
- color: var(--text);
322
+ color: var(--text-muted);
323
+ }
324
+
325
+ .panel-score .score-label {
326
+ margin: 0 0 0.2rem;
327
+ font-size: 0.95rem;
328
+ font-weight: 700;
250
329
  }
251
330
 
331
+ .panel-score-tier-1 .score-label { color: var(--tier-1); }
332
+ .panel-score-tier-2 .score-label { color: var(--tier-2); }
333
+ .panel-score-tier-3 .score-label { color: var(--tier-3); }
334
+ .panel-score-tier-4 .score-label { color: var(--tier-4); }
335
+ .panel-score-tier-5 .score-label { color: var(--tier-5); }
336
+
252
337
  .panel-score .score-desc {
253
- margin: 0 0 0.5rem;
254
- font-size: 13px;
338
+ margin: 0 0 0.4rem;
339
+ font-size: 12px;
255
340
  color: var(--text-muted);
256
- line-height: 1.45;
257
- max-width: 280px;
341
+ line-height: 1.4;
342
+ max-width: 260px;
258
343
  margin-left: auto;
259
344
  margin-right: auto;
260
345
  }
261
346
 
262
347
  .panel-score .score-stats {
263
348
  margin: 0;
264
- font-size: 11px;
349
+ font-size: 10px;
265
350
  color: var(--text-muted);
266
351
  text-transform: uppercase;
267
- letter-spacing: 0.03em;
352
+ letter-spacing: 0.04em;
353
+ font-weight: 600;
268
354
  }
269
355
 
270
356
  /* ——— Description of problems panel (top-right) ——— */
@@ -278,19 +364,19 @@ body.dashboard-page {
278
364
  .priority-inline {
279
365
  display: grid;
280
366
  grid-template-columns: 1fr 1fr;
281
- gap: 1rem;
282
- margin-top: 1rem;
283
- padding-top: 1rem;
367
+ gap: 0.75rem;
368
+ margin-top: 0.75rem;
369
+ padding-top: 0.75rem;
284
370
  border-top: 1px solid var(--border-subtle);
285
371
  }
286
372
 
287
373
  .priority-inline h4 {
288
- margin: 0 0 0.5rem;
289
- font-size: 11px;
290
- font-weight: 600;
374
+ margin: 0 0 0.35rem;
375
+ font-size: 10px;
376
+ font-weight: 700;
291
377
  text-transform: uppercase;
292
- letter-spacing: 0.04em;
293
- color: var(--text-muted);
378
+ letter-spacing: 0.05em;
379
+ color: var(--tier-2);
294
380
  }
295
381
 
296
382
  .priority-inline .priority-list { margin: 0; }
@@ -324,10 +410,11 @@ body.dashboard-page {
324
410
  border-radius: var(--radius);
325
411
  }
326
412
 
327
- /* LLM panel accent */
413
+ /* Problems panel: blue accent */
328
414
  .panel-llm {
329
415
  border-left: 3px solid var(--link);
330
416
  }
417
+ .panel-llm .panel-header { border-left: none; }
331
418
 
332
419
  /* ——— Banner ——— */
333
420
  .no-llm-banner {
@@ -373,11 +460,11 @@ body.dashboard-page {
373
460
  outline-offset: 1px;
374
461
  }
375
462
 
376
- .treemap-cell[data-severity="critical"] { background: #c00; color: #fff; border-color: #900; }
377
- .treemap-cell[data-severity="high"] { background: #e85d00; color: #fff; border-color: #b84a00; }
378
- .treemap-cell[data-severity="medium"] { background: #b8860b; color: #fff; border-color: #8b6914; }
379
- .treemap-cell[data-severity="low"] { background: #0a6b0a; color: #fff; border-color: #064906; }
380
- .treemap-cell[data-severity="none"] { background: var(--border); color: var(--text-muted); border-color: var(--border); }
463
+ .treemap-cell[data-severity="critical"] { background: var(--tier-1); color: #fff; border-color: rgba(0,0,0,0.2); }
464
+ .treemap-cell[data-severity="high"] { background: var(--tier-2); color: #fff; border-color: rgba(0,0,0,0.15); }
465
+ .treemap-cell[data-severity="medium"] { background: var(--tier-3); color: #1a1a1a; border-color: rgba(0,0,0,0.1); }
466
+ .treemap-cell[data-severity="low"] { background: var(--tier-5); color: #fff; border-color: rgba(0,0,0,0.1); }
467
+ .treemap-cell[data-severity="none"] { background: var(--border); color: var(--text-muted); border-color: var(--border-subtle); }
381
468
 
382
469
  .legend {
383
470
  display: flex;
@@ -389,12 +476,12 @@ body.dashboard-page {
389
476
  color: var(--text-muted);
390
477
  }
391
478
 
392
- .legend span { display: inline-flex; align-items: center; gap: 0.35rem; }
393
- .legend .swatch { width: 10px; height: 10px; border-radius: 2px; }
394
- .legend .swatch-crit { background: #c00; }
395
- .legend .swatch-high { background: #e85d00; }
396
- .legend .swatch-med { background: #b8860b; }
397
- .legend .swatch-low { background: #0a6b0a; }
479
+ .legend span { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 11px; font-weight: 600; }
480
+ .legend .swatch { width: 12px; height: 12px; border-radius: 3px; }
481
+ .legend .swatch-crit { background: var(--tier-1); }
482
+ .legend .swatch-high { background: var(--tier-2); }
483
+ .legend .swatch-med { background: var(--tier-3); }
484
+ .legend .swatch-low { background: var(--tier-5); }
398
485
  .legend .swatch-none { background: var(--border); }
399
486
 
400
487
  /* ——— Priority lists ——— */
@@ -460,12 +547,12 @@ body.dashboard-page {
460
547
  border-radius: 3px;
461
548
  }
462
549
 
463
- .badge-critical { background: #c00; color: #fff; }
464
- .badge-high { background: #e85d00; color: #fff; }
465
- .badge-medium { background: #b8860b; color: #fff; }
466
- .badge-low { background: #0a6b0a; color: #fff; }
550
+ .badge-critical { background: var(--tier-1); color: #fff; font-weight: 700; }
551
+ .badge-high { background: var(--tier-2); color: #fff; font-weight: 700; }
552
+ .badge-medium { background: var(--tier-3); color: #1a1a1a; font-weight: 700; }
553
+ .badge-low { background: var(--tier-5); color: #fff; font-weight: 700; }
467
554
  .badge-none { background: var(--border); color: var(--text-muted); }
468
- .badge-llm { background: var(--link); color: #fff; }
555
+ .badge-llm { background: var(--link); color: #fff; font-weight: 700; }
469
556
 
470
557
  /* ——— Detail modal ——— */
471
558
  #detail {
@@ -14,25 +14,25 @@ export async function generateHtmlReport(run, options) {
14
14
  const html = buildHtml(run, title, darkMode, css, script);
15
15
  await writeFile(outputPath, html, "utf-8");
16
16
  }
17
- /** Inline SVG badge: shield shape with tier number and "of 5". */
17
+ /** Inline SVG badge: shield shape with tier number and "of 5" — clean, bold, tier-colored. */
18
18
  function buildScoreBadgeSvg(tier, fillColor) {
19
- const lighter = adjustHexBrightness(fillColor, 1.3);
19
+ const lighter = adjustHexBrightness(fillColor, 1.25);
20
20
  const shadowId = "badge-shadow-" + tier;
21
21
  const gradientId = "badge-shine-" + tier;
22
22
  return `<svg class="score-badge-svg" viewBox="0 0 140 168" xmlns="http://www.w3.org/2000/svg" role="img">
23
23
  <defs>
24
24
  <linearGradient id="${gradientId}" x1="0%" y1="0%" x2="0%" y2="100%">
25
- <stop offset="0%" style="stop-color:${lighter};stop-opacity:0.5" />
25
+ <stop offset="0%" style="stop-color:${lighter};stop-opacity:0.6" />
26
26
  <stop offset="100%" style="stop-color:${fillColor};stop-opacity:1" />
27
27
  </linearGradient>
28
- <filter id="${shadowId}" x="-30%" y="-20%" width="160%" height="150%">
29
- <feDropShadow dx="0" dy="6" stdDeviation="8" flood-opacity="0.35"/>
28
+ <filter id="${shadowId}" x="-40%" y="-30%" width="180%" height="180%">
29
+ <feDropShadow dx="0" dy="4" stdDeviation="6" flood-color="${fillColor}" flood-opacity="0.4"/>
30
30
  </filter>
31
31
  </defs>
32
32
  <path fill="url(#${gradientId})" filter="url(#${shadowId})" d="M70 12 C108 12 128 38 128 72 C128 106 70 156 70 156 C70 156 12 106 12 72 C12 38 32 12 70 12 Z"/>
33
- <path fill="none" stroke="rgba(255,255,255,0.4)" stroke-width="2.5" stroke-linejoin="round" d="M70 12 C108 12 128 38 128 72 C128 106 70 156 70 156 C70 156 12 106 12 72 C12 38 32 12 70 12 Z"/>
34
- <text x="70" y="78" text-anchor="middle" class="score-badge-num" fill="white">${tier}</text>
35
- <text x="70" y="100" text-anchor="middle" class="score-badge-of" fill="white">of 5</text>
33
+ <path fill="none" stroke="rgba(255,255,255,0.5)" stroke-width="2" stroke-linejoin="round" d="M70 12 C108 12 128 38 128 72 C128 106 70 156 70 156 C70 156 12 106 12 72 C12 38 32 12 70 12 Z"/>
34
+ <text x="70" y="80" text-anchor="middle" class="score-badge-num" fill="white">${tier}</text>
35
+ <text x="70" y="102" text-anchor="middle" class="score-badge-of" fill="rgba(255,255,255,0.95)">of 5</text>
36
36
  </svg>`;
37
37
  }
38
38
  function adjustHexBrightness(hex, factor) {
@@ -113,12 +113,18 @@ function buildHtml(run, title, darkMode, css, script) {
113
113
  <main class="dashboard-main">
114
114
  <div class="dashboard-grid-2x2">
115
115
  <div class="dashboard-cell dashboard-cell-score">
116
- <div class="panel panel-score tier-${cleanliness.tier}">
117
- <div class="panel-header">
116
+ <div class="panel panel-score panel-score-tier-${cleanliness.tier}">
117
+ <div class="panel-header panel-header-accent">
118
118
  <h2 class="panel-title">Technical Debt Cleanliness Score</h2>
119
119
  </div>
120
120
  <div class="panel-body panel-body-score">
121
- <div class="score-badge" aria-hidden="true">${scoreBadgeSvg}</div>
121
+ <div class="score-display">
122
+ <div class="score-shield-wrap" aria-hidden="true">${scoreBadgeSvg}</div>
123
+ <div class="score-numeric">
124
+ <span class="score-num">${cleanliness.tier}</span>
125
+ <span class="score-of">of 5</span>
126
+ </div>
127
+ </div>
122
128
  <p class="score-label">${escapeHtml(cleanliness.label)}</p>
123
129
  <p class="score-desc">${escapeHtml(cleanliness.description)}</p>
124
130
  <p class="score-stats">${statsLine}</p>
@@ -154,7 +160,7 @@ function buildHtml(run, title, darkMode, css, script) {
154
160
  </div>
155
161
 
156
162
  <div class="dashboard-cell dashboard-cell-heatmap">
157
- <div class="panel panel-heatmap">
163
+ <div class="panel panel-heatmap panel-header-accent-orange">
158
164
  <div class="panel-header panel-header-heatmap">
159
165
  <h2 class="panel-title">Files by debt</h2>
160
166
  <p class="panel-desc">Size = complexity + churn. Color = severity. Click for details.</p>
@@ -173,7 +179,7 @@ function buildHtml(run, title, darkMode, css, script) {
173
179
  </div>
174
180
 
175
181
  <div class="dashboard-cell dashboard-cell-list">
176
- <div class="panel">
182
+ <div class="panel panel-header-accent-blue">
177
183
  <div class="panel-header">
178
184
  <h2 class="panel-title">Ratings & files</h2>
179
185
  <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.4",
3
+ "version": "0.2.5",
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",