@sc-360-v2/storefront-cms-library 0.5.51 → 0.5.52

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.
@@ -1,74 +1,78 @@
1
- @use "sass:map";
2
- @use "sass:list";
3
-
4
- $resizerId: "[data-cms-tool='cms-element-resizer']";
5
- $resizeActive: '[data-cms-element-resizer="true"]';
6
-
7
- [data-div-type="element"] {
8
- &[data-element-type="iconLibrary"] {
9
- width: var(
10
- --_sf-el-wh-st-mx,
11
- calc(
12
- 1% *
13
- var(
14
- --_ctm-mob-ele-nw-wh-vl,
15
- var(--_ctm-tab-ele-nw-wh-vl, var(--_ctm-ele-nw-wh-vl, var(--_sf-nw-wh)))
16
- )
17
- )
18
- );
19
- margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
20
- // height: var(--_ctm-lt-ht, --_tst-lt-ht);
21
-
22
- & > .wrapper {
23
- width: 100%;
24
- height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht))) !important;
25
- }
26
- &[data-widget-border="true"] .icon__container {
27
- border-color: var(--_ctm-mob-dn-br-cr, var(--_ctm-tab-dn-br-cr, var(--_ctm-dn-br-cr)));
28
- border-style: var(--_ctm-mob-dn-br-se, var(--_ctm-tab-dn-br-se, var(--_ctm-dn-br-se)));
29
- border-width: var(--_ctm-mob-dn-br-wh, var(--_ctm-tab-dn-br-wh, var(--_ctm-dn-br-wh)));
30
- }
31
-
32
- &[data-widget-shadow="true"] .icon__container {
33
- box-shadow: var(--_ctm-mob-dn-sw-ae, var(--_ctm-tab-dn-sw-ae, var(--_ctm-dn-sw-ae)))
34
- var(--_ctm-mob-dn-sw-br, var(--_ctm-tab-dn-sw-br, var(--_ctm-dn-sw-br)))
35
- var(--_ctm-mob-dn-sw-sd, var(--_ctm-tab-dn-sw-sd, var(--_ctm-dn-sw-sd)))
36
- var(--_ctm-mob-dn-sw-cr, var(--_ctm-tab-dn-sw-cr, var(--_ctm-dn-sw-cr)));
37
- }
38
-
39
- &[data-widget-shadow="false"] .icon__container {
40
- box-shadow: none;
41
- }
42
-
43
- .icon__container {
44
- display: flex;
45
- justify-content: center;
46
- align-items: center;
47
- width: 100%;
48
- height: 100%;
49
- padding: var(--_ctm-mob-lt-pg, var(--_ctm-tab-lt-pg, var(--_ctm-lt-pg)));
50
- background-color: var(--_ctm-mob-dn-bd-cr, var(--_ctm-tab-dn-bd-cr, var(--_ctm-dn-bd-cr)));
51
- border-radius: var(--_ctm-mob-dn-br-rs, var(--_ctm-tab-dn-br-rs, var(--_ctm-dn-br-rs)));
52
-
53
- .icon {
54
- display: inline-flex;
55
- justify-content: center;
56
- align-items: center;
57
-
58
- width: var(--_ctm-mob-dn-in-se, var(--_ctm-tab-dn-in-se, var(--_ctm-dn-in-se)));
59
- height: var(--_ctm-mob-dn-in-se, var(--_ctm-tab-dn-in-se, var(--_ctm-dn-in-se)));
60
-
61
- svg {
62
- width: 100%;
63
- height: 100%;
64
- path {
65
- stroke: var(
66
- --_ctm-mob-dn-in-c1,
67
- var(--_ctm-tab-dn-in-c1, var(--_ctm-dn-in-c1))
68
- ) !important;
69
- }
70
- }
71
- }
72
- }
73
- }
74
- }
1
+ @use "sass:map";
2
+ @use "sass:list";
3
+
4
+ $resizerId: "[data-cms-tool='cms-element-resizer']";
5
+ $resizeActive: '[data-cms-element-resizer="true"]';
6
+
7
+ [data-div-type="element"] {
8
+ &[data-element-type="iconLibrary"] {
9
+ width: var(
10
+ --_sf-el-wh-st-mx,
11
+ calc(
12
+ 1% *
13
+ var(
14
+ --_ctm-mob-ele-nw-wh-vl,
15
+ var(--_ctm-tab-ele-nw-wh-vl, var(--_ctm-ele-nw-wh-vl, var(--_sf-nw-wh)))
16
+ )
17
+ )
18
+ );
19
+ margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
20
+ // height: var(--_ctm-lt-ht, --_tst-lt-ht);
21
+
22
+ & > .wrapper {
23
+ width: 100%;
24
+ height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht))) !important;
25
+ }
26
+ &[data-widget-border="true"] .icon__container {
27
+ border-color: var(--_ctm-mob-dn-br-cr, var(--_ctm-tab-dn-br-cr, var(--_ctm-dn-br-cr)));
28
+ border-style: var(--_ctm-mob-dn-br-se, var(--_ctm-tab-dn-br-se, var(--_ctm-dn-br-se)));
29
+ border-width: var(--_ctm-mob-dn-br-wh, var(--_ctm-tab-dn-br-wh, var(--_ctm-dn-br-wh)));
30
+ }
31
+
32
+ &[data-widget-shadow="true"] .icon__container {
33
+ box-shadow: var(--_ctm-mob-dn-sw-ae, var(--_ctm-tab-dn-sw-ae, var(--_ctm-dn-sw-ae)))
34
+ var(--_ctm-mob-dn-sw-br, var(--_ctm-tab-dn-sw-br, var(--_ctm-dn-sw-br)))
35
+ var(--_ctm-mob-dn-sw-sd, var(--_ctm-tab-dn-sw-sd, var(--_ctm-dn-sw-sd)))
36
+ var(--_ctm-mob-dn-sw-cr, var(--_ctm-tab-dn-sw-cr, var(--_ctm-dn-sw-cr)));
37
+ }
38
+
39
+ &[data-widget-shadow="false"] .icon__container {
40
+ box-shadow: none;
41
+ }
42
+
43
+ .icon__container {
44
+ display: flex;
45
+ justify-content: center;
46
+ align-items: center;
47
+ width: 100%;
48
+ height: 100%;
49
+ padding: var(--_ctm-mob-lt-pg, var(--_ctm-tab-lt-pg, var(--_ctm-lt-pg)));
50
+ background-color: var(--_ctm-mob-dn-bd-cr, var(--_ctm-tab-dn-bd-cr, var(--_ctm-dn-bd-cr)));
51
+ border-radius: var(--_ctm-mob-dn-br-rs, var(--_ctm-tab-dn-br-rs, var(--_ctm-dn-br-rs)));
52
+
53
+ .icon {
54
+ display: inline-flex;
55
+ justify-content: center;
56
+ align-items: center;
57
+
58
+ width: var(--_ctm-mob-dn-in-se, var(--_ctm-tab-dn-in-se, var(--_ctm-dn-in-se)));
59
+ height: var(--_ctm-mob-dn-in-se, var(--_ctm-tab-dn-in-se, var(--_ctm-dn-in-se)));
60
+
61
+ svg {
62
+ width: 100%;
63
+ height: 100%;
64
+ path {
65
+ stroke: var(
66
+ --_ctm-mob-dn-in-c1,
67
+ var(--_ctm-tab-dn-in-c1, var(--_ctm-dn-in-c1))
68
+ ) !important;
69
+ // Overrides the stroke-width presentation attribute baked into each icon's
70
+ // markup. A plain declaration is enough — presentation attributes lose to
71
+ // any CSS rule — so no !important is needed here.
72
+ stroke-width: var(--_ctm-mob-dn-se-wh, var(--_ctm-tab-dn-se-wh, var(--_ctm-dn-se-wh)));
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
@@ -107,6 +107,7 @@ $isFlexboxElementChild: ".flx > .wrapper > *";
107
107
  // transform: scale(var(--_ctm-dn-zm-ie));
108
108
  scale: var(--_ctm-mob-dn-zm-ie, var(--_ctm-tab-dn-zm-ie, var(--_ctm-dn-zm-ie)));
109
109
  rotate: calc(var(--_ctm-dn-re) * 1deg);
110
+ overflow: hidden;
110
111
  }
111
112
  }
112
113
  &[data-show-shadow="false"] {
@@ -129,7 +130,7 @@ $isFlexboxElementChild: ".flx > .wrapper > *";
129
130
  row-gap: var(--_sf-gp);
130
131
  width: 100%;
131
132
  height: prepareMediaVariable(--_ctm-lt-ht);
132
- border-radius: var(--_ctm-mob-dn-br-rs, var(--_ctm-tab-dn-br-rs, var(--_ctm-dn-br-rs)));
133
+ // border-radius: var(--_ctm-mob-dn-br-rs, var(--_ctm-tab-dn-br-rs, var(--_ctm-dn-br-rs)));
133
134
  // height: 100%;
134
135
  // &:is(:not(:has([class*="crop__main"]) *)) {
135
136
  // padding: var(--_ctm-mob-lt-pg, var(--_ctm-tab-lt-pg, var(--_ctm-lt-pg)));
@@ -236,6 +236,18 @@
236
236
  --_ctm-mob-dn-im-se-hr-se-ue,
237
237
  var(--_ctm-tab-dn-im-se-hr-se-ue, var(--_ctm-dn-im-se-hr-se-ue))
238
238
  );
239
+ --_sf-hr-tt-tm: var(
240
+ --_ctm-mob-dn-im-se-hr-se-tt-tm,
241
+ var(--_ctm-tab-dn-im-se-hr-se-tt-tm, var(--_ctm-dn-im-se-hr-se-tt-tm))
242
+ );
243
+ --_sf-hr-wd-wp: var(
244
+ --_ctm-mob-dn-im-se-hr-se-wd-wp,
245
+ var(--_ctm-tab-dn-im-se-hr-se-wd-wp, var(--_ctm-dn-im-se-hr-se-wd-wp))
246
+ );
247
+ --_sf-hr-wd-bk: var(
248
+ --_ctm-mob-dn-im-se-hr-se-wd-bk,
249
+ var(--_ctm-tab-dn-im-se-hr-se-wd-bk, var(--_ctm-dn-im-se-hr-se-wd-bk))
250
+ );
239
251
  --_sf-hr-pg: var(
240
252
  --_ctm-mob-dn-im-se-hr-se-pg,
241
253
  var(--_ctm-tab-dn-im-se-hr-se-pg, var(--_ctm-dn-im-se-hr-se-pg))
@@ -259,6 +271,13 @@
259
271
  --_ctm-mob-dn-im-se-sd-se-br-wh,
260
272
  var(--_ctm-tab-dn-im-se-sd-se-br-wh, var(--_ctm-dn-im-se-sd-se-br-wh))
261
273
  );
274
+ // Was missing entirely, so `border-radius: var(--_sf-sd-br-rs, <default state>)`
275
+ // always fell through to the default state and Selected > Border Radius did
276
+ // nothing. Every sibling state variable had one; this is the odd one out.
277
+ --_sf-sd-br-rs: var(
278
+ --_ctm-mob-dn-im-se-sd-se-br-rs,
279
+ var(--_ctm-tab-dn-im-se-sd-se-br-rs, var(--_ctm-dn-im-se-sd-se-br-rs))
280
+ );
262
281
  // new
263
282
  --_sf-sd-sw-ae: var(
264
283
  --_ctm-mob-dn-im-se-sd-se-sw-ae,
@@ -316,29 +335,24 @@
316
335
  --_ctm-mob-dn-im-se-sd-se-ue,
317
336
  var(--_ctm-tab-dn-im-se-sd-se-ue, var(--_ctm-dn-im-se-sd-se-ue))
318
337
  );
338
+ --_sf-sd-tt-tm: var(
339
+ --_ctm-mob-dn-im-se-sd-se-tt-tm,
340
+ var(--_ctm-tab-dn-im-se-sd-se-tt-tm, var(--_ctm-dn-im-se-sd-se-tt-tm))
341
+ );
342
+ --_sf-sd-wd-wp: var(
343
+ --_ctm-mob-dn-im-se-sd-se-wd-wp,
344
+ var(--_ctm-tab-dn-im-se-sd-se-wd-wp, var(--_ctm-dn-im-se-sd-se-wd-wp))
345
+ );
346
+ --_sf-sd-wd-bk: var(
347
+ --_ctm-mob-dn-im-se-sd-se-wd-bk,
348
+ var(--_ctm-tab-dn-im-se-sd-se-wd-bk, var(--_ctm-dn-im-se-sd-se-wd-bk))
349
+ );
319
350
  --_sf-sd-pg: var(
320
351
  --_ctm-mob-dn-im-se-sd-se-pg,
321
352
  var(--_ctm-tab-dn-im-se-sd-se-pg, var(--_ctm-dn-im-se-sd-se-pg))
322
353
  );
323
354
  }
324
355
 
325
- &[data-flag-style="Rounded"] {
326
- .language__flag {
327
- border-radius: 5px;
328
- svg {
329
- border-radius: 5px;
330
- }
331
- }
332
- }
333
- &[data-flag-style="Circle"] {
334
- .language__flag {
335
- border-radius: 50%;
336
- svg {
337
- border-radius: 50%;
338
- }
339
- }
340
- }
341
-
342
356
  .option {
343
357
  width: 100%;
344
358
  display: flex;
@@ -348,6 +362,9 @@
348
362
 
349
363
  position: relative;
350
364
  box-sizing: border-box;
365
+ // Without this a flex item refuses to shrink below its content width, so a
366
+ // larger font size pushed the label straight out of the widget.
367
+ min-width: 0;
351
368
 
352
369
  padding: var(--_sf-hr-pg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-pg));
353
370
  gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
@@ -364,6 +381,10 @@
364
381
  var(--_sf-hr-sw-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-cr));
