@sc-360-v2/storefront-cms-library 0.5.65 → 0.5.67

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/dist/filters.scss CHANGED
@@ -2675,7 +2675,7 @@ $resizeActive: '[data-cms-element-resizer="true"]';
2675
2675
  border-radius: 10px;
2676
2676
  // padding: 20px;
2677
2677
  width: 100%;
2678
- max-width: 300px;
2678
+ // max-width: 300px;
2679
2679
  padding-inline: 8px;
2680
2680
  // margin: auto;
2681
2681
  }
package/dist/map.scss CHANGED
@@ -128,6 +128,18 @@ $data: (
128
128
  )
129
129
  );
130
130
 
131
+ // Tooltip Design > Horizontal Alignment, translated for `text-align`. The control is
132
+ // picked from the shared alignment list (flex-start | center | flex-end), and those
133
+ // keywords mean nothing to text-align, so the two ends have to be mapped. The last two
134
+ // entries are the pre-list values, still stored on pages saved before that fix.
135
+ $tooltipTextAlign: (
136
+ "flex-start": left,
137
+ "center": center,
138
+ "flex-end": right,
139
+ "left": left,
140
+ "right": right,
141
+ );
142
+
131
143
  [data-div-type="element"] {
132
144
  &[data-element-type="map"] {
133
145
  // Half the pin as it actually renders, and the gap the tooltip keeps from the
@@ -266,6 +278,26 @@ $data: (
266
278
  var(--_ctm-dn-tp-dn-sw-cr);
267
279
  }
268
280
  }
281
+
282
+ // Tooltip Design > Horizontal Alignment, applied to the tooltip text itself.
283
+ //
284
+ // .text_box re-applies the control as align-items further down, which moves the
285
+ // title and the description only while they are narrower than the tooltip. A title
286
+ // long enough to wrap fills that wrapper, and a flex container cannot move a child
287
+ // that is already full width — which is why the control looked dead on the title
288
+ // while the shorter description still followed it.
289
+ //
290
+ // The value reaches the DOM as a data attribute because align-items keywords are
291
+ // not text-align keywords; Map Widget Layout's alignment takes the same route to
292
+ // .gallery-header above. The tooltip-level control wins over the per-text Alignment
293
+ // in Tooltip Text Design — it is the one that positions the text block.
294
+ @each $key, $align in $tooltipTextAlign {
295
+ &[data-tooltip-text-alignment="#{$key}"] {
296
+ .map-element .hotspot__tooltip .text_box > * {
297
+ text-align: $align;
298
+ }
299
+ }
300
+ }
269
301
  &[data-hotspot-tooltip-image-style-show-border="true"] {
270
302
  .tooltip__image {
271
303
  border-style: var(--_ctm-dn-tp-ie-dn-br-se);
@@ -388,6 +420,13 @@ $data: (
388
420
  // Text Container Width. 100% is the previous behaviour, so an unset width
389
421
  // still spans the container.
390
422
  width: prepareMediaVariable(--_ctm-dn-mp-wt-lt-tt-cr-wh, 100%);
423
+ // ...but never wider than the widget. The control accepts a percentage of the
424
+ // widget and a raw length, and either can be dialled past the widget's own
425
+ // width — a percentage over 100, or a length longer than the widget. Both used
426
+ // to push the header (and the text painted on it) out over whatever sits to the
427
+ // right of the map. Clamping here rather than only capping the control also
428
+ // covers pages already saved with an oversized width.
429
+ max-width: 100%;
391
430
  // Lets it shrink to that width beside the map — a flex item defaults to
392
431
  // min-width:auto and refuses to go below its longest word.
393
432
  min-width: 0;
@@ -505,10 +544,7 @@ $data: (
505
544
  );
506
545
  word-wrap: var(
507
546
  --_ctm-mob-dn-mp-wt-wd-wp-dc,
508
- var(
509
- --_ctm-tab-dn-mp-wt-wd-wp-dc,
510
- var(--_ctm-dn-mp-wt-wd-wp-dc, break-word)
511
- )
547
+ var(--_ctm-tab-dn-mp-wt-wd-wp-dc, var(--_ctm-dn-mp-wt-wd-wp-dc, break-word))
512
548
  );
513
549
  word-break: var(
514
550
  --_ctm-mob-dn-mp-wt-wd-bk-dc,
@@ -800,6 +836,24 @@ $data: (
800
836
  max-width: 100%;
801
837
  width: 100%;
802
838
  height: 100%;
839
+ // This wrapper fills the tooltip on both axes, so the justify-content /
840
+ // align-items set on .hotspot__tooltip above have nothing left to move —
841
+ // that is why both alignment controls looked dead. Same trap the image
842
+ // hotspot hit with .tooltip__image_with_text (hotspot.scss): the alignment
843
+ // has to be re-applied on the box that actually holds the title and the
844
+ // description. The stack is a column here, so the *vertical* control drives
845
+ // justify-content and the *horizontal* one drives align-items — the opposite
846
+ // mapping to the tooltip itself.
847
+ display: flex;
848
+ flex-direction: column;
849
+ justify-content: prepareMediaVariable(--_ctm-dn-tp-dn-vl-at);
850
+ align-items: prepareMediaVariable(--_ctm-dn-tp-dn-hl-at);
851
+
852
+ // align-items shrinks each child to its content width, so the text still
853
+ // needs a cap to wrap against instead of overflowing the tooltip.
854
+ > * {
855
+ max-width: 100%;
856
+ }
803
857
 
804
858
  h6 {
805
859
  font-size: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se);
@@ -980,8 +1034,8 @@ $data: (
980
1034
  // --_ctm-mob-dn-pn-se-in-c1,
981
1035
  // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
982
1036
  // );
983
- // Overrides the stroke-width presentation attribute baked into the icon markup.
984
- stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
1037
+ // Overrides the stroke-width presentation attribute baked into the icon markup.
1038
+ stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
985
1039
  // fill: var(
986
1040
  // --_ctm-mob-dn-pn-se-in-c1,
987
1041
  // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
@@ -1089,8 +1143,8 @@ $data: (
1089
1143
  // --_ctm-mob-dn-pn-se-in-c1,
1090
1144
  // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
1091
1145
  // );
1092
- // Overrides the stroke-width presentation attribute baked into the icon markup.
1093
- stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
1146
+ // Overrides the stroke-width presentation attribute baked into the icon markup.
1147
+ stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
1094
1148
  // }
1095
1149
  // }
1096
1150
  // }
@@ -11,6 +11,18 @@
11
11
  @return prepareMediaVariable($newVar, prepareMediaVariable($legacyVar));
12
12
  }
13
13
 
14
+ // The value text's typography is not state-aware — the Option Value Text Style panel has
15
+ // no Default / Hover / Selected picker — so its keys sit flat on optionValueTextStyle
16
+ // rather than under defaultState. Three shapes can be on disk, so resolve in order: the
17
+ // flat variable, then the defaultState-nested one saved while the section still had the
18
+ // picker, then the pre-split optionValueStyle.defaultState one.
19
+ @function optionValueTextDefaultVar($flatVar, $stateVar, $legacyVar) {
20
+ @return prepareMediaVariable(
21
+ $flatVar,
22
+ prepareMediaVariable($stateVar, prepareMediaVariable($legacyVar))
23
+ );
24
+ }
25
+
14
26
  [data-div-type="element"] {
15
27
  &[data-element-type="productOptions"] {
16
28
  width: var(
@@ -558,46 +570,83 @@
558
570
  .option__value__text {
559
571
  color: var(
560
572
  --_sf-hr-cr,
561
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-cr, --_ctm-dn-on-ve-se-dt-se-cr)}
573
+ #{optionValueTextDefaultVar(
574
+ --_ctm-dn-on-ve-tt-se-cr,
575
+ --_ctm-dn-on-ve-tt-se-dt-se-cr,
576
+ --_ctm-dn-on-ve-se-dt-se-cr
577
+ )}
562
578
  );
563
579
  font-family: var(
564
580
  --_sf-hr-ft-fy,
565
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ft-fy, --_ctm-dn-on-ve-se-dt-se-ft-fy)}
581
+ #{optionValueTextDefaultVar(
582
+ --_ctm-dn-on-ve-tt-se-ft-fy,
583
+ --_ctm-dn-on-ve-tt-se-dt-se-ft-fy,
584
+ --_ctm-dn-on-ve-se-dt-se-ft-fy
585
+ )}
566
586
  );
567
587
  text-transform: var(
568
588
  --_sf-hr-tt-tm,
569
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-tt-tm, --_ctm-dn-on-ve-se-dt-se-tt-tm)}
589
+ #{optionValueTextDefaultVar(
590
+ --_ctm-dn-on-ve-tt-se-tt-tm,
591
+ --_ctm-dn-on-ve-tt-se-dt-se-tt-tm,
592
+ --_ctm-dn-on-ve-se-dt-se-tt-tm
593
+ )}
570
594
  );
