Skip to content

Commit d1479e1

Browse files
CopilotBoshen
andcommitted
Convert NPM Downloads page to tight list format with adjacent package names and badges
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
1 parent 7281150 commit d1479e1

File tree

2 files changed

+60
-117
lines changed

2 files changed

+60
-117
lines changed

apps/dashboard/src/App.css

Lines changed: 34 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -323,99 +323,62 @@
323323
border-bottom: 2px solid #e2e8f0;
324324
}
325325

326-
/* NPM Downloads Table */
327-
.npm-downloads-table-container {
326+
/* NPM Downloads List */
327+
.npm-downloads-list-container {
328328
margin-bottom: 2rem;
329-
border-radius: 0.75rem;
330-
overflow: hidden;
329+
border-radius: 0.5rem;
331330
border: 1px solid #e2e8f0;
332-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
333-
}
334-
335-
.npm-downloads-table {
336-
width: 100%;
337-
border-collapse: collapse;
338331
background: white;
332+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
339333
}
340334

341-
.npm-downloads-table thead {
342-
background: #f8fafc;
343-
border-bottom: 2px solid #e2e8f0;
344-
}
345-
346-
.npm-downloads-table th {
347-
padding: 1rem 1.5rem;
348-
text-align: left;
349-
font-weight: 600;
350-
color: #374151;
351-
font-size: 0.875rem;
352-
text-transform: uppercase;
353-
letter-spacing: 0.05em;
354-
}
355-
356-
.npm-downloads-table th:first-child {
357-
width: 40%;
358-
}
359-
360-
.npm-downloads-table th:last-child {
361-
width: 60%;
362-
text-align: center;
335+
.npm-downloads-list {
336+
list-style: none;
337+
padding: 0;
338+
margin: 0;
363339
}
364340

365-
.npm-download-row {
341+
.npm-download-item {
342+
display: flex;
343+
align-items: center;
344+
justify-content: space-between;
345+
padding: 0.75rem 1.25rem;
366346
border-bottom: 1px solid #e2e8f0;
367347
transition: all 0.2s ease;
368348
cursor: pointer;
349+
gap: 1rem;
369350
}
370351

371-
.npm-download-row:hover {
352+
.npm-download-item:hover {
372353
background: #f8fafc;
373-
transform: scale(1.01);
374-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
375354
}
376355

377-
.npm-download-row:focus {
356+
.npm-download-item:focus {
378357
outline: 2px solid #3b82f6;
379358
outline-offset: -2px;
380359
background: #f8fafc;
381360
}
382361

383-
.npm-download-row:last-child {
362+
.npm-download-item:last-child {
384363
border-bottom: none;
385364
}
386365

387-
.package-name-cell {
388-
padding: 1.5rem;
389-
vertical-align: middle;
390-
}
391-
392-
.download-badge-cell {
393-
padding: 1.5rem;
394-
text-align: center;
395-
vertical-align: middle;
396-
}
397-
398-
.package-name {
399-
color: #1e293b;
400-
font-size: 1rem;
401-
font-weight: 600;
402-
font-family: 'Courier New', Courier, monospace;
366+
.npm-download-item .package-name {
367+
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
368+
font-size: 0.9rem;
369+
font-weight: 500;
370+
color: #374151;
403371
background: #f1f5f9;
404-
padding: 0.5rem 0.75rem;
372+
padding: 0.375rem 0.75rem;
405373
border-radius: 0.375rem;
406374
border: 1px solid #cbd5e1;
407-
display: inline-block;
408-
}
409-
410-
.download-badge {
411-
display: flex;
412-
justify-content: center;
413-
align-items: center;
375+
min-width: fit-content;
414376
}
415377

416-
.download-badge img {
417-
max-width: 100%;
378+
.npm-download-item .download-badge {
418379
height: auto;
380+
max-height: 20px;
381+
flex-shrink: 0;
419382
}
420383

421384
/* Responsive Design */
@@ -442,30 +405,23 @@
442405
grid-template-columns: 1fr;
443406
}
444407

445-
.npm-downloads-table-container {
408+
.npm-downloads-list-container {
446409
margin-bottom: 1rem;
447410
}
448411

449-
.npm-downloads-table th,
450-
.npm-downloads-table td {
412+
.npm-download-item {
451413
padding: 0.75rem;
414+
flex-direction: column;
415+
align-items: flex-start;
416+
gap: 0.5rem;
452417
}
453418

454-
.npm-downloads-table th {
455-
font-size: 0.75rem;
456-
}
457-
458-
.npm-downloads-table th:first-child,
459-
.npm-downloads-table th:last-child {
460-
width: auto;
461-
}
462-
463-
.package-name {
419+
.npm-download-item .package-name {
464420
font-size: 0.875rem;
465421
padding: 0.375rem 0.5rem;
466422
}
467423

468-
.download-badge img {
424+
.npm-download-item .download-badge {
469425
max-width: 100%;
470426
height: auto;
471427
}

apps/dashboard/src/NpmDownloads.tsx

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,45 +25,32 @@ function NpmDownloads({}: NpmDownloadsProps) {
2525
<div className='chart-container'>
2626
<h2>NPM Weekly Downloads</h2>
2727

28-
<div className='npm-downloads-table-container'>
29-
<table className='npm-downloads-table'>
30-
<thead>
31-
<tr>
32-
<th>Package Name</th>
33-
<th>Weekly Downloads</th>
34-
</tr>
35-
</thead>
36-
<tbody>
37-
{packages.map((packageName) => (
38-
<tr
39-
key={packageName}
40-
className='npm-download-row'
41-
onClick={() => handleCardClick(packageName)}
42-
role="button"
43-
tabIndex={0}
44-
onKeyDown={(e) => {
45-
if (e.key === 'Enter' || e.key === ' ') {
46-
e.preventDefault();
47-
handleCardClick(packageName);
48-
}
49-
}}
50-
>
51-
<td className='package-name-cell'>
52-
<span className='package-name'>{packageName}</span>
53-
</td>
54-
<td className='download-badge-cell'>
55-
<div className='download-badge'>
56-
<img
57-
src={`https://img.shields.io/npm/dw/${packageName}?label=npm`}
58-
alt={`Weekly downloads for ${packageName}`}
59-
loading="lazy"
60-
/>
61-
</div>
62-
</td>
63-
</tr>
64-
))}
65-
</tbody>
66-
</table>
28+
<div className='npm-downloads-list-container'>
29+
<ul className='npm-downloads-list'>
30+
{packages.map((packageName) => (
31+
<li
32+
key={packageName}
33+
className='npm-download-item'
34+
onClick={() => handleCardClick(packageName)}
35+
role="button"
36+
tabIndex={0}
37+
onKeyDown={(e) => {
38+
if (e.key === 'Enter' || e.key === ' ') {
39+
e.preventDefault();
40+
handleCardClick(packageName);
41+
}
42+
}}
43+
>
44+
<span className='package-name'>{packageName}</span>
45+
<img
46+
className='download-badge'
47+
src={`https://img.shields.io/npm/dw/${packageName}?label=npm`}
48+
alt={`Weekly downloads for ${packageName}`}
49+
loading="lazy"
50+
/>
51+
</li>
52+
))}
53+
</ul>
6754
</div>
6855
</div>
6956

0 commit comments

Comments
 (0)