365
382
  //
366
383
  &[data-selected="true"] {
384
+ // `.option` only ever declared padding from the hover variable, so
385
+ // `--_sf-sd-pg` was set by the selected-state block but never read and
386
+ // Selected > Padding did nothing.
387
+ padding: var(--_sf-sd-pg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-pg));
367
388
  border-color: var(--_sf-sd-br-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-cr));
368
389
 
369
390
  background-color: var(--_sf-sd-bd-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-bd-cr));
@@ -387,7 +408,17 @@
387
408
  letter-spacing: var(--_sf-sd-lr-sg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-lr-sg));
388
409
  line-height: var(--_sf-sd-le-ht, prepareMediaVariable(--_ctm-dn-im-se-dt-se-le-ht-dc));
389
410
  text-decoration: var(--_sf-sd-ue, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ue));
390
- @include restrictToLinesShow(1);
411
+ text-transform: var(--_sf-sd-tt-tm, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-tm));
412
+ word-wrap: var(
413
+ --_sf-sd-wd-wp,
414
+ prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-wp, normal)
415
+ );
416
+ word-break: var(
417
+ --_sf-sd-wd-bk,
418
+ prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-bk, normal)
419
+ );
420
+ -webkit-line-clamp: var(--_sf-it-clamp-sd, var(--_sf-it-clamp, 1));
421
+ white-space: var(--_sf-it-ws-sd, var(--_sf-it-ws, nowrap));
391
422
  }