571
595
  word-wrap: var(
572
596
  --_sf-hr-wd-wp,
573
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-wd-wp, --_ctm-dn-on-ve-se-dt-se-wd-wp)}
597
+ #{optionValueTextDefaultVar(
598
+ --_ctm-dn-on-ve-tt-se-wd-wp,
599
+ --_ctm-dn-on-ve-tt-se-dt-se-wd-wp,
600
+ --_ctm-dn-on-ve-se-dt-se-wd-wp
601
+ )}
574
602
  );
575
603
  word-break: var(
576
604
  --_sf-hr-wd-bk,
577
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-wd-bk, --_ctm-dn-on-ve-se-dt-se-wd-bk)}
605
+ #{optionValueTextDefaultVar(
606
+ --_ctm-dn-on-ve-tt-se-wd-bk,
607
+ --_ctm-dn-on-ve-tt-se-dt-se-wd-bk,
608
+ --_ctm-dn-on-ve-se-dt-se-wd-bk
609
+ )}
578
610
  );
579
611
  font-size: var(
580
612
  --_sf-hr-ft-se,
581
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ft-se, --_ctm-dn-on-ve-se-dt-se-ft-se)}
613
+ #{optionValueTextDefaultVar(
614
+ --_ctm-dn-on-ve-tt-se-ft-se,
615
+ --_ctm-dn-on-ve-tt-se-dt-se-ft-se,
616
+ --_ctm-dn-on-ve-se-dt-se-ft-se
617
+ )}
582
618
  );
