@sc-360-v2/storefront-cms-library 0.5.50 → 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.
Files changed (58) hide show
  1. package/dist/add-order.scss +62 -13
  2. package/dist/brand-basic-elements.scss +109 -46
  3. package/dist/brand.scss +6 -0
  4. package/dist/breadcrumbs.scss +157 -51
  5. package/dist/builder.js +1 -1
  6. package/dist/bundle copy.scss +2805 -0
  7. package/dist/bundle.scss +74 -48
  8. package/dist/bundleDetails.scss +1360 -275
  9. package/dist/button copy.scss +271 -0
  10. package/dist/cart-details.scss +214 -0
  11. package/dist/cart.scss +124 -41
  12. package/dist/category-groups-product-image.scss +72 -21
  13. package/dist/category.scss +25 -4
  14. package/dist/container.scss +20 -17
  15. package/dist/embed-temp.scss +2 -2
  16. package/dist/hotspot.scss +153 -77
  17. package/dist/icon-library.scss +78 -74
  18. package/dist/image-temp.scss +2 -1
  19. package/dist/language-selector.scss +215 -55
  20. package/dist/light-box-v2.scss +4 -3
  21. package/dist/line.scss +54 -36
  22. package/dist/login.scss +225 -69
  23. package/dist/map.scss +354 -147
  24. package/dist/marchandiserSets.scss +34 -0
  25. package/dist/menu-v2.scss +51 -3
  26. package/dist/modal.scss +251 -28
  27. package/dist/product-actions.scss +53 -0
  28. package/dist/product-basic-elements.scss +44 -244
  29. package/dist/product-image-allocation.scss +51 -15
  30. package/dist/product-image-bundles.scss +72 -15
  31. package/dist/product-image.scss +178 -19
  32. package/dist/productDetails.scss +33 -0
  33. package/dist/quick-links.scss +23 -2
  34. package/dist/repeater copy.scss +635 -0
  35. package/dist/repeater-embla-controls.scss +9 -1
  36. package/dist/repeater-grid-toggle.scss +121 -7
  37. package/dist/repeater-item.scss +5 -1
  38. package/dist/repeater.scss +69 -102
  39. package/dist/review-cart.scss +7 -1
  40. package/dist/scroll.scss +52 -11
  41. package/dist/search.scss +46 -6
  42. package/dist/skeleton.scss +24 -35
  43. package/dist/styles.css +1 -1
  44. package/dist/tab-container.scss +14 -12
  45. package/dist/tab-v2.scss +834 -583
  46. package/dist/text-temp-v2.scss +18 -1
  47. package/dist/types/builder/tools/element-edit/breadcrumbs.d.ts +26 -5
  48. package/dist/types/builder/tools/element-edit/cart.d.ts +7 -0
  49. package/dist/types/builder/tools/element-edit/map.d.ts +0 -1
  50. package/dist/types/builder/tools/element-edit/product-image.d.ts +1 -0
  51. package/dist/types/builder/tools/element-edit/quickLinks.d.ts +6 -0
  52. package/dist/types/builder/tools/element-edit/repeater.d.ts +1 -1
  53. package/dist/types/builder/tools/element-edit/search.d.ts +4 -61
  54. package/dist/types/builder/tools/element-edit/tabsV2.d.ts +164 -1
  55. package/dist/types/builder/tools/element-edit/video.d.ts +32 -0
  56. package/dist/upload-media.scss +14 -2
  57. package/dist/video.scss +548 -476
  58. package/package.json +1 -1
@@ -19,9 +19,16 @@ $wrapper: ".tgl__wrapper";
19
19
  display: var(--_d-flex);
20
20
  align-items: center;
21
21
  // border: 1px solid var(--_gray-200);
22
- border-style: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-se, solid);
23
- border-width: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-wh, 1px);
24
- border-color: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-cr, var(--_gray-200));
22
+ // Gated on the Layout Style > Show Border switch; previously the border was
23
+ // unconditional, so turning the switch off changed nothing.
24
+ &[data-show-border="true"] {
25
+ border-style: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-se, solid);
26
+ border-width: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-wh, 1px);
27
+ border-color: prepareMediaVariable(
28
+ --_ctm-rep-dn-gd-vw-cl-se-lt-se-br-cr,
29
+ var(--_gray-200)
30
+ );
31
+ }
25
32
  --_br-6: 6px;
26
33
  --_width-40: 40px;