392
423
  }
393
424
  }
@@ -399,7 +430,55 @@
399
430
  &[data-flex-direction="row"] {
400
431
  overflow-x: auto;
401
432
  }
402
- &[data-show-divider="true"] {
433
+ // Matched when *either* state wants a divider, so the rules below exist and each
434
+ // state can then decide visibility for itself — gating on the default state alone
435
+ // meant a divider switched on only for hover could never appear.
436
+ &:is([data-show-divider="true"], [data-show-divider-hover="true"]) {
437
+ // Divider weight/colour resolve through these two, so the hover block below
438
+ // only has to re-point them. Previously the declarations read the default
439
+ // state's variables directly and the Widget Style > Hover > Divider controls
440
+ // wrote to `--_ctm-dn-wt-se-hr-se-dr-*`, which nothing ever read.
441
+ --_sf-dr-wt: var(
442
+ --_ctm-mob-dn-wt-se-dt-se-dr-wt,
443
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
444
+ );
445
+ --_sf-dr-cr: var(
446
+ --_ctm-mob-dn-wt-se-dt-se-dr-cr,
447
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
448
+ );
449
+
450
+ // Divider lives under Widget Style, so its hover state is the *widget* being
451
+ // hovered, not an individual option. Scoping this to `.option:hover` only
452
+ // repainted the hovered option's own divider, which read as "not working".
453
+ &:hover {
454
+ --_sf-dr-wt: var(
455
+ --_ctm-mob-dn-wt-se-hr-se-dr-wt,
456
+ var(
457
+ --_ctm-tab-dn-wt-se-hr-se-dr-wt,
458
+ var(
459
+ --_ctm-dn-wt-se-hr-se-dr-wt,
460
+ var(
461
+ --_ctm-mob-dn-wt-se-dt-se-dr-wt,
462
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
463
+ )
464
+ )
465
+ )
466
+ );
467
+ --_sf-dr-cr: var(
468
+ --_ctm-mob-dn-wt-se-hr-se-dr-cr,
469
+ var(
470
+ --_ctm-tab-dn-wt-se-hr-se-dr-cr,
471
+ var(
472
+ --_ctm-dn-wt-se-hr-se-dr-cr,
473
+ var(
474
+ --_ctm-mob-dn-wt-se-dt-se-dr-cr,
475
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
476
+ )
477
+ )
478
+ )
479
+ );
480
+ }
481
+
403
482
  &[data-flex-direction="row"] {
404
483
  .option:not(:last-child)::before {
405
484
  content: "";
@@ -416,14 +495,8 @@
416
495
  2
417
496
  )
418
497
  ); /* Half of your gap, assuming divider is centered in the gap */
419
- width: var(
420
- --_ctm-mob-dn-wt-se-dr-wt,
421
- var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
422
- ); /* Divider thickness */
423
- background-color: var(
424
- --_ctm-mob-dn-wt-se-dt-se-dr-cr,
425
- var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
426
- ); /* Divider color */
498
+ width: var(--_sf-dr-wt); /* Divider thickness */
499
+ background-color: var(--_sf-dr-cr); /* Divider color */
427
500
  }
428
501
  }
