@ilo-org/styles 1.14.0 → 1.14.2

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ilo-org/styles",
3
3
  "description": "Styles for products using ILO's Design System",
4
- "version": "1.14.0",
4
+ "version": "1.14.2",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/international-labour-organization/designsystem.git",
@@ -38,12 +38,27 @@
38
38
  padding-block-end: spacing(3);
39
39
  }
40
40
  &--track-name {
41
+ // `display: block` is required for the ellipsis to apply: when `nameHref`
42
+ // is set the name renders as an inline `<a>`, and text-overflow/overflow
43
+ // are no-ops on inline elements, so long linked titles would overflow
44
+ // instead of truncating.
45
+ display: block;
41
46
  font-size: var(--ilo-font-size-sm);
42
47
  font-weight: var(--ilo-font-weight-medium);
43
48
  line-height: var(--ilo-line-height-lg);
49
+ text-overflow: ellipsis;
50
+ overflow: hidden;
51
+ white-space: nowrap;
44
52
  }
45
53
  &--track-details {
46
- display: flex;
54
+ // Block (not flex) so the combined "programme • creator" line truncates
55
+ // with an ellipsis when it overflows; text-overflow is a no-op on a flex
56
+ // container. The child spans stay inline, so the bullet separator and
57
+ // spacing are unchanged.
58
+ display: block;
59
+ overflow: hidden;
60
+ text-overflow: ellipsis;
61
+ white-space: nowrap;
47
62
  font-size: var(--ilo-font-size-xsm);
48
63
  line-height: var(--ilo-line-height-xlg);
49
64
  color: var(--ilo-color-gray-light);
@@ -186,18 +201,34 @@
186
201
 
187
202
  @include breakpoint("md") {
188
203
  &--body {
189
- grid-template-columns: 1fr 1fr 1fr;
204
+ // The center column hugs its content while the equal minmax(0, 1fr) side
205
+ // tracks keep it optically centered. minmax(0, 1fr) (not plain 1fr, which
206
+ // has an implicit min-content floor) lets the side tracks shrink below
207
+ // their content so the title/authors can truncate instead of pushing the
208
+ // center off-axis.
209
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
190
210
  grid-template-rows: auto;
191
211
  grid-template-areas: "left center right";
192
212
  }
193
213
  &--left {
194
214
  border-bottom: none;
195
- padding-inline: spacing(3) 0;
196
215
  padding-block: 0;
216
+ // Trailing gap separating the title/authors from the centered controls.
217
+ // The 5vw term scales with the viewport — tighter when narrow, roomier
218
+ // when wide. vw (not %, which resolves against this item's own narrow grid
219
+ // track and so never reaches the bounds) ties the gap to viewport width so
220
+ // the clamp's floor (narrow `md`) and ceiling (ultra-wide) actually engage.
221
+ padding-inline: spacing(3) clamp(spacing(3), 4vw, spacing(11));
222
+ // Allow the column to shrink below its content's intrinsic width so the
223
+ // title/authors can truncate.
224
+ min-width: 0;
197
225
  }
198
226
  &--center {
199
227
  justify-content: center;
200
- padding: 0;
228
+ // Horizontal padding gives the play controls breathing room from the
229
+ // title (left) and time/volume cluster (right). The center track is
230
+ // auto-sized, so this widens the gap on both sides while staying centered.
231
+ padding-block: 0;
201
232
  }
202
233
  &--volume-slider {
203
234
  width: 40%;
@@ -6,7 +6,7 @@
6
6
  // Video Button
7
7
  // ======================================
8
8
  @mixin videobutton($name, $size: "standard") {
9
- $height: if($size == "big", 72px, 32px);
9
+ $height: if($size == "big", 72px, 24px);
10
10
  $box: if($size == "big", 80px, 40px);
11
11
  $width: $height;
12
12
  $icon-color-default: rgba(237, 240, 242, 1);
@@ -233,7 +233,7 @@
233
233
  }
234
234
 
235
235
  .vjs-menu {
236
- background: var(--ilo-color-brand-200);
236
+ background: var(--ilo-color-brand-100);
237
237
  border: 0;
238
238
  bottom: calc(100% + #{px-to-rem(8px)});
239
239
  display: none;
@@ -243,7 +243,7 @@
243
243
  right: auto;
244
244
  transform: translateX(-50%);
245
245
  z-index: 40;
246
- padding-top: px-to-rem(28px);
246
+ padding-top: px-to-rem(8px);
247
247
 
248
248
  // gap added to ensure vjs-hover persists when hovering to menu from captions button
249
249
  &::after {
@@ -256,13 +256,12 @@
256
256
  }
257
257
 
258
258
  &:before {
259
- @include typography("body-xsmall");
259
+ @include typography("highlight-medium-bold");
260
260
  content: var(--ilo-video-choose-subtitle-text, "Choose subtitles");
261
261
  color: var(--ilo-color-gray-charcoal);
262
- font-weight: var(--ilo-font-weight-bold);
263
- left: px-to-rem(12px);
264
- position: absolute;
265
- top: px-to-rem(8px);
262
+ display: block;
263
+ margin-bottom: spacing(2);
264
+ padding-left: px-to-rem(12px);
266
265
  }
267
266
  }
268
267
 
@@ -278,10 +277,13 @@
278
277
  max-height: px-to-rem(120px);
279
278
  overflow-y: auto;
280
279
  padding: 0 0 px-to-rem(4px);
280
+ display: flex;
281
+ flex-direction: column;
282
+ gap: spacing(2);
281
283
  }
282
284
 
283
285
  .vjs-menu-item {
284
- @include typography("body-xsmall");
286
+ @include typography("body-small");
285
287
  align-items: center;
286
288
  color: var(--ilo-color-gray-charcoal);
287
289
  display: flex;
@@ -294,37 +296,63 @@
294
296
 
295
297
  &:hover {
296
298
  background: var(--ilo-color-neutrals-200);
299
+ cursor: pointer;
297
300
  }
298
301
 
302
+ // Radio control — mirrors .ilo--radio in _radio.scss:
303
+ // :before is the outer 20px circle (in flow, reserves space),
304
+ // :after is the inner 14px dot overlaid on top.
299
305
  &:before {
300
- background: transparent;
301
- border: 2px solid var(--ilo-color-neutrals-500);
302
- border-radius: 50%;
303
306
  content: "";
304
- display: inline-block;
305
- height: px-to-rem(10px);
306
- width: px-to-rem(10px);
307
+ background-color: var(--ilo-color-gray-base);
308
+ border-radius: 50%;
309
+ height: px-to-rem(20px);
310
+ width: px-to-rem(20px);
307
311
  flex-shrink: 0;
312
+ display: inline-block;
313
+ }
314
+
315
+ &:after {
316
+ content: "";
317
+ background-color: var(--ilo-color-gray-base);
318
+ border: px-to-rem(4px) solid var(--ilo-color-gray-base);
319
+ border-radius: 50%;
320
+ height: px-to-rem(14px);
321
+ width: px-to-rem(14px);
322
+ // padding-left (12px) + radio's 3px inset
323
+ left: px-to-rem(15px);
324
+ top: 50%;
325
+ transform: translateY(-50%);
326
+ position: absolute;
327
+ z-index: 1;
328
+ pointer-events: none;
308
329
  }
309
330
 
310
331
  &.vjs-selected {
311
332
  color: var(--ilo-color-gray-charcoal);
312
333
 
313
334
  &:before {
314
- border-color: var(--ilo-color-neutrals-black);
315
- box-shadow: inset 0 0 0 px-to-rem(2px) var(--ilo-color-neutrals-200);
316
- background: var(--ilo-color-neutrals-black);
335
+ background-color: var(--ilo-color-blue-dark);
317
336
  }
337
+
338
+ &:after {
339
+ background-color: var(--ilo-color-blue-lighter);
340
+ border-color: var(--ilo-color-blue-dark);
341
+ }
342
+ }
343
+
344
+ &:focus:before {
345
+ background-color: var(--ilo-color-yellow);
318
346
  }
319
347
  }
320
348
 
321
349
  .vjs-menu-item[tabindex="-1"]:first-child .vjs-menu-item-text {
322
350
  font-size: 0;
351
+ line-height: 0; // collapse the zeroed-text strut so it can't inflate the row
323
352
 
324
353
  &:after {
325
- @include typography("body-xsmall");
354
+ @include typography("body-small");
326
355
  content: var(--ilo-video-none, "None");
327
- font-size: px-to-rem(12px);
328
356
  line-height: px-to-rem(20px);
329
357
  }
330
358
  }