@ulu/frontend 0.1.0-beta.31 → 0.1.0-beta.33

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 (174) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/ulu-frontend.min.css +1 -1
  3. package/dist/ulu-frontend.min.js +11 -11
  4. package/docs-dev/changelog/index.html +90 -10
  5. package/docs-dev/demos/accordion/index.html +8 -8
  6. package/docs-dev/demos/button/index.html +8 -8
  7. package/docs-dev/demos/button-verbose/index.html +8 -8
  8. package/docs-dev/demos/callout/index.html +26 -8
  9. package/docs-dev/demos/captioned-figure/index.html +8 -8
  10. package/docs-dev/demos/card/index.html +29 -33
  11. package/docs-dev/demos/card-grid/index.html +12 -12
  12. package/docs-dev/demos/css-icons/index.html +8 -8
  13. package/docs-dev/demos/data-grid/index.html +8 -8
  14. package/docs-dev/demos/data-table/index.html +33 -33
  15. package/docs-dev/demos/details-group/index.html +8 -8
  16. package/docs-dev/demos/file-save/index.html +8 -8
  17. package/docs-dev/demos/flipcard/index.html +8 -8
  18. package/docs-dev/demos/form-theme/index.html +8 -8
  19. package/docs-dev/demos/index.html +8 -8
  20. package/docs-dev/demos/list-inline/index.html +8 -8
  21. package/docs-dev/demos/list-lines/index.html +8 -8
  22. package/docs-dev/demos/menu-stack/index.html +8 -8
  23. package/docs-dev/demos/modals/index.html +8 -8
  24. package/docs-dev/demos/nav-strip/index.html +8 -8
  25. package/docs-dev/demos/overlay-section/index.html +8 -8
  26. package/docs-dev/demos/popovers/index.html +8 -8
  27. package/docs-dev/demos/print/index.html +8 -8
  28. package/docs-dev/demos/pull-quote/index.html +8 -8
  29. package/docs-dev/demos/rule/index.html +8 -8
  30. package/docs-dev/demos/scrollpoints/index.html +8 -8
  31. package/docs-dev/demos/spoke-spinner/index.html +8 -8
  32. package/docs-dev/demos/sticky-list/index.html +8 -8
  33. package/docs-dev/demos/tabs/index.html +8 -8
  34. package/docs-dev/demos/tag/index.html +8 -8
  35. package/docs-dev/demos/theme-toggle/index.html +8 -8
  36. package/docs-dev/demos/tiles/index.html +8 -8
  37. package/docs-dev/demos/tooltip/index.html +8 -8
  38. package/docs-dev/guide/building-stylesheet/index.html +8 -8
  39. package/docs-dev/guide/developing-ulu-scss-module/index.html +8 -8
  40. package/docs-dev/guide/index.html +8 -8
  41. package/docs-dev/index.html +8 -8
  42. package/docs-dev/javascript/events/index.html +8 -8
  43. package/docs-dev/javascript/index.html +8 -8
  44. package/docs-dev/javascript/settings/index.html +8 -8
  45. package/docs-dev/javascript/ui-breakpoints/index.html +8 -8
  46. package/docs-dev/javascript/ui-collapsible/index.html +8 -8
  47. package/docs-dev/javascript/ui-details-group/index.html +8 -8
  48. package/docs-dev/javascript/ui-dialog/index.html +8 -8
  49. package/docs-dev/javascript/ui-flipcard/index.html +8 -8
  50. package/docs-dev/javascript/ui-grid/index.html +8 -8
  51. package/docs-dev/javascript/ui-modal-builder/index.html +8 -8
  52. package/docs-dev/javascript/ui-overflow-scroller/index.html +8 -8
  53. package/docs-dev/javascript/ui-overflow-scroller-pager/index.html +8 -8
  54. package/docs-dev/javascript/ui-page/index.html +8 -8
  55. package/docs-dev/javascript/ui-popover/index.html +8 -8
  56. package/docs-dev/javascript/ui-print/index.html +8 -8
  57. package/docs-dev/javascript/ui-print-details/index.html +8 -8
  58. package/docs-dev/javascript/ui-programmatic-modal/index.html +8 -8
  59. package/docs-dev/javascript/ui-proxy-click/index.html +8 -8
  60. package/docs-dev/javascript/ui-resizer/index.html +8 -8
  61. package/docs-dev/javascript/ui-scroll-slider/index.html +8 -8
  62. package/docs-dev/javascript/ui-scrollpoint/index.html +8 -8
  63. package/docs-dev/javascript/ui-slider/index.html +8 -8
  64. package/docs-dev/javascript/ui-tabs/index.html +8 -8
  65. package/docs-dev/javascript/ui-theme-toggle/index.html +8 -8
  66. package/docs-dev/javascript/ui-tooltip/index.html +8 -8
  67. package/docs-dev/javascript/utils-class-logger/index.html +8 -8
  68. package/docs-dev/javascript/utils-dom/index.html +8 -8
  69. package/docs-dev/javascript/utils-file-save/index.html +8 -8
  70. package/docs-dev/javascript/utils-floating-ui/index.html +8 -8
  71. package/docs-dev/javascript/utils-id/index.html +8 -8
  72. package/docs-dev/javascript/utils-pause-youtube-video/index.html +8 -8
  73. package/docs-dev/sass/base/color/index.html +8 -8
  74. package/docs-dev/sass/base/elements/index.html +8 -8
  75. package/docs-dev/sass/base/index/index.html +8 -8
  76. package/docs-dev/sass/base/index.html +8 -8
  77. package/docs-dev/sass/base/keyframes/index.html +8 -8
  78. package/docs-dev/sass/base/layout/index.html +8 -8
  79. package/docs-dev/sass/base/normalize/index.html +8 -8
  80. package/docs-dev/sass/base/print/index.html +8 -8
  81. package/docs-dev/sass/base/root/index.html +8 -8
  82. package/docs-dev/sass/base/typography/index.html +8 -8
  83. package/docs-dev/sass/components/accordion/index.html +8 -8
  84. package/docs-dev/sass/components/adaptive-spacing/index.html +8 -8
  85. package/docs-dev/sass/components/badge/index.html +8 -8
  86. package/docs-dev/sass/components/basic-hero/index.html +8 -8
  87. package/docs-dev/sass/components/button/index.html +8 -8
  88. package/docs-dev/sass/components/button-verbose/index.html +46 -34
  89. package/docs-dev/sass/components/callout/index.html +94 -35
  90. package/docs-dev/sass/components/captioned-figure/index.html +8 -8
  91. package/docs-dev/sass/components/card/index.html +18 -18
  92. package/docs-dev/sass/components/card-grid/index.html +8 -8
  93. package/docs-dev/sass/components/css-icon/index.html +8 -8
  94. package/docs-dev/sass/components/data-grid/index.html +8 -8
  95. package/docs-dev/sass/components/data-table/index.html +8 -8
  96. package/docs-dev/sass/components/fill-context/index.html +8 -8
  97. package/docs-dev/sass/components/flipcard/index.html +8 -8
  98. package/docs-dev/sass/components/flipcard-grid/index.html +8 -8
  99. package/docs-dev/sass/components/form-theme/index.html +8 -8
  100. package/docs-dev/sass/components/hero/index.html +16 -16
  101. package/docs-dev/sass/components/horizontal-rule/index.html +8 -8
  102. package/docs-dev/sass/components/image-grid/index.html +8 -8
  103. package/docs-dev/sass/components/index/index.html +8 -8
  104. package/docs-dev/sass/components/index.html +8 -8
  105. package/docs-dev/sass/components/links/index.html +8 -8
  106. package/docs-dev/sass/components/list-inline/index.html +8 -8
  107. package/docs-dev/sass/components/list-lines/index.html +8 -8
  108. package/docs-dev/sass/components/list-ordered/index.html +8 -8
  109. package/docs-dev/sass/components/list-unordered/index.html +8 -8
  110. package/docs-dev/sass/components/menu-stack/index.html +8 -8
  111. package/docs-dev/sass/components/modal/index.html +8 -8
  112. package/docs-dev/sass/components/nav-strip/index.html +8 -8
  113. package/docs-dev/sass/components/overlay-section/index.html +16 -16
  114. package/docs-dev/sass/components/pager/index.html +8 -8
  115. package/docs-dev/sass/components/placeholder-block/index.html +8 -8
  116. package/docs-dev/sass/components/popover/index.html +8 -8
  117. package/docs-dev/sass/components/pull-quote/index.html +8 -8
  118. package/docs-dev/sass/components/ratio-box/index.html +16 -16
  119. package/docs-dev/sass/components/rule/index.html +8 -8
  120. package/docs-dev/sass/components/scroll-slider/index.html +8 -8
  121. package/docs-dev/sass/components/skip-link/index.html +8 -8
  122. package/docs-dev/sass/components/slider/index.html +8 -8
  123. package/docs-dev/sass/components/spoke-spinner/index.html +10 -10
  124. package/docs-dev/sass/components/sticky-list/index.html +8 -8
  125. package/docs-dev/sass/components/tabs/index.html +8 -8
  126. package/docs-dev/sass/components/tag/index.html +10 -10
  127. package/docs-dev/sass/components/tile-button/index.html +8 -8
  128. package/docs-dev/sass/components/tile-grid/index.html +8 -8
  129. package/docs-dev/sass/components/tile-grid-overlay/index.html +8 -8
  130. package/docs-dev/sass/components/vignette/index.html +16 -16
  131. package/docs-dev/sass/components/wysiwyg/index.html +8 -8
  132. package/docs-dev/sass/core/breakpoint/index.html +8 -8
  133. package/docs-dev/sass/core/button/index.html +8 -8
  134. package/docs-dev/sass/core/color/index.html +8 -8
  135. package/docs-dev/sass/core/cssvar/index.html +8 -8
  136. package/docs-dev/sass/core/element/index.html +188 -47
  137. package/docs-dev/sass/core/index.html +8 -8
  138. package/docs-dev/sass/core/layout/index.html +64 -45
  139. package/docs-dev/sass/core/path/index.html +8 -8
  140. package/docs-dev/sass/core/selector/index.html +8 -8
  141. package/docs-dev/sass/core/typography/index.html +8 -8
  142. package/docs-dev/sass/core/units/index.html +8 -8
  143. package/docs-dev/sass/core/utils/index.html +272 -68
  144. package/docs-dev/sass/helpers/color/index.html +8 -8
  145. package/docs-dev/sass/helpers/display/index.html +8 -8
  146. package/docs-dev/sass/helpers/index/index.html +8 -8
  147. package/docs-dev/sass/helpers/index.html +8 -8
  148. package/docs-dev/sass/helpers/print/index.html +8 -8
  149. package/docs-dev/sass/helpers/typography/index.html +8 -8
  150. package/docs-dev/sass/helpers/units/index.html +8 -8
  151. package/docs-dev/sass/helpers/utilities/index.html +8 -8
  152. package/docs-dev/sass/index.html +8 -8
  153. package/js/ui/tooltip.js +2 -1
  154. package/package.json +1 -1
  155. package/scss/_breakpoint.scss +1 -1
  156. package/scss/_element.scss +91 -0
  157. package/scss/_layout.scss +6 -4
  158. package/scss/_utils.scss +42 -0
  159. package/scss/components/_button-verbose.scss +43 -32
  160. package/scss/components/_callout.scss +112 -53
  161. package/scss/components/_card.scss +7 -22
  162. package/scss/components/_css-icon.scss +17 -17
  163. package/scss/components/_data-grid.scss +2 -2
  164. package/scss/components/_flipcard.scss +1 -1
  165. package/scss/components/_form-theme.scss +12 -12
  166. package/scss/components/_hero.scss +3 -10
  167. package/scss/components/_overlay-section.scss +2 -5
  168. package/scss/components/_popover.scss +11 -11
  169. package/scss/components/_pull-quote.scss +1 -1
  170. package/scss/components/_ratio-box.scss +2 -5
  171. package/scss/components/_scroll-slider.scss +1 -1
  172. package/scss/components/_spoke-spinner.scss +2 -2
  173. package/scss/components/_vignette.scss +2 -5
  174. package/types/ui/tooltip.d.ts.map +1 -1
