@ilo-org/styles 1.13.1 → 1.14.1

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.13.1",
4
+ "version": "1.14.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/international-labour-organization/designsystem.git",
@@ -41,6 +41,9 @@
41
41
  font-size: var(--ilo-font-size-sm);
42
42
  font-weight: var(--ilo-font-weight-medium);
43
43
  line-height: var(--ilo-line-height-lg);
44
+ text-overflow: ellipsis;
45
+ overflow: hidden;
46
+ white-space: nowrap;
44
47
  }
45
48
  &--track-details {
46
49
  display: flex;
@@ -195,6 +198,9 @@
195
198
  padding-inline: spacing(3) 0;
196
199
  padding-block: 0;
197
200
  }
201
+ &--track-name {
202
+ width: 30vw;
203
+ }
198
204
  &--center {
199
205
  justify-content: center;
200
206
  padding: 0;
@@ -35,7 +35,7 @@
35
35
  @include globaltransition("background-color");
36
36
  }
37
37
 
38
- &:has(select:hover):before {
38
+ &:has(select:enabled:hover):before {
39
39
  background-color: var(--ilo-dropdown-background-color-active);
40
40
  }
41
41
 
@@ -49,6 +49,28 @@
49
49
  top: var(--ilo-dropdown-button-icon-offset);
50
50
  @include icon("chevron_down", var(--ilo-dropdown-button-icon-color));
51
51
  }
52
+
53
+ &:has(select:disabled) {
54
+ --ilo-dropdown-button-icon-color: var(--ilo-dropdown-color);
55
+
56
+ &:after {
57
+ opacity: 0.45;
58
+ }
59
+
60
+ // manually adjusted the left border color to be slightly darker
61
+ &:before {
62
+ border-color: color-mix(
63
+ in srgb,
64
+ var(--ilo-dropdown-border-color) 45%,
65
+ transparent
66
+ );
67
+ border-inline-start-color: color-mix(
68
+ in srgb,
69
+ var(--ilo-dropdown-border-color) 60%,
70
+ transparent
71
+ );
72
+ }
73
+ }
52
74
  }
53
75
 
54
76
  appearance: none;
@@ -58,6 +80,7 @@
58
80
  color: var(--ilo-dropdown-color);
59
81
  width: 100%;
60
82
  margin: spacing(0);
83
+
61
84
  padding: 0 spacing(14) 0 spacing(4);
62
85
  text-overflow: ellipsis;
63
86
  white-space: nowrap;
@@ -68,15 +91,18 @@
68
91
  @include typography("body-medium");
69
92
  @include globaltransition("background-color, border-color, color");
70
93
 
71
- &:hover,
72
- &:focus,
73
- &:active {
94
+ &:enabled:is(:hover, :focus, :active) {
74
95
  border-inline-start-color: var(--ilo-color-blue);
75
96
  box-shadow: inset px-to-rem(1px) 0 0 0 var(--ilo-color-blue);
76
97
  background-color: var(--ilo-dropdown-background-color-active);
77
98
  --ilo-dropdown-color: var(--ilo-color-gray-charcoal);
78
99
  }
79
100
 
101
+ &:disabled {
102
+ pointer-events: none;
103
+ opacity: 0.45;
104
+ }
105
+
80
106
  [dir="rtl"] &:hover,
81
107
  [dir="rtl"] &:focus,
82
108
  [dir="rtl"] &:active {
@@ -242,7 +242,10 @@
242
242
  &[class*="semi-transparent"] {
243
243
  #{$c}--card-offset {
244
244
  background: rgba(35, 0, 80, 0.6);
245
- box-shadow: 0.3px 0 0 0 rgba(35, 0, 80, 0.6);
245
+ // No seam-bridging box-shadow here: with a translucent fill the
246
+ // shadow composites over the card's own semi-transparent layer,
247
+ // producing a darker hairline at the offset/card boundary.
248
+ box-shadow: none;
246
249
  }
247
250
  }
248
251
  }
@@ -256,7 +259,9 @@
256
259
  &[class*="semi-transparent"] {
257
260
  #{$c}--card-offset {
258
261
  background: rgba(255, 255, 255, 0.6);
259
- box-shadow: 0.3px 0 0 0 rgba(255, 255, 255, 0.6);
262
+ // See dark variant above: no box-shadow for translucent fills,
263
+ // otherwise the shadow doubles up into a darker seam line.
264
+ box-shadow: none;
260
265
  }
261
266
  }
262
267
  }
@@ -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);
@@ -167,6 +167,10 @@
167
167
  .vjs-volume-panel {
168
168
  display: none;
169
169
  }
170
+
171
+ .vjs-subs-caps-button {
172
+ display: none;
173
+ }
170
174
  }
