Skip to content

Commit 3a97755

Browse files
author
julioest
committed
fix: Card variant and grid layout #2204
Card grid layout, split actions into columns, mobile card overrides, icon sizing, and comments.
1 parent e872802 commit 3a97755

1 file changed

Lines changed: 116 additions & 76 deletions

File tree

static/css/v3/library-item.css

Lines changed: 116 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,21 @@
22
Library Item — list row and card variants
33
========================================================================== */
44

5+
/* Demo only: provides a contrasting background for the list variant in
6+
Lookbook/examples so the item surface colours are visible. Remove when
7+
the component is used on a real page with its own background. */
8+
.v3-examples-section__example-box:has(.library-item-list) {
9+
background: #F7FDFE;
10+
}
11+
12+
/* ---------- Base / reset ---------- */
13+
514
.library-item-list {
615
list-style: none;
716
margin: 0;
817
padding: 0;
918
display: grid;
10-
grid-template-columns: 160px 3fr minmax(180px, 2fr) minmax(180px, 2fr) auto;
19+
grid-template-columns: 160px 3fr minmax(180px, 2fr) minmax(180px, 2fr) auto auto;
1120
column-gap: var(--space-xl);
1221
max-width: 1408px;
1322
width: 100%;
@@ -22,16 +31,63 @@
2231
padding: 0;
2332
}
2433

34+
/* ---------- Shared element styles ---------- */
35+
36+
.library-item__name {
37+
font-family: var(--font-display);
38+
font-size: var(--font-size-base);
39+
font-weight: var(--font-weight-medium);
40+
line-height: var(--line-height-tight);
41+
letter-spacing: var(--letter-spacing-display-regular);
42+
color: var(--color-text-primary);
43+
text-decoration: none;
44+
}
45+
46+
a.library-item__name:hover {
47+
text-decoration: underline;
48+
}
49+
50+
.library-item__description {
51+
font-size: var(--font-size-small);
52+
font-weight: var(--font-weight-regular);
53+
line-height: var(--line-height-default);
54+
letter-spacing: -0.14px; /* no matching design token available */
55+
color: var(--color-text-secondary);
56+
}
57+
58+
.library-item .btn-icon-library {
59+
padding: 0;
60+
border: none;
61+
background: none;
62+
width: var(--space-large);
63+
}
64+
65+
.library-item .btn-icon-library .btn-icon svg {
66+
width: 100%;
67+
height: 100%;
68+
}
69+
70+
/* Version tag visibility — desktop shows the tag inside .library-item__actions,
71+
mobile/card shows the tag inline with category tags. */
72+
.library-item__cpp-version {
73+
display: none;
74+
}
75+
76+
.library-item__cpp-version--desktop {
77+
display: inline-flex;
78+
}
79+
2580
/* ==========================================================================
26-
List variant (horizontal row)
81+
List variant horizontal row (desktop)
2782
========================================================================== */
2883

2984
.library-item--list {
3085
display: grid;
3186
grid-column: 1 / -1;
3287
grid-template-columns: subgrid;
33-
align-items: flex-start;
88+
align-items: start;
3489
row-gap: var(--space-large);
90+
column-gap: var(--space-large);
3591
padding: var(--space-large);
3692
padding-top: var(--space-default);
3793
background: var(--color-surface-weak);
@@ -56,65 +112,52 @@
56112
}
57113

58114
.library-item--list .library-item__actions {
59-
display: flex;
60-
align-items: center;
61-
justify-content: space-between;
62-
gap: var(--space-xl);
63-
min-width: 120px;
64-
}
65-
66-
/* Show desktop version tag in actions, hide mobile one in tags */
67-
.library-item__cpp-version {
68-
display: none;
115+
display: contents;
69116
}
70117