@@ -48,15 +48,16 @@ $-fallbacks: (
48
48
  /// @prop {String} title-color [link] Color of the title of the button.
49
49
  /// @prop {String} title-color-hover [link-hover] Color of the title of the button when hovered or focused.
50
50
  /// @prop {Dimension} title-margin [0.5em] Margin for the button's title.
51
- /// @prop {Boolean} left-cap [false] Enable left cap style
52
- /// @prop {Color} left-cap-color ["link"] The color for the left cap
53
- /// @prop {color} left-cap-color-hover ["link-hover"] The color for the left cap when the button is hovered
54
- /// @prop {Number} left-cap-color-hover [0.5rem] Width of the cap
51
+ /// @prop {Boolean} cap [false] Enable left cap style
52
+ /// @prop {Color} cap-side ["left"] The side that gets the cap
53
+ /// @prop {Number} cap-match-radius [true] The cap should have be rounded to match the parent's border radius
54
+ /// @prop {Map} cap-options The options for cap (see element.cap for options)
55
+ /// @prop {Map} cap-options-hover The options for cap when hovered
55
56
 
56
57
  $config: (
57
58
  "background-color" : white,
58
59
  "background-color-hover" : #F7F8F7,
59
- "border-radius" : "border-radius",
60
+ "border-radius" : true,
60
61
  "box-shadow" : true,
61
62
  "box-shadow-hover" : true,
62
63
  "color" : "type",
@@ -68,15 +69,21 @@ $config: (
68
69
  "margin" : 1em,
69
70
  "margin-inline" : 0.75em,
70
71
  "min-width": 20rem,
71
- "padding-x": 0.65em,
72
+ "padding-x": 0.75em,
72
73
  "padding-y": 1em,
73
74
  "title-color": "link",
74
75
  "title-margin" : 0.5em,
75
76
  "title-color-hover" : "link-hover",
76
- "left-cap" : false,
77
- "left-cap-color" : "link",
78
- "left-cap-color-hover" : "link-hover",
79
- "left-cap-width" : 0.5rem
77
+ "cap" : false,
78
+ "cap-side" : "left",
79
+ "cap-match-radius" : true,
80
+ "cap-options" : (
81
+ "color" : "link",
82
+ "size" : 0.5rem,
83
+ ),
84
+ "cap-options-hover" : (
85
+ "color" : "link-hover"
86
+ ),
80
87
  ) !default;
81
88
 
82
89
  /// Change modules $config
@@ -110,36 +117,30 @@ $config: (
110
117
 
111
118
  @mixin styles {
112
119
  $prefix: selector.class("button-verbose");
120
+ $padding-x: get("padding-x");
121
+ $padding-y: get("padding-y");
122
+ $padding-right: ($padding-x * 2) + 1em;
123
+ $cap-side: get("cap-side");
124
+ $cap-defaults: (
125
+ "border-radius" : if(get("cap-match-radius"), get("border-radius"), 0),
126
+ "padding-adjust" : if(utils.is-side($cap-side), $padding-x, $padding-y)
127
+ );
113
128
 
114
129
  #{ $prefix } {
115
130
  text-decoration: none;
116
- border-radius: element.get(get("border-radius"));
131
+ border-radius: get("border-radius");
117
132
  box-shadow: get("box-shadow");
118
133
  line-height: get("line-height");
119
- position: relative;
134
+ position: relative; // For cap and icon
120
135
  display: block;
121
136
  margin-bottom: get("margin");
122
137
  max-width: 100%;
123
138
  width: get("min-width");
124
139
  background-color: color.get(get("background-color"));
125
- padding: get("padding-y") get("padding-x");
126
- padding-right: (get("padding-x") * 2) + 1em;
140
+ padding: $padding-y $padding-right $padding-y $padding-x;
127
141
  color: color.get(get("color"));
128
142
  text-align: left;
129
- // Add border like cap
130
- @if get("left-cap") {
131
- padding-left: calc(get("padding-x") + get("left-cap-width"));
132
- &::after {
133
- content: "";
134
- display: block;
135
- position: absolute;
136
- top: 0;
137
- bottom: 0;
138
- left: 0;
139
- width: get("left-cap-width");
140
- background-color: color.get(get("left-cap-color"));
141
- }
142
- }
143
+
143
144
  &:hover {
144
145
  color: color.get(get("color-hover"));
145
146
  background-color: color.get(get("background-color-hover"));
@@ -154,9 +155,19 @@ $config: (
154
155
  color: color.get(get("icon-color-hover"));
155
156
  }
156
157
  }
157
- @if (get("left-cap") and get("left-cap-color-hover")) {
158
- &::after {
159
- background-color: color.get(get("left-cap-color-hover"));
158
+ }
159
+ @if get("cap") {
160
+ @include element.cap(
161
+ $side: $cap-side,
162
+ $options: map.merge($cap-defaults, get("cap-options"))
163
+ );
164
+ @if get("cap-options-hover") {
165
+ &:hover,
166
+ &:focus {
167
+ @include element.cap-appearance(
168
+ $side: $cap-side,
169
+ $options: get("cap-options-hover")
170
+ );
160
171
  }
161
172
  }
162
173
  }
@@ -174,7 +185,7 @@ $config: (
174
185
  #{ $prefix }__icon {
175
186
  position: absolute;
176
187
  top: 50%;
177
- right: get("padding-x");
188
+ right: $padding-x;
178
189
  transform: translateY(-50%);
179
190
  font-size: get("icon-font-size");
180
191
  color: color.get(get("icon-color"));
@@ -27,48 +27,51 @@ $-fallbacks: (
27
27
  /// @prop {Boolean} border-radius [true] The border radius of the Callout.
28
28
  /// @prop {Dimension} border-width [1px] The border width of the Callout.
29
29
  /// @prop {CssValue} box-shadow [none] The box-shadow of the Callout.
30
- /// @prop {Boolean} left-cap [false] Toggles the use of left caps in styled callouts.
31
- /// @prop {Color} left-cap-color [green] Color of the left cap.
32
- /// @prop {Dimension} left-cap-width [0.5rem] Width of the left cap.
30
+ /// @prop {Boolean} caps-disabled [false] If set will not output any cap styles for both base and styles
31
+ /// @prop {Boolean} cap [false] Toggles the use of caps on default callout
32
+ /// @prop {Boolean} cap-side ["left"] The side that gets the cap
33
+ /// @prop {Number} cap-match-radius [true] The cap should have be rounded to match the parent's border radius
34
+ /// @prop {Map} cap-options The options for cap (see element.cap for options)
33
35
  /// @prop {Dimension} margin [2rem] Bottom margin of the Callout.
34
36
  /// @prop {Dimension} padding [1.5rem] Padding of the Callout.
35
37
 
36
38
  $config: (
37
39
  "background-color" : rgb(240, 240, 240),
38
40
  "border-color" : "rule-light",
39
- "border-radius" : true,
41
+ "border-radius" : 6px,
40
42
  "border-width" : 1px,
41
43
  "box-shadow" : none,
42
- "left-cap" : true,
43
- "left-cap-color" : rgb(160, 160, 160),
44
- "left-cap-width" : 0.5rem,
44
+ "caps-disabled" : false,
45
+ "cap" : false,
46
+ "cap-side" : "left",
47
+ "cap-match-radius" : false,
48
+ "cap-options" : (
49
+ "color" : rgb(160, 160, 160),
50
+ "size" : 0.5rem,
51
+ ),
45
52
  "margin" : 2rem,
46
53
  "padding" : 1.5rem,
47
54
  ) !default;
48
55
 
56
+ /// Styles Map (for unique variations/modifiers)
57
+ /// - Adjust this with set-styles
58
+ /// @type Map
59
+
49
60
  $styles: (
50
61
  "outline" : (
51
62
  "background-color": transparent
52
63
  ),
53
64
  "info" : (
54
65
  "background-color" : "info-background",
55
- "left-cap-color" : "info",
56
- "left-cap" : true,
57
66
  ),
58
67
  "warning" : (
59
68
  "background-color" : "info-background",
60
- "left-cap-color" : "info",
61
- "left-cap" : true,
62
69
  ),
63
70
  "success" : (
64
71
  "background-color" : "success-background",
65
- "left-cap-color" : "success",
66
- "left-cap" : true,
67
72
  ),
68
73
  "danger" : (
69
74
  "background-color" : "danger-background",
70
- "left-cap-color" : "danger",
71
- "left-cap" : true,
72
75
  ),
73
76
  ) !default;
74
77
 
@@ -92,34 +95,30 @@ $styles: (
92
95
  }
93
96
 
94
97
  /// Set callout style variations
95
- /// @param {Map} $changes Map of changes (options for style include [background-color, color, border, border-radius, border-color, box-shadow, padding, left-cap, left-cap-width, left-cap-color]
98
+ /// - Styles that modify padding when using mix-match caps on/off should be included last
99
+ /// @param {Map} $changes Map of changes (options for style include [background-color, color, border-color, border-radius, border-width, box-shadow, padding, cap, cap-options]
96
100
  /// @param {String} $merge-mode Merge mode see utils.map-merge() [null|"deep"|"overwrite"]
97
101
 
98
102
  @mixin set-styles($changes, $merge-mode: null) {
99
103
  $styles: utils.map-merge($styles, $changes, $merge-mode) !global;
100
104
  }
101
105
 
102
- @mixin -left-cap($color: get("left-cap-color")) {
103
- $left-padding: get-spacing-left(get("padding"));
104
- position: relative;
105
- border-top-left-radius: 0;
106
- border-bottom-left-radius: 0;
107
- padding-left: get("left-cap-width") + $left-padding;
108
- &::before {
109
- content: "";
110
- }
111
- }
112
-
113
106
  /// Output component stylesheet
114
107
  /// @example scss
115
108
  /// @include ulu.component-callout-styles();
116
109
 
117
110
  @mixin styles {
118
- $prefix: selector.class("callout");
119
-
111
+ $prefix: selector.class("callout");
112
+ $padding: get("padding");
113
+ $padding-info: utils.get-spacing($padding);
114
+ $cap-options: get("cap-options");
115
+ $cap-size: map.get($cap-options, "size");
116
+ $cap-side: get("cap-side");
117
+
120
118
  #{ $prefix } {
119
+ position: relative; // For cap
121
120
  background-color: color.get(get("background-color"));
122
- padding: get("padding");
121
+ padding: $padding;
123
122
  border: get("border-width") solid color.get(get("border-color"));
124
123
  margin-bottom: get("margin");
125
124
  box-shadow: get("box-shadow");
@@ -127,36 +126,96 @@ $styles: (
127
126
  & >:first-child {
128
127
  margin-top: 0;
129
128
  }
130
- &::before {
131
- position: absolute;
132
- left: 0 - get("border-width");
133
- top: 0 - get("border-width");
134
- bottom: 0 - get("border-width");
135
- width: get("left-cap-width");
136
- background-color: color.get(get("left-cap-color"));
129
+
130
+ // If we have left cap on default we reuse this for all
131
+ // Else we will print it out manually for each unique style
132
+ @if (not get("caps-disabled")) {
133
+ $cap-defaults: (
134
+ "offset" : get("border-width"),
135
+ "border-radius" : if(get("cap-match-radius"), get("border-radius"), null),
136
+ // "padding-adjust" : map.get($padding-info, $cap-side)
137
+ );
138
+ @include element.cap(
139
+ $side: $cap-side,
140
+ $options: map.merge($cap-defaults, $cap-options)
141
+ );
137
142
  }
138
- @if get("left-cap") {
139
- @include -left-cap();
143
+
144
+ // If the left cap is disabled we still include it's CSS but we hide it
145
+ // so that other styles of callouts can use it
146
+ @if (not get("cap")) {
140
147
  &::before {
141
- content: "";
148
+ content: none;
142
149
  }
150
+ // Since this is hidden and reused we need to not use padding adjust unless it
151
+ // was visible
152
+ } @else if ($cap-size) {
153
+ padding-#{ $cap-side }: calc(map.get($padding-info, $cap-side) + $cap-size);
143
154
  }
144
155
  }
156
+
157
+ @include -output-style-modifiers();
158
+ }
159
+
160
+ // Output Each Style Modifier
161
+ // - Note if cap is not disabled this will just update appearance values of cap styling
162
+ @mixin -output-style-modifiers() {
163
+ $prefix: selector.class("callout");
164
+ $caps-enabled: not get("caps-disabled");
165
+ $cap-side: get("cap-side");
166
+
145
167
  @each $name, $style in $styles {
168
+ $cap: map.get($style, "cap");
169
+ $padding: map.get($style, "padding");
170
+ $border-radius: map.get($style, "border-radius");
171
+ $background-color: map.get($style, "background-color");
172
+ $color: map.get($style, "color");
173
+ $border-color: map.get($style, "border-color");
174
+ $border-width: map.get($style, "border-width");
175
+ $box-shadow: map.get($style, "box-shadow");
176
+ $cap-match-radius: map.get($style, "cap-match-radius");
177
+
146
178
  #{ $prefix }--#{ $name } {
147
- background-color: color.get(map.get($style, "background-color"));
148
- color: color.get(map.get($style, "color"));
149
- border: map.get($style, "border");
150
- border-radius: map.get($style, "border-radius");
151
- border-color: color.get(map.get($style, "border-color"));
152
- box-shadow: map.get($style, "box-shadow");
153
- padding: map.get($style, "padding");
154
- &::before {
155
- background-color: color.get(map.get($style, "left-cap-color"));
156
- }
157
- @if map.get($style, "left-cap") {
158
- @if not get("left-cap") {
159
- @include -left-cap();
179
+ background-color: color.get($background-color);
180
+ color: color.get($color);
181
+ border-radius: $border-radius;
182
+ border-color: color.get($border-color);
183
+ border-width: $border-width;
184
+ box-shadow: $box-shadow;
185
+ padding: $padding;
186
+
187
+ @if ($cap and $caps-enabled) {
188
+ $match-radius: utils.if-type("bool", $cap-match-radius, get("cap-match-radius"));
189
+ // Padding adjust always has to be set (since size could change or padding)
190
+ $padding-info: utils.get-spacing(if($padding, $padding, get("padding")));
191
+ $cap-radius: utils.if-type("number", $border-radius, get("border-radius"));
192
+ $cap-options: utils.ensure-map(map.get($style, "cap-options"));
193
+ $cap-defaults: (
194
+ "size" : map.get(get("cap-options"), "size"),
195
+ "padding-adjust" : map.get($padding-info, $cap-side),
196
+ "offset" : $border-width,
197
+ "border-radius" : if($match-radius, $cap-radius, null)
198
+ );
199
+
200
+ @include element.cap-appearance(
201
+ $side: $cap-side,
202
+ $options: map.merge($cap-defaults, $cap-options),
203
+ $before: true
204
+ );
205
+
206
+ // Because the main callout's cap may not be visible
207
+ &::before {
208
+ content: "";
209
+ }
210
+ // If set to false remove the cap (if enabled) and reset default cap padding adjust
211
+ } @else if ($cap == false and $caps-enabled) {
212
+ // if this style doesn't set padding
213
+ @if (not $padding) {
214
+ $padding-info: utils.get-spacing(get("padding"));
215
+ padding-#{ $cap-side }: map.get($padding-info, $cap-side);
216
+ }
217
+ &::before {
218
+ content: none;
160
219
  }
161
220
  }
162
221
  }
@@ -10,6 +10,7 @@
10
10
  @use "../utils";
11
11
  @use "../selector";
12
12
  @use "../color";
13
+ @use "../layout";
13
14
 
14
15
  // todo
15
16
  // sass color adjust for smooth transition. Add a comment for this if we can’t get to this
@@ -209,13 +210,9 @@ $config: (
209
210
  overflow: hidden;
210
211
 
211
212
  // Border is on pseudo so that it's on top of image/etc
212
- &:after {
213
- position: absolute;
213
+ &::after {
214
+ @include layout.absolute-fill();
214
215
  content: if(get("border"), "", null);
215
- top: 0;
216
- bottom: 0;
217
- right: 0;
218
- left: 0;
219
216
  border: get("border");
220
217
  border-radius: get("border-radius");
221
218
  z-index: 4;
@@ -229,7 +226,7 @@ $config: (
229
226
  box-shadow: get("box-shadow-hover");
230
227
 
231
228
  @if (get("border-hover") or get("overlay-background-color-hover")) {
232
- &:after {
229
+ &::after {
233
230
  content: "";
234
231
  border: get("border-hover");
235
232
  background-color: color.get(get("overlay-background-color-hover"));
@@ -293,11 +290,7 @@ $config: (
293
290
  }
294
291
  #{ $prefix }__image img,
295
292
  #{ $prefix}__image-media {
296
- position: absolute;
297
- top: 0;
298
- left: 0;
299
- width: 100%;
300
- height: 100%;
293
+ @include layout.absolute-fill(true);
301
294
  border: 0;
302
295
  object-fit: cover;
303
296
  transform-origin: center center;
@@ -407,11 +400,7 @@ $config: (
407
400
  color: color.get(get("color-overlay"));
408
401
  }
409
402
  #{ $prefix }__image {
410
- position: absolute;
411
- top: 0;
412
- left: 0;
413
- bottom: 0;
414
- right: 0;
403
+ @include layout.absolute-fill();
415
404
  overflow: hidden;
416
405
  padding-top: 0;
417
406
  background-color: color.get(rgb(255, 255, 255));
@@ -425,12 +414,8 @@ $config: (
425
414
  border: 0;
426
415
  object-fit: cover;
427
416
  &::before {
428
- position: absolute;
417
+ @include layout.absolute-fill(true);
429
418
  display: block;
430
- top: 0;
431
- bottom: 0;
432
- left: 0;
433
- right: 0;
434
419
  background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.9));
435
420
  }
436
421
  }
@@ -124,8 +124,8 @@ $config: (
124
124
  -moz-osx-font-smoothing: grayscale;
125
125
  -webkit-font-smoothing: antialiased;
126
126
  // Icons that share pseudos for strokes
127
- &:before,
128
- &:after {
127
+ &::before,
128
+ &::after {
129
129
  // content: "";
130
130
  display: block;
131
131
  position: absolute;
@@ -188,7 +188,7 @@ $config: (
188
188
 
189
189
  .css-icon--circle-info,
190
190
  .css-icon--circle-question {
191
- &:before {
191
+ &::before {
192
192
  content: "i";
193
193
  text-align: center;
194
194
  font-size: get("text-size");
@@ -208,7 +208,7 @@ $config: (
208
208
  }
209
209
  }
210
210
  .css-icon--circle-question {
211
- &:before {
211
+ &::before {
212
212
  content: "?";
213
213
  }
214
214
  }
@@ -229,13 +229,13 @@ $config: (
229
229
  clip-path: polygon(10% 10%, 90% 50%, 10% 90%);
230
230
  }
231
231
  [class*="css-icon--arrow"] {
232
- &:before {
232
+ &::before {
233
233
  content: "";
234
234
  width: 70%;
235
235
  left: 0;
236
236
  }
237
237
  // Note triangle clip-path is defined above with the solid triangle
238
- &:after {
238
+ &::after {
239
239
  content: "";
240
240
  border-radius: 0;
241
241
  height: 100%;
@@ -246,8 +246,8 @@ $config: (
246
246
  }
247
247
  [class*="css-icon--angle"] {
248
248
  transform: rotate(135deg);
249
- &:before,
250
- &:after {
249
+ &::before,
250
+ &::after {
251
251
  content: "";
252
252
  top: 30%;
253
253
  left: 30%;
@@ -255,14 +255,14 @@ $config: (
255
255
  transform: none;
256
256
  margin-top: 0;
257
257
  }
258
- &:after {
258
+ &::after {
259
259
  width: $stroke-width;
260
260
  height: 70%;
261
261
  }
262
262
  }
263
263
  @include for-each-stroke() using ($alt-width, $alt-border-radius) {
264
264
  &[class*="css-icon--angle"] {
265
- &:after {
265
+ &::after {
266
266
  width: $alt-width;
267
267
  }
268
268
  }
@@ -285,26 +285,26 @@ $config: (
285
285
 
286
286
  .css-icon--plus,
287
287
  .css-icon--plus-to-minus {
288
- &:before {
288
+ &::before {
289
289
  transform: translateX(-50%) rotate(90deg);
290
290
  }
291
- &:after {
291
+ &::after {
292
292
  transform: translateX(-50%);
293
293
  }
294
294
  }
295
295
  .css-icon--minus {
296
- &:before {
296
+ &::before {
297
297
  content: none;
298
298
  }
299
- &:after {
299
+ &::after {
300
300
  transform: translateX(-50%);
301
301
  }
302
302
  }
303
303
  .css-icon--close {
304
- &:before {
304
+ &::before {
305
305
  transform: translate(-50%) rotate(45deg);
306
306
  }
307
- &:after {
307
+ &::after {
308
308
  transform: translate(-50%) rotate(-45deg);
309
309
  }
310
310
  }
@@ -429,7 +429,7 @@ $config: (
429
429
  transition: none;
430
430
  transform: translate(-50%) rotate(-45deg);
431
431
  }
432
- &:before {
432
+ &::before {
433
433
  box-shadow: none;
434
434
  transform: translate(-50%) rotate(45deg);
435
435
  }
@@ -155,8 +155,8 @@ $config: (
155
155
  $attribute-item: "#{ $attribute }-item";
156
156
  $select-grid: '[#{ $attribute }*="columns: #{ $columns }"]';
157
157
  $select-item: '[#{ $attribute-item }]';
158
- $select-rule-col: ":before";
159
- $select-rule-row: ":after";
158
+ $select-rule-col: "::before";
159
+ $select-rule-row: "::after";
160
160
  $select-container: "[#{ $container-attribute }]";
161
161
  // These through off syntax highlighting when inside interpolation
162
162
  $position-class-column-first: get("position-class-column-first");
@@ -198,7 +198,7 @@ $config: (
198
198
  color: color.get(get("title-color-image"));
199
199
  @if(get("bottom-shadow")) {
200
200
  // bottom position includes padding so that the shadow
201
- &:after {
201
+ &::after {
202
202
  content: '';
203
203
  display: block;
204
204
  position: absolute;
@@ -355,7 +355,7 @@ $config: (
355
355
  transition: background-color 220ms ease-in-out;
356
356
  flex: 0 0 $input-touch-size; // When used in flex container
357
357
  // Box / Circle (centered absolute)
358
- &:before {
358
+ &::before {
359
359
  content: '';
360
360
  display: block;
361
361
  position: absolute;
@@ -373,7 +373,7 @@ $config: (
373
373
  transform: translate(-50%, -50%);
374
374
  }
375
375
  // Checkmark/ radio
376
- &:after {
376
+ &::after {
377
377
  content: '';
378
378
  display: block;
379
379
  position: relative;
@@ -386,32 +386,32 @@ $config: (
386
386
  }
387
387
  &:focus {
388
388
  background-color: color.get(get("check-input-touch-color-focus"));
389
- &:before {
389
+ &::before {
390
390
  border-color: color.get(get("check-input-border-color-focus"));
391
391
  outline: get("check-input-outline-focus");
392
392
  }
393
- &:after {
393
+ &::after {
394
394
  border-color: color.get(get("check-input-mark-color-focus"));
395
395
  }
396
396
  }
397
397
  &:hover {
398
398
  background-color: color.get(get("check-input-touch-color-hover"));
399
- &:before {
399
+ &::before {
400
400
  outline: get("check-input-outline-hover");
401
401
  background-color: color.get(get("check-input-background-color-hover"));
402
402
  border-color: color.get(get("check-input-border-color-hover"));
403
403
  }
404
- &:after {
404
+ &::after {
405
405
  border-color: color.get(get("check-input-mark-color-hover"));
406
406
  }
407
407
  }
408
408
  &:checked {
409
- &:before {
409
+ &::before {
410
410
  background-color: color.get(get("check-input-background-color-checked"));
411
411
  border-color: color.get(get("check-input-border-color-checked"));
412
412
  outline: get("check-input-outline-checked");
413
413
  }
414
- &:after {
414
+ &::after {
415
415
  opacity: 1;
416
416
  border-color: color.get(get("check-input-mark-color-checked"));
417
417
  }
@@ -427,10 +427,10 @@ $config: (
427
427
  }
428
428
  }
429
429
  [type="checkbox"] {
430
- &:before {
430
+ &::before {
431
431
  border-radius: -fallback("check-input-border-radius", "input-border-radius");
432
432
  }
433
- &:after {
433
+ &::after {
434
434
  border-radius: 0;
435
435
  width: get("check-input-checkmark-width");
436
436
  height: get("check-input-checkmark-height");
@@ -443,11 +443,11 @@ $config: (
443
443
  }
444
444
  &:indeterminate,
445
445
  &[aria-checked=mixed] {
446
- &:before {
446
+ &::before {
447
447
  background-color: color.get(get("check-input-background-color-indeterminate"));
448
448
  border-color: color.get(get("check-input-border-color-indeterminate"));
449
449
  }
450
- &:after {
450
+ &::after {
451
451
  border-right: none;
452
452
  transform: translatey(50%);
453
453
  opacity: 1;