583
619
  font-weight: var(
584
620
  --_sf-hr-ft-wt,
585
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ft-wt, --_ctm-dn-on-ve-se-dt-se-ft-wt)}
621
+ #{optionValueTextDefaultVar(
622
+ --_ctm-dn-on-ve-tt-se-ft-wt,
623
+ --_ctm-dn-on-ve-tt-se-dt-se-ft-wt,
624
+ --_ctm-dn-on-ve-se-dt-se-ft-wt
625
+ )}
586
626
  );
587
627
  font-style: var(
588
628
  --_sf-hr-ft-se-ic,
589
- #{optionValueTextVar(
629
+ #{optionValueTextDefaultVar(
630
+ --_ctm-dn-on-ve-tt-se-ft-se-ic,
590
631
  --_ctm-dn-on-ve-tt-se-dt-se-ft-se-ic,
591
632
  --_ctm-dn-on-ve-se-dt-se-ft-se-ic
592
633
  )}
593
634
  );
594
635
  text-align: var(
595
636
  --_sf-hr-tt-an,
596
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-tt-an, --_ctm-dn-on-ve-se-dt-se-tt-an)}
637
+ #{optionValueTextDefaultVar(
638
+ --_ctm-dn-on-ve-tt-se-tt-an,
639
+ --_ctm-dn-on-ve-tt-se-dt-se-tt-an,
640
+ --_ctm-dn-on-ve-se-dt-se-tt-an
641
+ )}
597
642
  );
