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% ;
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 );
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 layout — used by card variant and mobile list variant
133+ Card variant — vertical stack
88134 ========================================================================== */
89135
90136.library-item--card {
91137 display : grid;
92138 grid-template-columns : 1fr auto;
93- max-width : 320 px ;
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 {
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