429
502
  &[data-flex-direction="column"] {
@@ -442,16 +515,23 @@
442
515
  2
443
516
  )
444
517
  );
445
- height: var(
446
- --_ctm-mob-dn-wt-se-dt-se-dr-wt,
447
- var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
448
- );
449
- background-color: var(
450
- --_ctm-mob-dn-wt-se-dt-se-dr-cr,
451
- var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
452
- );
518
+ height: var(--_sf-dr-wt);
519
+ background-color: var(--_sf-dr-cr);
453
520
  }
454
521
  }
522
+
523
+ // Each state's own Show Divider switch. Declared last so they win over the
524
+ // `::before` rules above, and split by state so turning the divider off for
525
+ // hover only affects the hovered widget.
526
+ &[data-show-divider="false"] .option::before {
527
+ display: none;
528
+ }
529
+ &[data-show-divider-hover="false"]:hover .option::before {
530
+ display: none;
531
+ }
532
+ &[data-show-divider-hover="true"]:hover .option:not(:last-child)::before {
533
+ display: block;
534
+ }
455
535
  }
456
536
 
457
537
  .option_select {
@@ -461,8 +541,12 @@
461
541
  justify-content: var(--_ctm-mob-lt-at, var(--_ctm-tab-lt-at, var(--_ctm-lt-at)));
462
542
 
463
543
  position: relative;
544
+ min-width: 0;
464
545
 
465
- // padding: var(--_ctm-mob-lt-im-pg, var(--_ctm-tab-lt-im-pg, var(--_ctm-lt-im-pg)));
546
+ // Widget Placeholder Text > padding. It used to sit on `.value__selected__new`
547
+ // only, which is the *empty* state — as soon as an option was selected the
548
+ // markup switched to this branch and the padding appeared to do nothing.
549
+ padding: prepareMediaVariable(--_ctm-dn-wt-pr-tt-pg);
466
550
  gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
467
551
  .language__name {
468
552
  width: 100%;
@@ -475,16 +559,9 @@
475
559
  text-align: prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-an);
476
560
  letter-spacing: prepareMediaVariable(--_ctm-dn-wt-pr-tt-lr-sg);
477
561
  line-height: prepareMediaVariable(--_ctm-dn-wt-pr-tt-le-ht);
478
- @include restrictToLinesShow(1);
479
- }
480
- }
481
- .language__flag {
482
- width: var(--_ctm-mob-lt-fg-se, var(--_ctm-tab-lt-fg-se, var(--_ctm-lt-fg-se)));
483
- height: var(--_ctm-mob-lt-fg-se, var(--_ctm-tab-lt-fg-se, var(--_ctm-lt-fg-se)));
484
- object-fit: cover;
485
- > svg {
486
- width: 100%;
487
- height: 100%;
562
+ text-transform: prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-tm);
563
+ word-wrap: prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-wp, normal);
564
+ word-break: prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-bk, normal);
488
565
  }