171
175
  }
172
176
 
@@ -210,6 +214,154 @@
210
214
  @include videobutton("fullscreen");
211
215
  }
212
216
 
217
+ // Closed captions control
218
+ .vjs-subs-caps-button {
219
+ order: 3;
220
+ margin-right: px-to-rem(2px);
221
+ position: relative;
222
+ z-index: 30;
223
+
224
+ > .vjs-menu-button {
225
+ @include videobutton("closed_captions");
226
+ }
227
+
228
+ &.vjs-hover > .vjs-menu-button,
229
+ &:hover > .vjs-menu-button,
230
+ &:focus-within > .vjs-menu-button {
231
+ background-color: var(--ilo-color-blue-light);
232
+ @include dataurlicon("closed_captions", rgba(30, 45, 190, 1));
233
+ }
234
+
235
+ .vjs-menu {
236
+ background: var(--ilo-color-brand-100);
237
+ border: 0;
238
+ bottom: calc(100% + #{px-to-rem(8px)});
239
+ display: none;
240
+ left: 50%;
241
+ min-width: px-to-rem(190px);
242
+ position: absolute;
243
+ right: auto;
244
+ transform: translateX(-50%);
245
+ z-index: 40;
246
+ padding-top: px-to-rem(8px);
247
+
248
+ // gap added to ensure vjs-hover persists when hovering to menu from captions button
249
+ &::after {
250
+ content: "";
251
+ height: px-to-rem(8px);
252
+ left: 0;
253
+ position: absolute;
254
+ right: 0;
255
+ top: 100%;
256
+ }
257
+
258
+ &:before {
259
+ @include typography("highlight-medium-bold");
260
+ content: var(--ilo-video-choose-subtitle-text, "Choose subtitles");
261
+ color: var(--ilo-color-gray-charcoal);
262
+ display: block;
263
+ margin-bottom: spacing(2);
264
+ padding-left: px-to-rem(12px);
265
+ }
266
+ }
267
+
268
+ .vjs-menu.vjs-lock-showing:not(.vjs-hidden),
269
+ &.vjs-hover .vjs-menu:not(.vjs-hidden),
270
+ &:hover .vjs-menu:not(.vjs-hidden),
271
+ &:focus-within .vjs-menu:not(.vjs-hidden) {
272
+ display: block;
273
+ }
274
+
275
+ .vjs-menu-content {
276
+ margin: 0;
277
+ max-height: px-to-rem(120px);
278
+ overflow-y: auto;
279
+ padding: 0 0 px-to-rem(4px);
280
+ display: flex;
281
+ flex-direction: column;
282
+ gap: spacing(2);
283
+ }
284
+
285
+ .vjs-menu-item {
286
+ @include typography("body-small");
287
+ align-items: center;
288
+ color: var(--ilo-color-gray-charcoal);
289
+ display: flex;
290
+ gap: px-to-rem(8px);
291
+ line-height: px-to-rem(20px);
292
+ padding: px-to-rem(2px) px-to-rem(12px);
293
+ position: relative;
294
+ text-shadow: none;
295
+ white-space: nowrap;
296
+
297
+ &:hover {
298
+ background: var(--ilo-color-neutrals-200);
299
+ cursor: pointer;
300
+ }
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.
305
+ &:before {
306
+ content: "";
307
+ background-color: var(--ilo-color-gray-base);
308
+ border-radius: 50%;
309
+ height: px-to-rem(20px);
310
+ width: px-to-rem(20px);
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;
329
+ }
330
+
331
+ &.vjs-selected {
332
+ color: var(--ilo-color-gray-charcoal);
333
+
334
+ &:before {
335
+ background-color: var(--ilo-color-blue-dark);
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);
346
+ }
347
+ }
348
+
349
+ .vjs-menu-item[tabindex="-1"]:first-child .vjs-menu-item-text {
350
+ font-size: 0;
351
+ line-height: 0; // collapse the zeroed-text strut so it can't inflate the row
352
+
353
+ &:after {
354
+ @include typography("body-small");
355
+ content: var(--ilo-video-none, "None");
356
+ line-height: px-to-rem(20px);
357
+ }
358
+ }
359
+
360
+ .vjs-menu .vjs-icon-placeholder {
361
+ display: none;
362
+ }
363
+ }
364
+
213
365
  // Duration Bar
214
366
  .vjs-progress-control {
215
367
  order: 2;
@@ -287,7 +439,7 @@
287
439
 
288
440
  // Volume Control
289
441
  .vjs-volume-panel {
290
- order: 3;
442
+ order: 4;
291
443
  border-bottom: 1px solid;
292
444
  bottom: 0;
293
445
  flex-direction: column;