27
34
  --_width-20: 20px;
@@ -39,7 +46,10 @@ $wrapper: ".tgl__wrapper";
39
46
  --_sf-at-btn-size,
40
47
  #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-in-se, var(--_width-20))}
41
48
  )};
42
- width: calc(#{$size} * 2);
49
+ width: var(
50
+ --_sf-at-btn-wh,
51
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-wh, calc(#{$size} * 2))}
52
+ );
43
53
  height: calc(#{$size} * 2);
44
54
  align-items: center;
45
55
  justify-content: center;
@@ -48,11 +58,98 @@ $wrapper: ".tgl__wrapper";
48
58
  #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-bd-cr)}
49
59
  );
50
60
 
61
+ padding: var(
62
+ --_sf-at-btn-pg,
63
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-pg, 0px)}
64
+ );
65
+
66
+ // Border / radius / shadow now come from the button's own settings. The
67
+ // first/last radius overrides below only apply while no radius is configured,
68
+ // so the default pill shape survives an unconfigured toggle.
69
+ &[data-show-border="true"] {
70
+ border-color: var(
71
+ --_sf-at-btn-br-cr,
72
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-br-cr)}
73
+ );
74
+ border-style: var(
75
+ --_sf-at-btn-br-se,
76
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-br-se)}
77
+ );
78
+ border-width: var(
79
+ --_sf-at-btn-br-wh,
80
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-br-wh)}
81
+ );
82
+ }
83
+
84
+ // Show Shadow / Show Icon are per-state switches on the Button accordion; they
85
+ // reach the markup as data attributes and gate the two variables below.
86
+ &[data-show-shadow="false"] {
87
+ --_show-shadow: none;
88
+ }
89
+ &[data-show-icon="false"] {
90
+ --_show-icon: none;
91
+ }
92
+
93
+ box-shadow: var(
94
+ --_show-shadow,
95
+ var(
96
+ --_sf-at-btn-sw-ae,
97
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-ae, 0)}
98
+ )
99
+ var(
100
+ --_sf-at-btn-sw-br,
101
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-br, 0)}
102
+ )
103
+ var(
104
+ --_sf-at-btn-sw-sd,
105
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-sd, 0)}
106
+ )
107
+ var(
108
+ --_sf-at-btn-sw-cr,
109
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-cr, transparent)}
110
+ )
111
+ );
112
+
113
+ // Radius falls back to the pill geometry these two buttons have always had.
114
+ // It is NOT routed through an --_sf-at-btn-* variable: prepareMediaVariable
115
+ // tails with `inherit`, so the variable would always be "set" and the
116
+ // per-position fallback below would never fire, collapsing the pill to 0.
51
117
  &:first-of-type {
52
- border-radius: 4px 0 0 4px;
118
+ border-radius: #{prepareMediaVariable(
119
+ --_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-br-rs,
120
+ 4px 0 0 4px
121
+ )};
53
122
  }
54
123
  &:last-of-type {
55
- border-radius: 0 4px 4px 0;
124
+ border-radius: #{prepareMediaVariable(
125
+ --_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-br-rs,
126
+ 0 4px 4px 0
127
+ )};
128
+ }
129
+
130
+ // Hover sits between default and selected: it overrides the same
131
+ // `--_sf-at-btn-*` layer, and the `[data-style-active="true"]` block below
132
+ // comes later in source order, so the selected button keeps its own styling
133
+ // while hovered rather than flipping to the hover look.
134
+ &:hover {
135
+ --_sf-at-btn-size: #{prepareMediaVariable(
136
+ --_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-in-se,
137
+ var(--_width-20)
138
+ )};
139
+ --_sf-at-pt-cl: #{prepareMediaVariable(
140
+ --_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-in-c1,
141
+ var(--_gray-700)
142
+ )};
143
+ --_sf-at-btn-bd: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-bd-cr)};
144
+ --_sf-at-btn-br-cr: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-br-cr)};
145
+ --_sf-at-btn-br-se: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-br-se)};
146
+ --_sf-at-btn-br-wh: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-br-wh)};
147
+ --_sf-at-btn-sw-ae: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-sw-ae)};
148
+ --_sf-at-btn-sw-br: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-sw-br)};
149
+ --_sf-at-btn-sw-sd: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-sw-sd)};
150
+ --_sf-at-btn-sw-cr: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-sw-cr)};
151
+ --_sf-at-btn-wh: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-wh)};
152
+ --_sf-at-btn-pg: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-hr-se-pg)};
56
153
  }