598
643
  letter-spacing: var(
599
644
  --_sf-hr-lr-sg,
600
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-lr-sg, --_ctm-dn-on-ve-se-dt-se-lr-sg)}
645
+ #{optionValueTextDefaultVar(
646
+ --_ctm-dn-on-ve-tt-se-lr-sg,
647
+ --_ctm-dn-on-ve-tt-se-dt-se-lr-sg,
648
+ --_ctm-dn-on-ve-se-dt-se-lr-sg
649
+ )}
601
650
  );
602
651
  // The pre-split key is `le-ht-dc`; the new section is read under both spellings
603
652
  // so whichever one the converter writes resolves.
@@ -605,7 +654,8 @@
605
654
  --_sf-hr-le-ht,
606
655
  prepareMediaVariable(
607
656
  --_ctm-dn-on-ve-tt-se-dt-se-le-ht,
608
- #{optionValueTextVar(
657
+ #{optionValueTextDefaultVar(
658
+ --_ctm-dn-on-ve-tt-se-le-ht-dc,
609
659
  --_ctm-dn-on-ve-tt-se-dt-se-le-ht-dc,
610
660
  --_ctm-dn-on-ve-se-dt-se-le-ht-dc
611
661
  )}
@@ -613,7 +663,11 @@
613
663
  );
614
664
  text-decoration: var(
615
665
  --_sf-hr-ue,
616
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ue, --_ctm-dn-on-ve-se-dt-se-ue)}
666
+ #{optionValueTextDefaultVar(
667
+ --_ctm-dn-on-ve-tt-se-ue,
668
+ --_ctm-dn-on-ve-tt-se-dt-se-ue,
669
+ --_ctm-dn-on-ve-se-dt-se-ue
670
+ )}
617
671
  );
618
672
  // The swatch item is a fixed box (Swatch Item Size), so a value like "Small"
619
673
  // broke onto a second line inside it. Keep it on one line.
@@ -677,46 +731,83 @@
677
731
  .option__value__text {
678
732
  color: var(
679
733
  --_sf-hr-cr,
680
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-cr, --_ctm-dn-on-ve-se-dt-se-cr)}
734
+ #{optionValueTextDefaultVar(
735
+ --_ctm-dn-on-ve-tt-se-cr,
736
+ --_ctm-dn-on-ve-tt-se-dt-se-cr,
737
+ --_ctm-dn-on-ve-se-dt-se-cr
738
+ )}
681
739
  );
682
740
  font-family: var(
683
741
  --_sf-hr-ft-fy,
684
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ft-fy, --_ctm-dn-on-ve-se-dt-se-ft-fy)}
742
+ #{optionValueTextDefaultVar(
743
+ --_ctm-dn-on-ve-tt-se-ft-fy,
744
+ --_ctm-dn-on-ve-tt-se-dt-se-ft-fy,
745
+ --_ctm-dn-on-ve-se-dt-se-ft-fy
746
+ )}
685
747
  );
686
748
  text-transform: var(
687
749
  --_sf-hr-tt-tm,
688
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-tt-tm, --_ctm-dn-on-ve-se-dt-se-tt-tm)}
750
+ #{optionValueTextDefaultVar(
751
+ --_ctm-dn-on-ve-tt-se-tt-tm,
752
+ --_ctm-dn-on-ve-tt-se-dt-se-tt-tm,
753
+ --_ctm-dn-on-ve-se-dt-se-tt-tm
754
+ )}
689
755
  );
690
756
  word-wrap: var(
691
757
  --_sf-hr-wd-wp,
692
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-wd-wp, --_ctm-dn-on-ve-se-dt-se-wd-wp)}
758
+ #{optionValueTextDefaultVar(
759
+ --_ctm-dn-on-ve-tt-se-wd-wp,
760
+ --_ctm-dn-on-ve-tt-se-dt-se-wd-wp,
761
+ --_ctm-dn-on-ve-se-dt-se-wd-wp
762
+ )}
693
763
  );