71-
.library-item__cpp-version--desktop {
72-
display: inline-flex;
118+
/* Right-align the doc button with extra spacing from version tag */
119+
.library-item--list .library-item__actions > .btn-icon-library {
120+
justify-self: end;
121+
margin-left: var(--space-xl);
73122
}
74123

75-
.library-item .btn-icon-library {
76-
padding: 0;
77-
border: none;
78-
background: none;
79-
}
124+
/* ---------- Card grid — equal-width columns, equal-height rows ---------- */
80125

81-
.library-item .btn-icon-library .btn-icon svg {
82-
width: var(--space-xl);
83-
height: var(--space-xl);
126+
.library-item-card-grid {
127+
display: grid;
128+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
129+
gap: var(--space-large);
84130
}
85131

86132
/* ==========================================================================
87-
Card layoutused by card variant and mobile list variant
133+
Card variantvertical stack
88134
========================================================================== */
89135

90136
.library-item--card {
91137
display: grid;
92138
grid-template-columns: 1fr auto;
93-
max-width: 320px;
139+
column-gap: var(--space-large);
94140
width: 100%;
95141
border-radius: var(--border-radius-xl);
96142
border: 1px solid var(--color-stroke-weak);
97143
background: var(--color-surface-weak);
144+
padding: var(--space-large);
98145
}
99146

100147
.library-item--card .library-item__header {
101148
grid-column: 1;
102149
grid-row: 1;
103150
display: flex;
104151
flex-direction: column;
105-
gap: var(--space-default);
106-
padding: var(--space-large);
107-
padding-bottom: 0;
152+
gap: var(--space-large);
108153
}
109154

110155
.library-item--card .library-item__actions {
111156
grid-column: 2;
112157
grid-row: 1;
113158
display: flex;
114-
align-items: flex-start;
115-
justify-content: center;
116-
padding: var(--space-large);
117-
padding-bottom: 0;
159+
align-items: start;
160+
justify-content: end;
118161
}
119162

120163
.library-item--card .library-item__cpp-version--desktop {
@@ -126,66 +169,42 @@
126169
}
127170

128171
.library-item--card .library-item__tags {
129-
grid-column: 1 / -1;
130-
grid-row: 2;
131172
display: flex;
132173
flex-wrap: wrap;
133174
align-items: center;
134175
gap: var(--space-s);
135-
padding: var(--space-large);
136176
}
137177

138178
.library-item--card .library-item__contributor {
139179
grid-column: 1 / -1;
140-
grid-row: 3;
180+
grid-row: 2;
141181
display: flex;
142182
align-items: center;
143183
gap: var(--space-default);
144-
padding: var(--space-large);
145184
margin-top: auto;
185+
padding-top: var(--space-large);
146186
}
147187

148-
149188
/* ==========================================================================
150-
Shared element styles
151-
========================================================================== */
152-
153-
.library-item__name {
154-
font-family: var(--font-display);
155-
font-size: var(--font-size-base);
156-
font-weight: var(--font-weight-medium);
157-
line-height: var(--line-height-tight);
158-
letter-spacing: var(--letter-spacing-display-regular);
159-
color: var(--color-text-primary);
160-
text-decoration: none;
161-
}
162-
163-
a.library-item__name:hover {
164-
text-decoration: underline;
165-
}
166-
167-
.library-item__description {
168-
font-size: var(--font-size-small);
169-
font-weight: var(--font-weight-regular);
170-
line-height: var(--line-height-default);
171-
letter-spacing: -0.14px;
172-
color: var(--color-text-secondary);
173-
}
174-
175-
176-
/* ==========================================================================
177-
Tablet
189+
Tablet (≤ 1024px)
178190
========================================================================== */
179191

180192
@media (max-width: 1024px) {
181193
.library-item-list {
182-
grid-template-columns: 120px 2fr minmax(100px, 1fr) minmax(140px, 1fr) auto;
194+
grid-template-columns: 120px 2fr minmax(100px, 1fr) minmax(140px, 1fr) min-content auto;
195+
/* Figma specifies --space-large here, but long descriptions cause overflow
196+
at tablet widths. Using --space-default until content constraints are
197+
defined. */
183198
column-gap: var(--space-default);
184199
}
200+
201+
.library-item--list .library-item__actions > .btn-icon-library {
202+
margin-left: var(--space-default);
203+
}
185204
}
186205

187206
/* ==========================================================================
188-
Mobile
207+
Mobile (≤ 767px) — list items switch to card-like layout
189208
========================================================================== */
190209

191210
@media (max-width: 767px) {
@@ -194,13 +213,14 @@ a.library-item__name:hover {
194213
flex-direction: column;
195214
}
196215

216+
/* Container — stacked cards with shared borders */
197217
.library-item--list {
198218
display: grid;
199219
grid-template-columns: 1fr auto;
200220
border-bottom: 1px solid var(--color-stroke-weak);
201221
border-radius: 0;
202222
background: var(--color-surface-weak);
203-
padding: 0;
223+
padding: var(--space-large);
204224
}
205225

206226
.library-item--list:first-child {
@@ -216,27 +236,29 @@ a.library-item__name:hover {
216236
border-radius: var(--border-radius-xl);
217237
}
218238

239+
/* Header — name + description, left column */
219240
.library-item--list .library-item__header {
220241
grid-column: 1;
221242
grid-row: 1;
222243
display: flex;
223244
flex-direction: column;
224245
gap: var(--space-default);
225-
padding: var(--space-large);
246+
226247
padding-bottom: 0;
227248
}
228249

250+
/* Actions — doc icon only, top-right */
229251
.library-item--list .library-item__actions {
230252
grid-column: 2;
231253
grid-row: 1;
232254
display: flex;
233-
align-items: flex-start;
234-
justify-content: flex-end;
255+
align-items: start;
256+
justify-content: end;
235257
min-width: unset;
236-
padding: var(--space-large);
237-
padding-bottom: 0;
258+
padding: 0;
238259
}
239260

261+
/* Version tag swap — hide desktop, show mobile (inline with tags) */
240262
.library-item--list .library-item__cpp-version--desktop {
241263
display: none;
242264
}
@@ -245,24 +267,42 @@ a.library-item__name:hover {
245267
display: inline-flex;
246268
}
247269

270+
/* Tags — category tags + C++ version, full width */
248271
.library-item--list .library-item__tags {
249272
grid-column: 1 / -1;
250273
grid-row: 2;
251274
display: flex;
252275
flex-wrap: wrap;
253276
align-items: center;
254277
gap: var(--space-s);
255-
padding: var(--space-large);
278+
256279
}
257280

281+
/* Contributor — full width, bottom */
258282
.library-item--list .library-item__contributor {
259283
grid-column: 1 / -1;
260284
grid-row: 3;
261285
display: flex;
262286
align-items: center;
263287
gap: var(--space-default);
264288
border-top: none;
265-
padding: var(--space-large);
289+
266290
margin-top: auto;
267291
}
292+
293+
/* ---------- Card variant — mobile overrides ---------- */
294+
295+
.library-item--card {
296+
max-width: none;
297+
padding: var(--space-large);
298+
gap: var(--space-large);
299+
}
300+
301+
.library-item--card .library-item__header,
302+
.library-item--card .library-item__actions,
303+
.library-item--card .library-item__tags,
304+
.library-item--card .library-item__contributor {
305+
padding: 0;
306+
}
307+
268308
}

0 commit comments

Comments
 (0)