57
154
 
58
155
  &[data-style-active="true"] {
@@ -70,12 +167,29 @@ $wrapper: ".tgl__wrapper";
70
167
  var(--_gray-200)
71
168
  )};
72
169
  // background: var(--_gray-200);
170
+
171
+ // Selected state overrides the same properties via the --_sf-at-btn-* layer
172
+ // the default declarations above already read from.
173
+ --_sf-at-btn-br-cr: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-br-cr)};
174
+ --_sf-at-btn-br-se: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-br-se)};
175
+ --_sf-at-btn-br-wh: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-br-wh)};
176
+ --_sf-at-btn-sw-ae: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-sw-ae)};
177
+ --_sf-at-btn-sw-br: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-sw-br)};
178
+ --_sf-at-btn-sw-sd: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-sw-sd)};
179
+ --_sf-at-btn-sw-cr: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-sw-cr)};
180
+ --_sf-at-btn-wh: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-wh)};
181
+ --_sf-at-btn-pg: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-pg)};
73
182
  }
74
183
 
75
- svg {
184
+ // `img` covers custom uploaded toggle icons, which render as an <img>.
185
+ svg,
186
+ img {
187
+ display: var(--_show-icon, block);
76
188
  width: calc(#{$size} * 1);
77
189
  height: calc(#{$size} * 1);
190
+ }
78
191
 
192
+ svg {
79
193
  path {
80
194
  stroke: var(
81
195
  --_sf-at-pt-cl,
@@ -14,11 +14,15 @@
14
14
  // width: 100%;
15
15
  // background: var(--_ctm-repe-dn-bd-cr);
16
16
 
17
+ height: 100%;
18
+ // inline `min-height: 0px` on the element needs !important to be overridden
19
+ min-height: prepareMediaVariable(--_ctm-repe-lt-mn-ht, 100px) !important;
20
+
17
21
  & > div {
18
22
  &.wrapper {
19
23
  width: 100%;
20
24
  height: 100%;
21
- min-height: prepareMediaVariable(--_ctm-repe-lt-mn-ht, 0px) !important;
25
+ min-height: prepareMediaVariable(--_ctm-repe-lt-mn-ht, 100px) !important;
22
26
  padding: var(--_ctm-mob-repe-lt-pg, var(--_ctm-tab-repe-lt-pg, var(--_ctm-repe-lt-pg)));
23
27
  //margin: var(--_ctm-mob-repe-lt-mn, var(--_ctm-tab-repe-lt-mn, var(--_ctm-repe-lt-mn)));
24
28
 
@@ -105,34 +105,49 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
105
105
  // --_ctm-mob-rep-dn-rr-wt-bd-se,
106
106
  // var(--_ctm-tab-rep-dn-rr-wt-bd-se, var(--_ctm-rep-dn-rr-wt-bd-se))
107
107
  // );
108
+ &[data-show-border="true"] {
109
+ border-color: var(
110
+ --_ctm-mob-rep-dn-rr-wt-br-cr,
111
+ var(--_ctm-tab-rep-dn-rr-wt-br-cr, var(--_ctm-rep-dn-rr-wt-br-cr))
112
+ );
113
+ border-style: var(
114
+ --_ctm-mob-rep-dn-rr-wt-br-se,
115
+ var(--_ctm-tab-rep-dn-rr-wt-br-se, var(--_ctm-rep-dn-rr-wt-br-se))
116
+ );
117
+ border-width: var(
118
+ --_ctm-mob-rep-dn-rr-wt-br-wh,
119
+ var(--_ctm-tab-rep-dn-rr-wt-br-wh, var(--_ctm-rep-dn-rr-wt-br-wh))
120
+ );
121
+ }
108
122
  border-radius: var(
109
123
  --_ctm-mob-rep-dn-rr-wt-br-rs,
110
124
  var(--_ctm-tab-rep-dn-rr-wt-br-rs, var(--_ctm-rep-dn-rr-wt-br-rs))
111
125
  );
112
- border-color: var(
113
- --_ctm-mob-rep-dn-rr-wt-br-cr,
114
- var(--_ctm-tab-rep-dn-rr-wt-br-cr, var(--_ctm-rep-dn-rr-wt-br-cr))
115
- );
116
- border-style: var(
117
- --_ctm-mob-rep-dn-rr-wt-br-se,
118
- var(--_ctm-tab-rep-dn-rr-wt-br-se, var(--_ctm-rep-dn-rr-wt-br-se))
119
- );
120
- border-width: var(
121
- --_ctm-mob-rep-dn-rr-wt-br-wh,
122
- var(--_ctm-tab-rep-dn-rr-wt-br-wh, var(--_ctm-rep-dn-rr-wt-br-wh))
123
- );
126
+
127
+ // The shadow is configured under the Repeater Widget accordion, so its variables
128
+ // carry that accordion's `rr-wt` segment — without it nothing the builder writes
129
+ // was ever read back. The Show Shadow switch arrives as `data-show-shadow`.
130
+ &[data-show-shadow="false"] {
131
+ --_show-shadow: none;
132
+ }
124
133
  box-shadow: var(
125
- --_hover-show-shadow,
134
+ --_show-shadow,
126
135
  var(
127
- --_sf-hr-bx-sw,
136
+ --_ctm-mob-rep-dn-rr-wt-sw-ae,
137
+ var(--_ctm-tab-rep-dn-rr-wt-sw-ae, var(--_ctm-rep-dn-rr-wt-sw-ae, 0))
138
+ )
128
139
  var(
129
- --_show-shadow,
130
- var(--_ctm-mob-rep-dn-sw-ae, var(--_ctm-tab-rep-dn-sw-ae, var(--_ctm-rep-dn-sw-ae)))
131
- var(--_ctm-mob-rep-dn-sw-br, var(--_ctm-tab-rep-dn-sw-br, var(--_ctm-rep-dn-sw-br)))
132
- var(--_ctm-mob-rep-dn-sw-sd, var(--_ctm-tab-rep-dn-sw-sd, var(--_ctm-rep-dn-sw-sd)))
133
- var(--_ctm-mob-rep-dn-sw-cr, var(--_ctm-tab-rep-dn-sw-cr, var(--_ctm-rep-dn-sw-cr)))
140
+ --_ctm-mob-rep-dn-rr-wt-sw-br,
141
+ var(--_ctm-tab-rep-dn-rr-wt-sw-br, var(--_ctm-rep-dn-rr-wt-sw-br, 0))
142
+ )
143
+ var(
144
+ --_ctm-mob-rep-dn-rr-wt-sw-sd,
145
+ var(--_ctm-tab-rep-dn-rr-wt-sw-sd, var(--_ctm-rep-dn-rr-wt-sw-sd, 0))
146
+ )
147
+ var(
148
+ --_ctm-mob-rep-dn-rr-wt-sw-cr,
149
+ var(--_ctm-tab-rep-dn-rr-wt-sw-cr, var(--_ctm-rep-dn-rr-wt-sw-cr, transparent))
134
150
  )
135
- )
136
151
  );
137
152
  padding: var(--_ctm-mob-rep-lt-pg, var(--_ctm-tab-rep-lt-pg, var(--_ctm-rep-lt-pg)));
138
153
 
@@ -315,6 +330,12 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
315
330
  --_ctm-mob-rep-lt-cl-ae-cr,
316
331
  var(--_ctm-tab-rep-lt-cl-ae-cr, var(--_ctm-rep-lt-cl-ae-cr))
317
332
  );
333
+ // Resting arrow colour (Layout > Slider Settings > Arrow Icon Color). Fallback is
334
+ // the colour baked into the chevron icons, so untouched repeaters look the same.
335
+ --_sf-sl-ct-aw-in-cl: var(
336
+ --_ctm-mob-rep-lt-aw-in-cr,
337
+ var(--_ctm-tab-rep-lt-aw-in-cr, var(--_ctm-rep-lt-aw-in-cr, #667085))
338
+ );
318
339
  // &:is([data-control-type="1"]) {
319
340
  // @include CMSRepeaterEmblaControlStyles(1);
320
341
  // }
@@ -406,86 +427,21 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
406
427
  }
407
428
 
408
429
  #{$adSlotElementSelector} {
430
+ // The Ad Style > Image Controls schema was dropped, so these are plain values
431
+ // rather than custom properties — they reproduce what that schema defaulted to
432
+ // (full-bleed, centred, no border or shadow).
409
433
  a {
410
434
  width: 100%;
411
435
  display: var(--_d-flex);
412
436
  height: 100%;
413
- &:is(.lst_vw[data-element-type="repeater"] *) {
414
- --_sf-bm-sjst-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-jy-ct)};
415
- --_sf-bm-salg-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-an-is)};
416
- }
417
- justify-content: var(
418
- --_sf-bm-sjst-vlo-pp,
419
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-jy-ct)}
420
- );
421
- align-items: var(
422
- --_sf-bm-sjst-vlo-pp,
423
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-an-is)}
424
- );
437
+ justify-content: center;
438
+ align-items: center;
425
439
  }