694
764
  word-break: var(
695
765
  --_sf-hr-wd-bk,
696
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-wd-bk, --_ctm-dn-on-ve-se-dt-se-wd-bk)}
766
+ #{optionValueTextDefaultVar(
767
+ --_ctm-dn-on-ve-tt-se-wd-bk,
768
+ --_ctm-dn-on-ve-tt-se-dt-se-wd-bk,
769
+ --_ctm-dn-on-ve-se-dt-se-wd-bk
770
+ )}
697
771
  );
698
772
  font-size: var(
699
773
  --_sf-hr-ft-se,
700
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ft-se, --_ctm-dn-on-ve-se-dt-se-ft-se)}
774
+ #{optionValueTextDefaultVar(
775
+ --_ctm-dn-on-ve-tt-se-ft-se,
776
+ --_ctm-dn-on-ve-tt-se-dt-se-ft-se,
777
+ --_ctm-dn-on-ve-se-dt-se-ft-se
778
+ )}
701
779
  );
702
780
  font-weight: var(
703
781
  --_sf-hr-ft-wt,
704
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ft-wt, --_ctm-dn-on-ve-se-dt-se-ft-wt)}
782
+ #{optionValueTextDefaultVar(
783
+ --_ctm-dn-on-ve-tt-se-ft-wt,
784
+ --_ctm-dn-on-ve-tt-se-dt-se-ft-wt,
785
+ --_ctm-dn-on-ve-se-dt-se-ft-wt
786
+ )}
705
787
  );
706
788
  font-style: var(
707
789
  --_sf-hr-ft-se-ic,
708
- #{optionValueTextVar(
790
+ #{optionValueTextDefaultVar(
791
+ --_ctm-dn-on-ve-tt-se-ft-se-ic,
709
792
  --_ctm-dn-on-ve-tt-se-dt-se-ft-se-ic,
710
793
  --_ctm-dn-on-ve-se-dt-se-ft-se-ic
711
794
  )}
712
795
  );
713
796
  text-align: var(
714
797
  --_sf-hr-tt-an,
715
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-tt-an, --_ctm-dn-on-ve-se-dt-se-tt-an)}
798
+ #{optionValueTextDefaultVar(
799
+ --_ctm-dn-on-ve-tt-se-tt-an,
800
+ --_ctm-dn-on-ve-tt-se-dt-se-tt-an,
801
+ --_ctm-dn-on-ve-se-dt-se-tt-an
802
+ )}
716
803
  );
717
804
  letter-spacing: var(
718
805
  --_sf-hr-lr-sg,
719
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-lr-sg, --_ctm-dn-on-ve-se-dt-se-lr-sg)}
806
+ #{optionValueTextDefaultVar(
807
+ --_ctm-dn-on-ve-tt-se-lr-sg,
808
+ --_ctm-dn-on-ve-tt-se-dt-se-lr-sg,
809
+ --_ctm-dn-on-ve-se-dt-se-lr-sg
810
+ )}
720
811
  );
721
812
  // The pre-split key is `le-ht-dc`; the new section is read under both spellings
722
813
  // so whichever one the converter writes resolves.
@@ -724,7 +815,8 @@
724
815
  --_sf-hr-le-ht,
725
816
  prepareMediaVariable(
726
817
  --_ctm-dn-on-ve-tt-se-dt-se-le-ht,
727
- #{optionValueTextVar(
818
+ #{optionValueTextDefaultVar(
819
+ --_ctm-dn-on-ve-tt-se-le-ht-dc,
728
820
  --_ctm-dn-on-ve-tt-se-dt-se-le-ht-dc,
729
821
  --_ctm-dn-on-ve-se-dt-se-le-ht-dc
730
822
  )}
@@ -732,7 +824,11 @@
732
824
  );