489
566
  }
490
567
 
@@ -498,8 +575,34 @@
498
575
  letter-spacing: var(--_sf-hr-lr-sg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-lr-sg));
499
576
  line-height: var(--_sf-hr-le-ht, prepareMediaVariable(--_ctm-dn-im-se-dt-se-le-ht));
500
577
  text-decoration: var(--_sf-hr-ue, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ue));
501
- white-space: nowrap;
502
- @include restrictToLinesShow(1);
578
+ text-transform: var(--_sf-hr-tt-tm, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-tm));
579
+ word-wrap: var(--_sf-hr-wd-wp, prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-wp, normal));
580
+ word-break: var(--_sf-hr-wd-bk, prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-bk, normal));
581
+
582
+ // text-align only has room to act once the label owns the line box — as a
583
+ // content-sized flex item it hugged its text, so every alignment looked the
584
+ // same. `min-width: 0` keeps it shrinkable so a larger font size truncates
585
+ // instead of overflowing the widget.
586
+ flex: 1 1 auto;
587
+ min-width: 0;
588
+ max-width: 100%;
589
+
590
+ // Text Overflow is driven entirely by the two clamp custom properties the
591
+ // element sets per interaction state (see LanguageMenuElement/DropdownComponent):
592
+ // off resolves to 1 nowrap line, on to N wrapped lines. Keeping the box display
593
+ // constant means the hover and selected rules below only have to swap the pair,
594
+ // which a marker class could not express.
595
+ display: -webkit-box;
596
+ -webkit-box-orient: vertical;
597
+ overflow: hidden;
598
+ text-overflow: ellipsis;
599
+ -webkit-line-clamp: var(--_sf-it-clamp, 1);
600
+ white-space: var(--_sf-it-ws, nowrap);
601
+ }
602
+
603
+ .option:hover .language__name {
604
+ -webkit-line-clamp: var(--_sf-it-clamp-hr, var(--_sf-it-clamp, 1));
605
+ white-space: var(--_sf-it-ws-hr, var(--_sf-it-ws, nowrap));
503
606
  }