426
440
  img {
427
441
  max-width: 100%;
428
442
  max-height: 100%;
429
- border-color: var(
430
- --_sf-bm-img-brr-clrrr,
431
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-cr)}
432
- );
433
- border-style: var(
434
- --_sf-bm-img-brr-sty,
435
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-se)}
436
- );
437
- border-width: var(
438
- --_sf-bm-img-brr-wdt,
439
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-wh, 0px)}
440
- );
441
- border-radius: var(
442
- --_sf-bm-img-brr-br,
443
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-rs)}
444
- );
445
- box-shadow: var(
446
- --_sf-bm-img-bx-sdw,
447
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-ae)}
448
- )
449
- var(
450
- --_sf-bm-img-bx-sdw-blr,
451
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-br)}
452
- )
453
- var(
454
- --_sf-bm-img-bx-sdw-sprd,
455
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-sd)}
456
- )
457
- var(
458
- --_sf-bm-img-bx-sdw-clr,
459
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-cr)}
460
- );
461
- // height: 100%;
462
- // width: 100%;
463
- // min-height: var(--_sf-img-mn-ht, 500px);
464
- // max-height: 100%;
465
- &:is(.lst_vw[data-element-type="repeater"] *) {
466
- --_sf-bm-swtdh-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-wh)};
467
- --_sf-bm-sht-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-ht)};
468
- --_sf-bm-img-brr-clrrr: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-cr)};
469
- --_sf-bm-img-brr-sty: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-se)};
470
- --_sf-bm-img-brr-wdt: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-wh)};
471
- --_sf-bm-img-brr-br: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-rs)};
472
- --_sf-bm-img-bx-sdw: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-ae)};
473
- --_sf-bm-img-bx-sdw-blr: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-br)};
474
- --_sf-bm-img-bx-sdw-sprd: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-sd)};
475
- --_sf-bm-img-bx-sdw-clr: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-cr)};
476
- }
477
- &:not(.lst_vw[data-element-type="repeater"] *) {
478
- --_sf-ht-vl: max(#{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-ht)}, auto);
479
- }
480
-
481
- width: var(
482
- --_sf-bm-swtdh-vlo-pp,
483
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-wh)}
484
- );
485
- height: var(
486
- --_sf-bm-sht-vlo-pp,
487
- var(--_sf-ht-vl, #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-ht)})
488
- );
443
+ width: 100%;
444
+ height: 100%;
489
445
  object-fit: cover;
490
446
  object-position: center top;
491
447
  }