733
825
  text-decoration: var(
734
826
  --_sf-hr-ue,
735
- #{optionValueTextVar(--_ctm-dn-on-ve-tt-se-dt-se-ue, --_ctm-dn-on-ve-se-dt-se-ue)}
827
+ #{optionValueTextDefaultVar(
828
+ --_ctm-dn-on-ve-tt-se-ue,
829
+ --_ctm-dn-on-ve-tt-se-dt-se-ue,
830
+ --_ctm-dn-on-ve-se-dt-se-ue
831
+ )}
736
832
  );
737
833
  // The swatch item is a fixed box (Swatch Item Size), so a value like "Small"
738
834
  // broke onto a second line inside it. Keep it on one line.
@@ -83,10 +83,6 @@
83
83
  --_ctm-mob-dn-sh-rs-nr-ue,
84
84
  var(--_ctm-tab-dn-sh-rs-nr-ue, var(--_ctm-dn-sh-rs-nr-ue))
85
85
  );
86
- border: var(
87
- --_ctm-mob-dn-sh-rs-nr-bd-cr,
88
- var(--_ctm-tab-dn-sh-rs-nr-bd-cr, var(--_ctm-dn-sh-rs-nr-bd-cr))
89
- );
90
86
  border-color: var(
91
87
  --_ctm-mob-dn-sh-rs-nr-br-cr,
92
88
  var(--_ctm-tab-dn-sh-rs-nr-br-cr, var(--_ctm-dn-sh-rs-nr-br-cr))
@@ -304,12 +300,10 @@
304
300
  }
305
301
  }
306
302
 
307
- &[data-widget-shadow="false"] {
308
- --_show-shadow: none;
309
- }
310
-
311
- &[data-show-shadow="false"] {
312
- --_show-shadow: none;
303
+ .search__results__count[data-show-shadow="false"],
304
+ .search__other__text[data-show-shadow="false"],
305
+ .search__keyword__text[data-show-shadow="false"] {
306
+ --_show-text-content-shadow: none;
313
307
  }
314
308
  }
315
309
  }