504
607
 
505
608
  //Dropdown
@@ -518,7 +621,16 @@
518
621
  letter-spacing: prepareMediaVariable(--_ctm-dn-wt-pr-tt-lr-sg);
519
622
  line-height: prepareMediaVariable(--_ctm-dn-wt-pr-tt-le-ht);
520
623
  padding: prepareMediaVariable(--_ctm-dn-wt-pr-tt-pg);
521
- @include restrictToLinesShow(1);
624
+ text-transform: prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-tm);
625
+ word-wrap: prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-wp, normal);
626
+ word-break: prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-bk, normal);
627
+ min-width: 0;
628
+ display: -webkit-box;
629
+ -webkit-box-orient: vertical;
630
+ overflow: hidden;
631
+ text-overflow: ellipsis;
632
+ -webkit-line-clamp: var(--_sf-it-clamp, 1);
633
+ white-space: var(--_sf-it-ws, nowrap);
522
634
  }
523
635
  .est__dropdown__main {
524
636
  position: relative;
@@ -639,13 +751,10 @@
639
751
  );
640
752
  }
641
753
  .option_select {
642
- // padding-block: unset;
643
- // display: -webkit-box;
644
- -webkit-line-clamp: 1;
645
- -webkit-box-orient: vertical;
754
+ // Truncation is handled by `.language__name` inside, which knows whether
755
+ // Text Overflow is on and how many lines to clamp to. A `white-space:
756
+ // nowrap` here inherited down and defeated the multi-line clamp.
646
757
  overflow: hidden;
647
- text-overflow: ellipsis;
648
- white-space: nowrap;
649
758
  }
650
759
  }
651
760
 
@@ -655,6 +764,15 @@
655
764
  width: 100%;
656
765
  position: relative;
657
766
  gap: 8px;
767
+ // Keeps the label shrinkable so a larger font size truncates instead of
768
+ // pushing the toggle icon out of the widget.
769
+ min-width: 0;
770
+
771
+ & > .option_select,
772
+ & > .value__selected__new {
773
+ flex: 1 1 auto;
774
+ min-width: 0;
775
+ }
658
776
  }
659
777
 
660
778
  .est__dropdown__icon {
@@ -22,9 +22,9 @@ $activeElementSelector: "[data-has-clicked='true']";
22
22
  0.00625 * (var(--_cms-scaling-factor) - var(--_cms-scrollbar-width))
23
23
  );
24
24
 
25
- &:has(#{$activeElementSelector}) {
26
- // border: 1px solid var(--_accent-color-2-500);
27
- }
25
+ // &:has(#{$activeElementSelector}) {
26
+ // // border: 1px solid var(--_accent-color-2-500);
27
+ // }
28
28
 
29
29
  & > div {
30
30
  &#{$mnwr} {
@@ -54,6 +54,7 @@ $activeElementSelector: "[data-has-clicked='true']";
54
54
  );
55
55
  max-width: 100%;
56
56
  max-height: 9999px;
57
+ padding: prepareMediaVariable(--_ctm-lig-lt-pg);
57
58
  &[data-background-type="color"] {
58
59
  background-color: prepareMediaVariable(--_ctm-lig-dn-bd-cr);
59
60
  }