@@ -507,16 +463,19 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
507
463
  justify-content: center;
508
464
  padding: 0;
509
465
  z-index: 2;
510
- --_sf-wdt-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-aw-in-se, 28x)};
511
- --_sf-bgr-clr-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-cl-ae-cr, blue)};
512
- width: var(--_sf-wdt-vl-v2, 28px);
513
- height: var(--_sf-wdt-vl-v2, 28px);
466
+ // The Ad Style > Slider Controls schema was dropped, so the custom properties
467
+ // only resolve on pages saved before that. The fallbacks reproduce what that
468
+ // schema defaulted to (32px arrows, black).
469
+ --_sf-wdt-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-aw-in-se, 32px)};
470
+ --_sf-bgr-clr-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-cl-ae-cr, #000)};
471
+ width: var(--_sf-wdt-vl-v2, 32px);
472
+ height: var(--_sf-wdt-vl-v2, 32px);
514
473
  background: color-mix(in srgb, var(--_sf-bgr-clr-vl-v2) 10%, transparent);
515
474
 
516
475
  svg {
517
476
  --_perc: 0.5;
518
- width: calc(var(--_sf-wdt-vl-v2, 28px) * var(--_perc));
519
- height: calc(var(--_sf-wdt-vl-v2, 28px) * var(--_perc));
477
+ width: calc(var(--_sf-wdt-vl-v2, 32px) * var(--_perc));
478
+ height: calc(var(--_sf-wdt-vl-v2, 32px) * var(--_perc));
520
479
 
521
480
  path {
522
481
  stroke: var(--_sf-bgr-clr-vl-v2);
@@ -713,10 +672,18 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
713
672
 
714
673
  border-radius: var(--_sf-hr-br-rs, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-br-rs));
715
674
 
716
- box-shadow: var(--_sf-hr-sw-ae, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-ae))
717
- var(--_sf-hr-sw-br, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-br))
718
- var(--_sf-hr-sw-sd, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-sd))
719
- var(--_sf-hr-sw-cr, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-cr));
675
+ // Routed through the two gate variables the Show Shadow switches set above,
676
+ // otherwise turning the switch off left the shadow on screen.
677
+ box-shadow: var(
678
+ --_hover-show-shadow,
679
+ var(
680
+ --_show-shadow,
681
+ var(--_sf-hr-sw-ae, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-ae, 0))
682
+ var(--_sf-hr-sw-br, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-br, 0))
683
+ var(--_sf-hr-sw-sd, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-sd, 0))
684
+ var(--_sf-hr-sw-cr, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-cr, transparent))
685
+ )
686
+ );
720
687
 
721
688
  &[data-show-border="true"] {
722
689
  border-color: var(--_sf-hr-br-cr, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-br-cr));
@@ -90,10 +90,16 @@
90
90
  background: #ffd700;
91
91
  border-radius: 4px;
92
92
  left: 15px;
93
- padding: 2px;
93
+ // Width bounds only; the existing padding is left as-is.
94
+ min-width: 20px;
95
+ max-width: 80px;
96
+ box-sizing: border-box;
97
+ padding: 12px 4px;
94
98
  line-height: normal;
95
99
  color: #1f1930;
96
100
  font-weight: 400;
101
+ white-space: nowrap;
102
+ overflow: hidden;
97
103
  }
98
104
  }
99
105
  .cart_content {
package/dist/scroll.scss CHANGED
@@ -23,6 +23,21 @@ $max-items: 20;
23
23
  overflow: hidden;
24
24
  white-space: nowrap;
25
25
 
26
+ // The Scroll Container's shadow used to be painted here as well as on
27
+ // `.scroll__container` below. This wrapper is a separate, square box that sits
28
+ // outside the container, so the second copy was drawn around the wrapper with
29
+ // square corners — the shadow appearing "outside the element" and ignoring the
30
+ // corner radius. Only `.scroll__container` paints it now, and it carries the
31
+ // matching border-radius.
32
+ //
33
+ // The wrapper clips (`overflow: hidden`), so it needs the same radius or its
34
+ // square clip cuts the container's rounded corners back off — and the shadow
35
+ // below, which is painted here, then follows the rounded shape too.
36
+ border-radius: var(
37
+ --_ctm-mob-dn-sl-cr-br-rs,
38
+ var(--_ctm-tab-dn-sl-cr-br-rs, var(--_ctm-dn-sl-cr-br-rs))
39
+ );
40
+
26
41
  &[data-widget-shadow="true"] {
27
42
  box-shadow: var(
28
43
  --_ctm-mob-dn-sl-cr-sw-ae,
@@ -65,6 +80,32 @@ $max-items: 20;
65
80
  --_ctm-dn-i#{$i}-br-rs,
66
81
  #{prepareMediaVariable(--_ctm-dn-i1-br-rs)}
67
82
  );
83
+ // Each item's schema has carried showShadow/shadowColor/angle/spread/blur all
84
+ // along, but nothing ever read them — the only box-shadow declarations in this
85
+ // file were the container's. `--_show-item-shadow` is set to `none` by the
86
+ // item's own Show Shadow switch below.
87
+ box-shadow: var(
88
+ --_show-item-shadow,
89
+ prepareMediaVariable(
90
+ --_ctm-dn-i#{$i}-sw-ae,
91
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-ae)}
92
+ )
93
+ prepareMediaVariable(
94
+ --_ctm-dn-i#{$i}-sw-br,
95
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-br)}
96
+ )
97
+ prepareMediaVariable(
98
+ --_ctm-dn-i#{$i}-sw-sd,
99
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-sd)}
100
+ )
101
+ prepareMediaVariable(
102
+ --_ctm-dn-i#{$i}-sw-cr,
103
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-cr)}
104
+ )
105
+ );
106
+ &[data-item-shadow="false"] {
107
+ --_show-item-shadow: none;
108
+ }
68
109
  color: prepareMediaVariable(
69
110
  --_ctm-dn-i#{$i}-cr,
70
111
  #{prepareMediaVariable(--_ctm-dn-i1-cr)}
@@ -158,17 +199,17 @@ $max-items: 20;
158
199
  }
159
200
  }
160
201
 
161
- &[data-widget-shadow="true"] .scroll__container {
162
- box-shadow: var(
163
- --_ctm-mob-dn-sl-cr-sw-ae,
164
- var(--_ctm-tab-dn-sl-cr-sw-ae, var(--_ctm-dn-sl-cr-sw-ae))
165
- )
166
- var(--_ctm-mob-dn-sl-cr-sw-br, var(--_ctm-tab-dn-sl-cr-sw-br, var(--_ctm-dn-sl-cr-sw-br)))
167
- var(--_ctm-mob-dn-sl-cr-sw-sd, var(--_ctm-tab-dn-sl-cr-sw-sd, var(--_ctm-dn-sl-cr-sw-sd)))
168
- var(--_ctm-mob-dn-sl-cr-sw-cr, var(--_ctm-tab-dn-sl-cr-sw-cr, var(--_ctm-dn-sl-cr-sw-cr)));
169
- }
170
-
171
- &[data-widget-shadow="false"] .scroll__container {
202
+ // The Scroll Container's shadow is painted on `.wrapper` rather than on
203
+ // `.scroll__container`: the container fills the wrapper, and the wrapper clips
204
+ // (`overflow: hidden`), so a shadow on the container would be clipped away. An
205
+ // element's own box-shadow is never clipped by its own overflow, so the wrapper is
206
+ // the right box for it — and it carries the matching border-radius (see above) so
207
+ // the shadow follows the rounded shape instead of drawing a square glow.
208
+ //
209
+ // These were previously written as `&[data-widget-shadow=...]`, which targets the
210
+ // element root, but the attribute is emitted on `.wrapper` (unlike
211
+ // `data-widget-border`, which is on the root) — so neither rule ever matched.
212
+ & > .wrapper[data-widget-shadow="false"] {
172
213
  box-shadow: none;
173
214
  }
174
215
 
package/dist/search.scss CHANGED
@@ -320,7 +320,7 @@
320
320
  align-items: center;
321
321
  width: 100%;
322
322
  height: 100%;
323
- border: 1px solid var(--_gray-200);
323
+ // border: 1px solid var(--_gray-200);
324
324
  background-color: var(
325
325
  --_ctm-mob-dn-sh-br-bd-cr,
326
326
  var(--_ctm-tab-dn-sh-br-bd-cr, var(--_ctm-dn-sh-br-bd-cr))
@@ -378,6 +378,7 @@
378
378
  outline: none;
379
379
  // padding: 8px;
380
380
  background: transparent;
381
+ padding: var(--_ctm-mob-dn-sh-br-pg, var(--_ctm-tab-dn-sh-br-pg, var(--_ctm-dn-sh-br-pg)));
381
382
  color: var(
382
383
  --_ctm-mob-dn-sh-br-cr,
383
384
  var(--_ctm-tab-dn-sh-br-cr, var(--_ctm-dn-sh-br-cr, #333))
@@ -457,12 +458,51 @@
457
458
  }
458
459
 
459
460
  .search-button {
460
- color: var(--_base-white);
461
- border: none;
462
- // padding-left: 10px;
463
- border-radius: 4px;
464
- // cursor: pointer;
465
461
  transition: 0.3s;
462
+ height: 100%;
463
+ display: flex;
464
+ align-items: center;
465
+
466
+ background-color: var(
467
+ --_ctm-mob-dn-sh-in-bd-cr,
468
+ var(--_ctm-tab-dn-sh-in-bd-cr, var(--_ctm-dn-sh-in-bd-cr))
469
+ );
470
+ border-color: var(
471
+ --_ctm-mob-dn-sh-in-br-cr,
472
+ var(--_ctm-tab-dn-sh-in-br-cr, var(--_ctm-dn-sh-in-br-cr))
473
+ );
474
+ border-style: var(
475
+ --_ctm-mob-dn-sh-in-br-se,
476
+ var(--_ctm-tab-dn-sh-in-br-se, var(--_ctm-dn-sh-in-br-se))
477
+ );
478
+ border-width: var(
479
+ --_ctm-mob-dn-sh-in-br-wh,
480
+ var(--_ctm-tab-dn-sh-in-br-wh, var(--_ctm-dn-sh-in-br-wh))
481
+ );
482
+ border-radius: var(
483
+ --_ctm-mob-dn-sh-in-br-rs,
484
+ var(--_ctm-tab-dn-sh-in-br-rs, var(--_ctm-dn-sh-in-br-rs))
485
+ );
486
+ box-shadow: var(
487
+ --_show-text-content-shadow,
488
+ var(
489
+ --_ctm-mob-dn-sh-in-sw-ae,
490
+ var(--_ctm-tab-dn-sh-in-sw-ae, var(--_ctm-dn-sh-in-sw-ae, none))
491
+ )
492
+ var(
493
+ --_ctm-mob-dn-sh-in-sw-br,
494
+ var(--_ctm-tab-dn-sh-in-sw-br, var(--_ctm-dn-sh-in-sw-br, none))
495
+ )
496
+ var(
497
+ --_ctm-mob-dn-sh-in-sw-sd,
498
+ var(--_ctm-tab-dn-sh-in-sw-sd, var(--_ctm-dn-sh-in-sw-sd, none))
499
+ )
500
+ var(
501
+ --_ctm-mob-dn-sh-in-sw-cr,
502
+ var(--_ctm-tab-dn-sh-in-sw-cr, var(--_ctm-dn-sh-in-sw-cr, none))
503
+ )
504
+ );
505
+ padding: var(--_ctm-mob-dn-sh-in-pg, var(--_ctm-tab-dn-sh-in-pg, var(--_ctm-dn-sh-in-pg)));
466
506
  .icon {
467
507
  display: flex;
468
508
  }
@@ -1,38 +1,27 @@
1
- .skeleton__element {
2
- background-color: var(--_gray-300);
3
- border-radius: 6px;
4
- position: var(--_p-relative);
5
- overflow: hidden;
6
- display: inline-block;
7
- min-height: 12px;
8
- &.rounded {
9
- border-radius: 50%;
10
- }
11
- &::before {
12
- content: "";
13
- position: absolute;
14
- top: 0;
15
- left: 0;
16
- width: 100%;
17
- height: 100%;
18
- background: linear-gradient(
19
- 90deg,
20
- rgba(255, 255, 255, 0) 0%,
21
- rgba(255, 255, 255, 0.6) 50%,
22
- rgba(255, 255, 255, 0) 100%
23
- );
24
- animation: skeleton-shimmer 1.5s infinite ease-in-out;
25
- }
26
- }
27
-
28
- @keyframes skeleton-shimmer {
29
- 0% {
30
- transform: translateX(-100%);
31
- }
32
- 100% {
33
- transform: translateX(100%);
34
- }
35
- }
1
+ // `.skeleton__element` and `@keyframes skeleton-shimmer` are NOT defined here.
2
+ //
3
+ // They used to be — a copy of the library's old skeleton.scss. But global-styles.scss
4
+ // also defines them (mirrored from storefront-websites globals, which is what the
5
+ // shared elements are written against), and both files load into the builder. The two
6
+ // definitions did not replace each other, they stacked:
7
+ //
8
+ // old rule -> .skeleton__element::before { absolute gradient + shimmer }
9
+ // new rule -> .skeleton__element::after { absolute gradient + shimmer }
10
+ //
11
+ // so every skeleton ran TWO shimmer sweeps at once (0.6 alpha over 0.4), which read as
12
+ // a flicker in the builder canvas. The old `border-radius: 6px` also leaked through,
13
+ // since the new rules never set one — corners the same skeleton does not have on the
14
+ // storefront. Confirmed in the browser on the cms-builder page: both pseudo-elements
15
+ // had `animation-name: skeleton-shimmer` and the box computed `border-radius: 6px`.
16
+ //
17
+ // global-styles.scss is now the single definition, so the builder and the storefront
18
+ // render these skeletons identically. Everything the old block set that still matters
19
+ // (`display: block`, `min-height`, background) is already there. Nothing in the CMS
20
+ // used `.skeleton__element.rounded` the dashboard Skeleton is a CSS module with its
21
+ // own scoped class, and the shared Skeleton component sets its radius inline.
22
+ //
23
+ // If a skeleton style needs changing, change it in ONE of the two mirrored files
24
+ // (globals.scss in storefront-websites, global-styles.scss here) and copy it across.
36
25
 
37
26
  // dropdown skeletons
38
27
  .dpd_skeleton {