package/dist/sort.scss CHANGED
@@ -1,89 +1,176 @@
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
- [data-div-type="element"] {
7
- &[data-element-type="sort"] {
8
- width: var(
9
- --_sf-el-wh-st-mx,
10
- calc(
11
- 1% *
12
- var(
13
- --_ctm-mob-ele-nw-wh-vl,
14
- var(--_ctm-tab-ele-nw-wh-vl, var(--_ctm-ele-nw-wh-vl, var(--_sf-nw-wh)))
15
- )
16
- )
17
- );
18
- margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
19
-
20
- & > div {
21
- &.wrapper {
22
- width: 100%;
23
- }
24
- }
25
- //Dropdown
26
- .est__dropdown__main {
27
- position: relative;
28
- width: 100%;
29
-
30
- label {
31
- font-size: 14px;
32
- color: var(--_gray-700);
33
- margin-bottom: 8px;
34
- display: block;
35
- }
36
-
37
- .est__dropdown {
38
- cursor: pointer;
39
- position: relative;
40
- color: var(--_gray-700);
41
-
42
- border-radius: 6px;
43
- background-color: #fff;
44
- display: flex;
45
- justify-content: space-between;
46
- align-items: center;
47
- width: 100%;
48
- .value__selected {
49
- width: 100%;
50
- }
51
-
52
- &.open .list {
53
- display: flex;
54
- }
55
-
56
- .list {
57
- display: none;
58
- flex-direction: column;
59
- border: 1px solid var(--_gray-200);
60
- border-radius: 6px;
61
- position: absolute;
62
- top: 100%;
63
- left: 0;
64
- width: 100%;
65
- background-color: #fff;
66
- border-radius: 4px;
67
- z-index: var(--_higher-zIndex);
68
- max-height: 200px;
69
- overflow-y: auto;
70
-
71
- &.top {
72
- bottom: 100%;
73
- top: auto;
74
- }
75
-
76
- .list__option {
77
- padding: 12px;
78
- cursor: pointer;
79
-
80
- &:hover {
81
- background-color: var(--_primary-25);
82
- color: var(--_primary-400);
83
- }
84
- }
85
- }
86
- }
87
- }
88
- }
89
- }
1
+ @use "sass:map";
2
+ @use "sass:list";
3
+ @use "./functions.scss" as *;
4
+
5
+ $resizerId: "[data-cms-tool='cms-element-resizer']";
6
+ $resizeActive: '[data-cms-element-resizer="true"]';
7
+ [data-div-type="element"] {
8
+ &[data-element-type="sort"] {
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
+
21
+ // The Design tab's Sort Button toggles. Both are CONTROLS with no CSS property of
22
+ // their own, so the element publishes them as data attributes and the styling has
23
+ // to act on them here — an unhandled toggle stores a value that never reaches the
24
+ // page, which is what the whole Design tab did before these variables were wired.
25
+ &[data-sort-button-shadow="false"] {
26
+ --_show-shadow-sort-button: none;
27
+ }
28
+ &[data-sort-button-border="false"] {
29
+ .est__dropdown {
30
+ border: none;
31
+ }
32
+ }
33
+
34
+ & > div {
35
+ &.wrapper {
36
+ width: 100%;
37
+ }
38
+ }
39
+ //Dropdown
40
+ .est__dropdown__main {
41
+ position: relative;
42
+ width: 100%;
43
+
44
+ label {
45
+ font-size: 14px;
46
+ color: var(--_gray-700);
47
+ margin-bottom: 8px;
48
+ display: block;
49
+ }
50
+
51
+ .est__dropdown {
52
+ cursor: pointer;
53
+ position: relative;
54
+ display: flex;
55
+ justify-content: space-between;
56
+ align-items: center;
57
+ gap: 8px;
58
+ width: 100%;
59
+
60
+ // Design > Sort Button. `--_ctm-dn-st-bn-*` is what the schema's
61
+ // design.sortButton scope emits: splitCamelCaseAndJoin("design") -> "dn",
62
+ // ("sortButton") -> "st-bn". The literals stay as the fallbacks so an element
63
+ // saved before the Design tab existed keeps the look it had.
64
+ background-color: prepareMediaVariable(--_ctm-dn-st-bn-bd-cr, #fff);
65
+ border-color: prepareMediaVariable(--_ctm-dn-st-bn-br-cr, transparent);
66
+ border-style: prepareMediaVariable(--_ctm-dn-st-bn-br-se, solid);
67
+ border-width: prepareMediaVariable(--_ctm-dn-st-bn-br-wh, 0);
68
+ border-radius: prepareMediaVariable(--_ctm-dn-st-bn-br-rs, 6px);
69
+ box-shadow: var(
70
+ --_show-shadow-sort-button,
71
+ prepareMediaVariable(--_ctm-dn-st-bn-sw-ae, 0 0)
72
+ prepareMediaVariable(--_ctm-dn-st-bn-sw-br, 0)
73
+ prepareMediaVariable(--_ctm-dn-st-bn-sw-sd, 0)
74
+ prepareMediaVariable(--_ctm-dn-st-bn-sw-cr, transparent)
75
+ );
76
+
77
+ .value__selected {
78
+ display: flex;
79
+ align-items: baseline;
80
+ gap: 4px;
81
+ // The title and the value are laid out side by side, so the pair has to be
82
+ // allowed to shrink — without min-width the flex item keeps its content
83
+ // width and pushes the chevron out of a narrow element instead of clamping.
84
+ min-width: 0;
85
+ flex: 1;
86
+ }
87
+
88
+ // Text Overflow is a CONTROL, not CSS: the element adds this class and
89
+ // publishes the line count inline, one variable per typography scope.
90
+ .sort__title.flex__overflow {
91
+ white-space: normal;
92
+ @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
93
+ }
94
+ .selected__option.flex__overflow {
95
+ white-space: normal;
96
+ @include restrictToLinesShow(#{var(--_sf-line-clamp-desc, 1)});
97
+ }
98
+
99
+ // Design > Sort Title (design.sortTitle -> "dn-st-te")
100
+ .sort__title {
101
+ color: prepareMediaVariable(--_ctm-dn-st-te-cr, var(--_gray-700));
102
+ font-family: var(--_sf-hr-ff, prepareMediaVariable(--_ctm-dn-st-te-ft-fy, inherit));
103
+ font-size: prepareMediaVariable(--_ctm-dn-st-te-ft-se, inherit);
104
+ font-weight: prepareMediaVariable(--_ctm-dn-st-te-ft-wt, inherit);
105
+ font-style: prepareMediaVariable(--_ctm-dn-st-te-ft-se-ic, normal);
106
+ text-align: prepareMediaVariable(--_ctm-dn-st-te-tt-an, left);
107
+ letter-spacing: prepareMediaVariable(--_ctm-dn-st-te-lr-sg, normal);
108
+ line-height: prepareMediaVariable(--_ctm-dn-st-te-le-ht, normal);
109
+ text-decoration: prepareMediaVariable(--_ctm-dn-st-te-ue, none);
110
+ }
111
+
112
+ // Design > Selected Option (design.selectedOption -> "dn-sd-on")
113
+ .selected__option {
114
+ color: prepareMediaVariable(--_ctm-dn-sd-on-cr, var(--_gray-700));
115
+ font-family: var(--_sf-hr-ff, prepareMediaVariable(--_ctm-dn-sd-on-ft-fy, inherit));
116
+ font-size: prepareMediaVariable(--_ctm-dn-sd-on-ft-se, inherit);
117
+ font-weight: prepareMediaVariable(--_ctm-dn-sd-on-ft-wt, inherit);
118
+ font-style: prepareMediaVariable(--_ctm-dn-sd-on-ft-se-ic, normal);
119
+ text-align: prepareMediaVariable(--_ctm-dn-sd-on-tt-an, left);
120
+ letter-spacing: prepareMediaVariable(--_ctm-dn-sd-on-lr-sg, normal);
121
+ line-height: prepareMediaVariable(--_ctm-dn-sd-on-le-ht, normal);
122
+ text-decoration: prepareMediaVariable(--_ctm-dn-sd-on-ue, none);
123
+ }
124
+
125
+ &.open .list {
126
+ display: flex;
127
+ }
128
+
129
+ .list {
130
+ display: none;
131
+ flex-direction: column;
132
+ border: 1px solid var(--_gray-200);
133
+ border-radius: 6px;
134
+ position: absolute;
135
+ top: 100%;
136
+ left: 0;
137
+ width: 100%;
138
+ background-color: #fff;
139
+ border-radius: 4px;
140
+ z-index: var(--_higher-zIndex);
141
+ max-height: 200px;
142
+ overflow-y: auto;
143
+
144
+ &.top {
145
+ bottom: 100%;
146
+ top: auto;
147
+ }
148
+
149
+ .list__option {
150
+ padding: 12px;
151
+ cursor: pointer;
152
+ // The list has no design scope of its own. It borrows the Selected
153
+ // Option's type so the open list matches the closed control — colour and
154
+ // alignment are left to the list's own resting/hover rules below, which
155
+ // are what make an option look clickable.
156
+ font-family: var(--_sf-hr-ff, prepareMediaVariable(--_ctm-dn-sd-on-ft-fy, inherit));
157
+ font-size: prepareMediaVariable(--_ctm-dn-sd-on-ft-se, inherit);
158
+ font-weight: prepareMediaVariable(--_ctm-dn-sd-on-ft-wt, inherit);
159
+ letter-spacing: prepareMediaVariable(--_ctm-dn-sd-on-lr-sg, normal);
160
+ color: var(--_gray-700);
161
+
162
+ &:hover {
163
+ background-color: var(--_primary-25);
164
+ color: var(--_primary-400);
165
+ }
166
+
167
+ &[aria-selected="true"] {
168
+ background-color: var(--_primary-25);
169
+ color: var(--_primary-400);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ }