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

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 (242) hide show
  1. package/CHANGELOG.md +210 -1
  2. package/dist/ulu-frontend.min.css +1 -1
  3. package/dist/ulu-frontend.min.js +19 -18
  4. package/docs-dev/assets/main.js +832 -421
  5. package/docs-dev/assets/placeholder/icon-calendar.svg +1 -0
  6. package/docs-dev/assets/placeholder/icon-check.svg +1 -0
  7. package/docs-dev/assets/style.css +629 -233
  8. package/docs-dev/changelog/index.html +5660 -0
  9. package/docs-dev/changelog/updates-and-changes/index.html +5109 -0
  10. package/docs-dev/demos/accordion/index.html +758 -295
  11. package/docs-dev/demos/basic-hero/index.html +111 -0
  12. package/docs-dev/demos/button/index.html +758 -295
  13. package/docs-dev/demos/button-verbose/index.html +5118 -0
  14. package/docs-dev/demos/callout/index.html +783 -307
  15. package/docs-dev/demos/captioned-figure/index.html +758 -295
  16. package/docs-dev/demos/card/index.html +819 -719
  17. package/docs-dev/demos/card-grid/index.html +5241 -0
  18. package/docs-dev/demos/card-new/index.html +5088 -0
  19. package/docs-dev/demos/card-old/index.html +5223 -0
  20. package/docs-dev/demos/card.1/index.html +5223 -0
  21. package/docs-dev/demos/card.TRASH/index.html +5541 -0
  22. package/docs-dev/demos/css-icons/index.html +758 -295
  23. package/docs-dev/demos/data-grid/index.html +866 -483
  24. package/docs-dev/demos/data-table/index.html +783 -320
  25. package/docs-dev/demos/details-group/index.html +5114 -0
  26. package/docs-dev/demos/file-save/index.html +758 -295
  27. package/docs-dev/demos/flipcard/index.html +758 -295
  28. package/docs-dev/demos/form-theme/index.html +776 -326
  29. package/docs-dev/demos/hero/index.html +12 -4
  30. package/docs-dev/demos/image-grid/index.html +12 -4
  31. package/docs-dev/demos/index.html +758 -295
  32. package/docs-dev/demos/list-inline/index.html +5100 -0
  33. package/docs-dev/demos/list-inline.1/index.html +4727 -0
  34. package/docs-dev/demos/list-lines/index.html +5090 -0
  35. package/docs-dev/demos/menu-stack/index.html +777 -314
  36. package/docs-dev/demos/modals/index.html +758 -295
  37. package/docs-dev/demos/nav-strip/index.html +778 -351
  38. package/docs-dev/demos/overlay-section/index.html +758 -295
  39. package/docs-dev/demos/popovers/index.html +860 -299
  40. package/docs-dev/demos/print/index.html +758 -295
  41. package/docs-dev/demos/pull-quote/index.html +758 -295
  42. package/docs-dev/demos/rule/index.html +758 -295
  43. package/docs-dev/demos/scroll-slider/index.html +72 -106
  44. package/docs-dev/demos/scrollpoints/index.html +758 -295
  45. package/docs-dev/demos/slider/index.html +12 -4
  46. package/docs-dev/demos/spoke-spinner/index.html +758 -295
  47. package/docs-dev/demos/sticky-list/index.html +5103 -0
  48. package/docs-dev/demos/tabs/index.html +758 -295
  49. package/docs-dev/demos/tag/index.html +758 -295
  50. package/docs-dev/demos/theme-toggle/index.html +5159 -0
  51. package/docs-dev/demos/tile-grid-overlay/index.html +12 -4
  52. package/docs-dev/demos/tiles/index.html +758 -295
  53. package/docs-dev/demos/tooltip/index.html +758 -295
  54. package/docs-dev/guide/building-stylesheet/index.html +758 -295
  55. package/docs-dev/guide/developing-ulu-scss-module/index.html +758 -295
  56. package/docs-dev/guide/index.html +758 -295
  57. package/docs-dev/guide/updates-and-changes/index.html +5033 -0
  58. package/docs-dev/index.html +758 -295
  59. package/docs-dev/javascript/events/index.html +755 -294
  60. package/docs-dev/javascript/index.html +758 -295
  61. package/docs-dev/javascript/settings/index.html +5214 -0
  62. package/docs-dev/javascript/ui-breakpoints/index.html +755 -294
  63. package/docs-dev/javascript/ui-collapsible/index.html +755 -294
  64. package/docs-dev/javascript/ui-details-group/index.html +5214 -0
  65. package/docs-dev/javascript/ui-dialog/index.html +755 -294
  66. package/docs-dev/javascript/ui-flipcard/index.html +755 -294
  67. package/docs-dev/javascript/ui-grid/index.html +755 -294
  68. package/docs-dev/javascript/ui-modal-builder/index.html +755 -294
  69. package/docs-dev/javascript/ui-overflow-scroller/index.html +755 -294
  70. package/docs-dev/javascript/ui-overflow-scroller-pager/index.html +755 -294
  71. package/docs-dev/javascript/ui-page/index.html +755 -294
  72. package/docs-dev/javascript/ui-popover/index.html +755 -294
  73. package/docs-dev/javascript/ui-print/index.html +755 -294
  74. package/docs-dev/javascript/ui-print-details/index.html +755 -294
  75. package/docs-dev/javascript/ui-programmatic-modal/index.html +755 -294
  76. package/docs-dev/javascript/ui-proxy-click/index.html +755 -294
  77. package/docs-dev/javascript/ui-resizer/index.html +755 -294
  78. package/docs-dev/javascript/ui-scroll-slider/index.html +755 -294
  79. package/docs-dev/javascript/ui-scrollpoint/index.html +755 -294
  80. package/docs-dev/javascript/ui-slider/index.html +755 -294
  81. package/docs-dev/javascript/ui-tabs/index.html +755 -294
  82. package/docs-dev/javascript/ui-theme-toggle/index.html +5298 -0
  83. package/docs-dev/javascript/ui-tooltip/index.html +755 -294
  84. package/docs-dev/javascript/utils-class-logger/index.html +755 -294
  85. package/docs-dev/javascript/utils-dom/index.html +819 -298
  86. package/docs-dev/javascript/utils-file-save/index.html +755 -294
  87. package/docs-dev/javascript/utils-floating-ui/index.html +755 -294
  88. package/docs-dev/javascript/utils-id/index.html +755 -294
  89. package/docs-dev/javascript/utils-pause-youtube-video/index.html +755 -294
  90. package/docs-dev/sass/base/color/index.html +755 -294
  91. package/docs-dev/sass/base/elements/index.html +755 -294
  92. package/docs-dev/sass/base/index/index.html +755 -294
  93. package/docs-dev/sass/base/index.html +758 -295
  94. package/docs-dev/sass/base/keyframes/index.html +755 -294
  95. package/docs-dev/sass/base/layout/index.html +755 -294
  96. package/docs-dev/sass/base/normalize/index.html +755 -294
  97. package/docs-dev/sass/base/print/index.html +755 -294
  98. package/docs-dev/sass/base/root/index.html +755 -294
  99. package/docs-dev/sass/base/typography/index.html +755 -294
  100. package/docs-dev/sass/components/accordion/index.html +761 -300
  101. package/docs-dev/sass/components/adaptive-spacing/index.html +755 -294
  102. package/docs-dev/sass/components/badge/index.html +763 -302
  103. package/docs-dev/sass/components/basic-hero/index.html +5265 -0
  104. package/docs-dev/sass/components/button/index.html +755 -294
  105. package/docs-dev/sass/components/button-verbose/index.html +813 -303
  106. package/docs-dev/sass/components/callout/index.html +780 -355
  107. package/docs-dev/sass/components/captioned-figure/index.html +878 -302
  108. package/docs-dev/sass/components/card/index.html +817 -313
  109. package/docs-dev/sass/components/card-grid/index.html +755 -294
  110. package/docs-dev/sass/components/css-icon/index.html +772 -304
  111. package/docs-dev/sass/components/data-grid/index.html +755 -294
  112. package/docs-dev/sass/components/data-table/index.html +951 -305
  113. package/docs-dev/sass/components/fill-context/index.html +755 -294
  114. package/docs-dev/sass/components/flipcard/index.html +791 -299
  115. package/docs-dev/sass/components/flipcard-grid/index.html +755 -294
  116. package/docs-dev/sass/components/form-theme/index.html +965 -402
  117. package/docs-dev/sass/components/hero/index.html +811 -302
  118. package/docs-dev/sass/components/horizontal-rule/index.html +755 -294
  119. package/docs-dev/sass/components/image-grid/index.html +755 -294
  120. package/docs-dev/sass/components/index/index.html +768 -304
  121. package/docs-dev/sass/components/index.html +758 -295
  122. package/docs-dev/sass/components/links/index.html +755 -294
  123. package/docs-dev/sass/components/list-inline/index.html +5279 -0
  124. package/docs-dev/sass/components/list-lines/index.html +787 -330
  125. package/docs-dev/sass/components/list-ordered/index.html +757 -296
  126. package/docs-dev/sass/components/list-unordered/index.html +755 -294
  127. package/docs-dev/sass/components/menu-stack/index.html +789 -315
  128. package/docs-dev/sass/components/modal/index.html +776 -308
  129. package/docs-dev/sass/components/nav-strip/index.html +767 -306
  130. package/docs-dev/sass/components/overlay-section/index.html +763 -302
  131. package/docs-dev/sass/components/pager/index.html +755 -294
  132. package/docs-dev/sass/components/placeholder-block/index.html +755 -294
  133. package/docs-dev/sass/components/popover/index.html +812 -315
  134. package/docs-dev/sass/components/pull-quote/index.html +767 -306
  135. package/docs-dev/sass/components/ratio-box/index.html +755 -294
  136. package/docs-dev/sass/components/rule/index.html +763 -302
  137. package/docs-dev/sass/components/scroll-slider/index.html +755 -294
  138. package/docs-dev/sass/components/skip-link/index.html +763 -302
  139. package/docs-dev/sass/components/slider/index.html +762 -301
  140. package/docs-dev/sass/components/spoke-spinner/index.html +755 -294
  141. package/docs-dev/sass/components/sticky-list/index.html +5483 -0
  142. package/docs-dev/sass/components/tabs/index.html +764 -303
  143. package/docs-dev/sass/components/tag/index.html +755 -294
  144. package/docs-dev/sass/components/tile-button/index.html +755 -294
  145. package/docs-dev/sass/components/tile-grid/index.html +755 -294
  146. package/docs-dev/sass/components/tile-grid-overlay/index.html +755 -294
  147. package/docs-dev/sass/components/vignette/index.html +769 -302
  148. package/docs-dev/sass/components/wysiwyg/index.html +755 -294
  149. package/docs-dev/sass/core/breakpoint/index.html +755 -294
  150. package/docs-dev/sass/core/button/index.html +755 -294
  151. package/docs-dev/sass/core/color/index.html +793 -325
  152. package/docs-dev/sass/core/cssvar/index.html +755 -294
  153. package/docs-dev/sass/core/element/index.html +755 -294
  154. package/docs-dev/sass/core/index.html +755 -294
  155. package/docs-dev/sass/core/layout/index.html +762 -301
  156. package/docs-dev/sass/core/path/index.html +755 -294
  157. package/docs-dev/sass/core/selector/index.html +755 -294
  158. package/docs-dev/sass/core/typography/index.html +755 -294
  159. package/docs-dev/sass/core/units/index.html +755 -294
  160. package/docs-dev/sass/core/utils/index.html +1477 -382
  161. package/docs-dev/sass/helpers/color/index.html +755 -294
  162. package/docs-dev/sass/helpers/display/index.html +755 -294
  163. package/docs-dev/sass/helpers/index/index.html +755 -294
  164. package/docs-dev/sass/helpers/index.html +758 -295
  165. package/docs-dev/sass/helpers/print/index.html +755 -294
  166. package/docs-dev/sass/helpers/typography/index.html +755 -294
  167. package/docs-dev/sass/helpers/units/index.html +755 -294
  168. package/docs-dev/sass/helpers/utilities/index.html +755 -294
  169. package/docs-dev/sass/index.html +758 -295
  170. package/js/index.js +1 -0
  171. package/js/settings.js +78 -0
  172. package/js/ui/details-group.js +121 -0
  173. package/js/ui/index.js +1 -0
  174. package/js/ui/modal-builder.js +3 -2
  175. package/js/ui/overflow-scroller.js +5 -4
  176. package/js/ui/popover.js +1 -0
  177. package/js/ui/programmatic-modal.js +9 -3
  178. package/js/ui/slider.js +7 -6
  179. package/js/ui/theme-toggle.js +330 -89
  180. package/js/utils/dom.js +43 -1
  181. package/js/utils/font-awesome.js +18 -0
  182. package/js/utils/index.js +2 -1
  183. package/package.json +9 -6
  184. package/scss/_color.scss +9 -2
  185. package/scss/_layout.scss +1 -4
  186. package/scss/_utils.scss +187 -11
  187. package/scss/components/README.todos +14 -0
  188. package/scss/components/_accordion.scss +17 -18
  189. package/scss/components/_badge.scss +3 -2
  190. package/scss/components/_basic-hero.scss +112 -0
  191. package/scss/components/_button-verbose.scss +66 -12
  192. package/scss/components/_callout.scss +43 -54
  193. package/scss/components/_captioned-figure.scss +23 -5
  194. package/scss/components/_card-grid.scss +1 -1
  195. package/scss/components/_card.scss +190 -70
  196. package/scss/components/_css-icon.scss +16 -11
  197. package/scss/components/_data-table.scss +41 -4
  198. package/scss/components/_flipcard.scss +20 -14
  199. package/scss/components/_form-theme.scss +135 -123
  200. package/scss/components/_hero.scss +9 -0
  201. package/scss/components/_index.scss +18 -0
  202. package/scss/components/_list-inline.scss +80 -0
  203. package/scss/components/_list-lines.scss +44 -33
  204. package/scss/components/_list-ordered.scss +0 -1
  205. package/scss/components/_menu-stack.scss +42 -26
  206. package/scss/components/_modal.scss +23 -19
  207. package/scss/components/_nav-strip.scss +25 -16
  208. package/scss/components/_overlay-section.scss +2 -1
  209. package/scss/components/_pager.scss +6 -6
  210. package/scss/components/_placeholder-block.scss +4 -4
  211. package/scss/components/_popover.scss +174 -73
  212. package/scss/components/_pull-quote.scss +12 -12
  213. package/scss/components/_rule.scss +0 -1
  214. package/scss/components/_scroll-slider.scss +1 -1
  215. package/scss/components/_skip-link.scss +2 -1
  216. package/scss/components/_slider.scss +17 -38
  217. package/scss/components/_sticky-list.scss +206 -0
  218. package/scss/components/_tabs.scss +5 -2
  219. package/scss/components/_tag.scss +1 -1
  220. package/scss/components/_vignette.scss +1 -0
  221. package/types/index.d.ts +1 -0
  222. package/types/settings.d.ts +38 -0
  223. package/types/settings.d.ts.map +1 -0
  224. package/types/ui/details-group.d.ts +43 -0
  225. package/types/ui/details-group.d.ts.map +1 -0
  226. package/types/ui/index.d.ts +1 -0
  227. package/types/ui/modal-builder.d.ts +2 -2
  228. package/types/ui/modal-builder.d.ts.map +1 -1
  229. package/types/ui/overflow-scroller.d.ts +2 -2
  230. package/types/ui/overflow-scroller.d.ts.map +1 -1
  231. package/types/ui/popover.d.ts.map +1 -1
  232. package/types/ui/programmatic-modal.d.ts.map +1 -1
  233. package/types/ui/slider.d.ts +2 -2
  234. package/types/ui/slider.d.ts.map +1 -1
  235. package/types/ui/tabs.d.ts.map +1 -1
  236. package/types/ui/theme-toggle.d.ts +58 -7
  237. package/types/ui/theme-toggle.d.ts.map +1 -1
  238. package/types/utils/dom.d.ts +19 -1
  239. package/types/utils/dom.d.ts.map +1 -1
  240. package/types/utils/font-awesome.d.ts +5 -0
  241. package/types/utils/font-awesome.d.ts.map +1 -0
  242. package/types/utils/index.d.ts +1 -0
@@ -10,13 +10,10 @@
10
10
  @use "../utils";
11
11
  @use "../selector";
12
12
  @use "../element";
13
+ @use "../color";
13
14
 
14
15
  // Used for function fallback
15
16
  $-fallbacks: (
16
- "border" : (
17
- "function" : meta.get-function("get-rule-style", false, "element"),
18
- "property" : "light"
19
- ),
20
17
  "border-radius" : (
21
18
  "function" : meta.get-function("get", false, "element"),
22
19
  "property" : "border-radius"
@@ -26,8 +23,9 @@ $-fallbacks: (
26
23
  /// Module Settings
27
24
  /// @type Map
28
25
  /// @prop {Color} background-color [rgb(240, 240, 240)] The background color of the Callout.
29
- /// @prop {Boolean} border [true] The border of the Callout.
26
+ /// @prop {Color} border-color ["rule-light"] The border color of the Callout.
30
27
  /// @prop {Boolean} border-radius [true] The border radius of the Callout.
28
+ /// @prop {Dimension} border-width [1px] The border width of the Callout.
31
29
  /// @prop {CssValue} box-shadow [none] The box-shadow of the Callout.
32
30
  /// @prop {Boolean} left-cap [false] Toggles the use of left caps in styled callouts.
33
31
  /// @prop {Color} left-cap-color [green] Color of the left cap.
@@ -37,58 +35,41 @@ $-fallbacks: (
37
35
 
38
36
  $config: (
39
37
  "background-color" : rgb(240, 240, 240),
40
- "border" : true,
38
+ "border-color" : "rule-light",
41
39
  "border-radius" : true,
40
+ "border-width" : 1px,
42
41
  "box-shadow" : none,
43
- "left-cap" : false,
44
- "left-cap-color" : green,
42
+ "left-cap" : true,
43
+ "left-cap-color" : rgb(160, 160, 160),
45
44
  "left-cap-width" : 0.5rem,
46
45
  "margin" : 2rem,
47
46
  "padding" : 1.5rem,
48
47
  ) !default;
49
48
 
50
49
  $styles: (
51
- "background-dark" : (
52
- "background-color" : rgb(240, 240, 240)
53
- ),
54
50
  "outline" : (
55
51
  "background-color": transparent
56
52
  ),
57
- "light" : (
58
- "background-color" : white,
59
- "border-color" : gray
60
- ),
61
- "informative" : (
62
- "background-color" : #e7f6f8,
63
- "left-cap-color" : #00bde3,
53
+ "info" : (
54
+ "background-color" : "info-background",
55
+ "left-cap-color" : "info",
64
56
  "left-cap" : true,
65
- "left-cap-width": 0.5rem
66
57
  ),
67
58
  "warning" : (
68
- "background-color" : #faf3d1,
69
- "left-cap-color" : #ffbe2e,
59
+ "background-color" : "info-background",
60
+ "left-cap-color" : "info",
70
61
  "left-cap" : true,
71
- "left-cap-width": 0.5rem
72
62
  ),
73
63
  "success" : (
74
- "background-color" : #ecf3ec,
75
- "left-cap-color" : #00a91c,
64
+ "background-color" : "success-background",
65
+ "left-cap-color" : "success",
76
66
  "left-cap" : true,
77
- "left-cap-width": 0.5rem
78
67
  ),
79
68
  "danger" : (
80
- "background-color" : #f4e3db,
81
- "left-cap-color" : #d54309,
69
+ "background-color" : "danger-background",
70
+ "left-cap-color" : "danger",
82
71
  "left-cap" : true,
83
- "left-cap-width": 0.5rem
84
72
  ),
85
- "emergency" : (
86
- "background-color" : #9c3d10,
87
- "left-cap-color" : #9c3d10,
88
- "left-cap" : true,
89
- "color" : white,
90
- "left-cap-width": 0.5rem
91
- )
92
73
  ) !default;
93
74
 
94
75
  /// Change modules $config
@@ -118,22 +99,14 @@ $styles: (
118
99
  $styles: utils.map-merge($styles, $changes, $merge-mode) !global;
119
100
  }
120
101
 
121
- /// Output styling for a callout that adds a left cap
122
- /// @param {Dimension} $width The width of the left cap
123
- /// @param {Color} $color The left cap color
124
-
125
- @mixin left-cap($width: get("left-cap-width"), $color: get("left-cap-color")) {
102
+ @mixin -left-cap($color: get("left-cap-color")) {
103
+ $left-padding: get-spacing-left(get("padding"));
126
104
  position: relative;
127
105
  border-top-left-radius: 0;
128
106
  border-bottom-left-radius: 0;
107
+ padding-left: get("left-cap-width") + $left-padding;
129
108
  &::before {
130
- position: absolute;
131
109
  content: "";
132
- left: 0;
133
- top: 0;
134
- bottom: 0;
135
- width: $width;
136
- background-color: $color;
137
110
  }
138
111
  }
139
112
 
@@ -143,32 +116,48 @@ $styles: (
143
116
 
144
117
  @mixin styles {
145
118
  $prefix: selector.class("callout");
146
-
119
+
147
120
  #{ $prefix } {
148
- background-color: get("background-color");
121
+ background-color: color.get(get("background-color"));
149
122
  padding: get("padding");
150
- border: get("border");
123
+ border: get("border-width") solid color.get(get("border-color"));
151
124
  margin-bottom: get("margin");
152
125
  box-shadow: get("box-shadow");
153
126
  border-radius: get("border-radius");
154
127
  & >:first-child {
155
128
  margin-top: 0;
156
129
  }
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"));
137
+ }
157
138
  @if get("left-cap") {
158
- @include left-cap();
139
+ @include -left-cap();
140
+ &::before {
141
+ content: "";
142
+ }
159
143
  }
160
144
  }
161
145
  @each $name, $style in $styles {
162
146
  #{ $prefix }--#{ $name } {
163
- background-color: map.get($style, "background-color");
164
- color: map.get($style, "color");
147
+ background-color: color.get(map.get($style, "background-color"));
148
+ color: color.get(map.get($style, "color"));
165
149
  border: map.get($style, "border");
166
150
  border-radius: map.get($style, "border-radius");
167
- border-color: map.get($style, "border-color");
151
+ border-color: color.get(map.get($style, "border-color"));
168
152
  box-shadow: map.get($style, "box-shadow");
169
153
  padding: map.get($style, "padding");
154
+ &::before {
155
+ background-color: color.get(map.get($style, "left-cap-color"));
156
+ }
170
157
  @if map.get($style, "left-cap") {
171
- @include left-cap( map.get($style, "left-cap-width"), map.get($style, "left-cap-color"));
158
+ @if not get("left-cap") {
159
+ @include -left-cap();
160
+ }
172
161
  }
173
162
  }
174
163
  }
@@ -10,6 +10,7 @@
10
10
  @use "../utils";
11
11
  @use "../element";
12
12
  @use "../typography";
13
+ @use "../color";
13
14
 
14
15
  // Used for function fallback
15
16
  $-fallbacks: (
@@ -29,6 +30,23 @@ $-fallbacks: (
29
30
 
30
31
  /// Module Settings
31
32
  /// @type Map
33
+ /// @prop {Boolean} text-alignment-matches [false] Toggles matching alignment.
34
+ /// @prop {Boolean} text-alignment-matches-center-only [true] Toggles matching alignment, but only if center.
35
+ /// @prop {Color} background-color [white] Background color of the component.
36
+ /// @prop {CssValue} box-shadow [true] Box shadow the captioned figure.
37
+ /// @prop {Dimension} margin-bottom [true] Bottom margin of the captioned figure.
38
+ /// @prop {Number} line-height [true] Line height of the captioned figure caption.
39
+ /// @prop {Dimension} caption-padding [0.5em] Padding of the captioned figure caption.
40
+ /// @prop {Color} color [null] Font color of the captioned figure caption.
41
+ /// @prop {String} type-size ["small"] Font size of the captioned figure caption.
42
+ /// @prop {Dimension} caption-max-width [min(100%, 15em)] Max width of the captioned figure caption.
43
+ /// @prop {Color} caption-background-color [rgba(255,255,255,0.7)] background color of the captioned figure caption.
44
+ /// @prop {CssValue} caption-backdrop-filter [blur(2px)] Filter of the backdrop of the captioned figure.
45
+ /// @prop {Color} traditional-caption-color [null] Traditional style for font color.
46
+ /// @prop {Color} traditional-caption-background-color [transparent] Traditional style for caption background color.
47
+ /// @prop {Dimension} traditional-caption-padding [0.5em] Traditional style for caption padding.
48
+ /// @prop {Dimension} traditional-caption-max-width [35em] Traditional style for caption max width.
49
+ /// @prop {CssValue} traditional-caption-text-align [right] Traditional style for caption text-align.
32
50
 
33
51
  $config: (
34
52
  "text-alignment-matches" : false,
@@ -82,7 +100,7 @@ $config: (
82
100
  display: block;
83
101
  position: relative;
84
102
  margin-bottom: get("margin-bottom");
85
- background-color: get("background-color");
103
+ background-color: color.get(get("background-color"));
86
104
  > img {
87
105
  width: 100%;
88
106
  height: auto;
@@ -101,20 +119,20 @@ $config: (
101
119
  }
102
120
  #{ $prefix }__caption {
103
121
  position: absolute;
104
- color: get("color");
122
+ color: color.get(get("color"));
105
123
  @include typography.size(get("type-size"), $only-font-size: true);
106
124
  line-height: get("line-height");
107
125
  max-width: get("caption-max-width");
108
- background-color: get("caption-background-color");
126
+ background-color: color.get(get("caption-background-color"));
109
127
  padding: get("caption-padding");
110
128
  backdrop-filter: get("caption-backdrop-filter");
111
129
  }
112
130
  #{ $prefix }--traditional {
113
131
  #{ $prefix }__caption {
114
132
  position: static;
115
- color: get("traditional-caption-color");
133
+ color: color.get(get("traditional-caption-color"));
116
134
  max-width: get("traditional-caption-max-width");
117
- background-color: get("traditional-caption-background-color");
135
+ background-color: color.get(get("traditional-caption-background-color"));
118
136
  padding: get("traditional-caption-padding");
119
137
  text-align: get("traditional-caption-text-align");
120
138
  @if (get("traditional-caption-text-align") == right) {
@@ -51,7 +51,7 @@ $config: (
51
51
 
52
52
  #{ $prefix } {
53
53
  display: grid;
54
- grid-template-columns: get("template-columns");
54
+ grid-template-columns: get("template-columns");
55
55
  grid-auto-rows: 1fr;
56
56
  gap: get("gap");
57
57
  margin: get("gap") 0;
@@ -9,6 +9,7 @@
9
9
  @use "../breakpoint";
10
10
  @use "../utils";
11
11
  @use "../selector";
12
+ @use "../color";
12
13
 
13
14
  // todo
14
15
  // sass color adjust for smooth transition. Add a comment for this if we can’t get to this
@@ -18,7 +19,6 @@
18
19
  /// @prop {Dimension} padding [2rem] The padding for the image icon
19
20
  /// @prop {Dimension} margin-y [3rem] Top and bottom margin for the card.
20
21
  /// @prop {Dimension} border-radius [5rem] The border radius of the card.
21
- /// @prop {String} horizontal-breakpoint [small] The breakpoint used to change the card to vertical if using the card--horizontal styling. Uses ulu's breakpoint module.
22
22
  /// @prop {CssValue} box-shadow [null] The box-shadow for the card.
23
23
  /// @prop {CssValue} box-shadow-hover [null] The box-shadow for the card when hovered or focused.
24
24
  /// @prop {Color} color [null] The type color of the card.
@@ -29,7 +29,7 @@
29
29
  /// @prop {Color} background-color [white] The background color of the card.
30
30
  /// @prop {Color} background-color-hover [rgb(242, 244, 246)] The background color of the card when hovered or focused.
31
31
  /// @prop {Dimension} max-width [28rem] The max-width of the card.
32
- /// @prop {Dimension} body-min-height [10rem] the min-height of the card body.
32
+ /// @prop {Dimension} body-min-height [8rem] the min-height of the card body.
33
33
  /// @prop {CssValue} border [1px solid #ccc] The card border.
34
34
  /// @prop {CssValue} border-hover [2px solid #278cca] The card border when hovered or focused.
35
35
  /// @prop {Dimension} header-margin [0.75em] The margin for the card header.
@@ -57,9 +57,14 @@
57
57
  /// @prop {Boolean} image-transition-enabled [true] Enable or disable the image transition.
58
58
  /// @prop {Time} image-transition-duration [350ms] The duration of the image transition.
59
59
  /// @prop {CssValue} image-transition-timing-function [ease-in-out] The timing function for the image transition.
60
+ /// @prop {Number} image-fit-padding [1rem] Padding on inside of image when using image fit modifier
61
+ /// @prop {CssValue} image-fit-filter [drop-shadow(0 0px 8px rgba(0, 0, 0, 0.2))] Filter to use on image when using image fit modifier
62
+ /// @prop {List} image-icon-max-width [10rem] Max width for image when using the modifier on the .card__image--icon
60
63
  /// @prop {List} image-transition-properties [(transform, filter)] The properties for the image transitions.
61
-
62
-
64
+ /// @prop {String} horizontal-breakpoint [small] The breakpoint used to change the card to vertical if using the card--horizontal styling. Uses ulu's breakpoint module.
65
+ /// @prop {Unit} horizontal-min-height [10rem] Minimum height when horizontal
66
+ /// @prop {Unit} horizontal-max-width [40rem] Maximum width when horizontal
67
+ /// @prop {Unit} horizontal-body-max-width [80rem] The max-width of body when horizontal
63
68
 
64
69
  $config: (
65
70
  "background-color" : white,
@@ -78,18 +83,25 @@ $config: (
78
83
  "footer-padding-y" : 0.25rem,
79
84
  "footer-min-height" : 2.5rem,
80
85
  "horizontal-breakpoint" : "small",
86
+ "horizontal-image-width" : min(33%, 20rem),
87
+ "horizontal-body-max-width" : 80rem,
88
+ "horizontal-min-height" : 10rem,
89
+ "horizontal-max-width" : 40rem,
81
90
  "header-margin" : 0.75em,
82
91
  "image-ratio" : 56.25%,
83
92
  "image-aspect-ratio": list.slash(5, 3),
84
- "image-background-color" : rgb(197, 197, 197),
93
+ "image-background-color" : rgb(238, 238, 238),
85
94
  "image-border" : null, // For when you have a margin
86
95
  "image-filter-hover" : null,
87
96
  "image-margin" : null,
97
+ "image-icon-max-width" : 8rem,
88
98
  "image-transform-hover" : null,
89
99
  "image-transition-duration" : 350ms,
90
100
  "image-transition-enabled" : true,
91
101
  "image-transition-properties" : (transform, filter),
92
102
  "image-transition-timing-function" : ease-in-out,
103
+ "image-fit-padding" : 1rem,
104
+ "image-fit-filter" : drop-shadow(0 0px 8px rgba(0, 0, 0, 0.3)),
93
105
  "margin-y" : 3rem,
94
106
  "max-width" : 28rem,
95
107
  "padding" : 2rem,
@@ -109,7 +121,7 @@ $config: (
109
121
  "overlay-background-color": rgba(0, 0, 0, 0.6),
110
122
  "overlay-shading": true,
111
123
  "overlay-body-padding-y": 1rem,
112
- ) !default;
124
+ ) !default;
113
125
 
114
126
  /// Change modules $config
115
127
  /// @param {Map} $changes Map of changes
@@ -137,19 +149,34 @@ $config: (
137
149
 
138
150
  @mixin when-clickable($hover: false) {
139
151
  $prefix: selector.class("card");
152
+ // When proxy click enabled
140
153
  @if (get("clickable-card-enabled") and get("clickable-card-selector")) {
141
- #{ $prefix } {
142
- &#{ get("clickable-card-selector") } {
143
- @if ($hover) {
144
- #{ get("clickable-card-interact-selector") } {
145
- @content;
146
- }
147
- } @else {
154
+ #{ $prefix }#{ get("clickable-card-selector") },
155
+ a#{ $prefix },
156
+ button#{ $prefix },
157
+ #{ $prefix }--clickable {
158
+ @if ($hover) {
159
+ #{ get("clickable-card-interact-selector") } {
148
160
  @content;
149
161
  }
162
+ } @else {
163
+ @content;
150
164
  }
151
165
  }
152
- }
166
+ // Without proxy click (only if interactive)
167
+ } @else {
168
+ a#{ $prefix },
169
+ button#{ $prefix },
170
+ #{ $prefix }--clickable {
171
+ @if ($hover) {
172
+ #{ get("clickable-card-interact-selector") } {
173
+ @content;
174
+ }
175
+ } @else {
176
+ @content;
177
+ }
178
+ }
179
+ }
153
180
  }
154
181
 
155
182
 
@@ -167,8 +194,8 @@ $config: (
167
194
  $prefix: selector.class("card");
168
195
 
169
196
  #{ $prefix } {
170
- color: get("color");
171
- background-color: get("background-color");
197
+ color: color.get(get("color"));
198
+ background-color: color.get(get("background-color"));
172
199
  border-radius: get("border-radius");
173
200
  box-shadow: get("box-shadow");
174
201
  margin-top: get("margin-y");
@@ -178,34 +205,34 @@ $config: (
178
205
  flex-direction: column;
179
206
  justify-content: flex-end;
180
207
  max-width: get("max-width");
181
- }
182
- @if (get("border") or get("border-hover") or get("overlay-background-color-hover")) {
183
- @include when-clickable($hover: false) {
184
- &:after {
185
- position: absolute;
186
- content: if(get("border"), "", false);
187
- top: 0;
188
- bottom: 0;
189
- right: 0;
190
- left: 0;
191
- border: get("border");
192
- border-radius: get("border-radius");
193
- z-index: 4;
194
- pointer-events: none;
195
- }
208
+ // Not absolutely necessary, incase we want to remove in future
209
+ overflow: hidden;
210
+
211
+ // Border is on pseudo so that it's on top of image/etc
212
+ &:after {
213
+ position: absolute;
214
+ content: if(get("border"), "", null);
215
+ top: 0;
216
+ bottom: 0;
217
+ right: 0;
218
+ left: 0;
219
+ border: get("border");
220
+ border-radius: get("border-radius");
221
+ z-index: 4;
222
+ pointer-events: none;
196
223
  }
197
224
  }
198
225
 
199
226
  @include when-clickable($hover: true) {
200
- background-color: get("background-color-hover");
201
- color: get("color-hover");
227
+ background-color: color.get(get("background-color-hover"));
228
+ color: color.get(get("color-hover"));
202
229
  box-shadow: get("box-shadow-hover");
203
230
 
204
231
  @if (get("border-hover") or get("overlay-background-color-hover")) {
205
232
  &:after {
206
233
  content: "";
207
234
  border: get("border-hover");
208
- background-color: get("overlay-background-color-hover");
235
+ background-color: color.get(get("overlay-background-color-hover"));
209
236
  }
210
237
  }
211
238
  }
@@ -222,24 +249,25 @@ $config: (
222
249
  }
223
250
 
224
251
  #{ $prefix }__title {
225
- color: get("title-color");
252
+ color: color.get(get("title-color"));
226
253
  margin-bottom: get("title-margin");
227
254
  display: block;
228
255
  font-weight: get("title-font-weight");
229
- @if get("title-color-hover") {
230
- &:hover,
231
- &:focus {
232
- color: get("title-color-hover");
233
- }
234
- }
235
256
  #{ $prefix }__title-link {
236
257
  all: unset;
258
+ cursor: pointer;
259
+ @if get("title-color-hover") {
260
+ &:hover,
261
+ &:focus {
262
+ color: color.get(get("title-color-hover"));
263
+ }
264
+ }
237
265
  }
238
266
  }
239
267
  @if get("title-color-hover") {
240
268
  @include when-clickable($hover: true) {
241
269
  #{ $prefix }__title {
242
- color: get("title-color-hover");
270
+ color: color.get(get("title-color-hover"));
243
271
  }
244
272
  }
245
273
  }
@@ -257,7 +285,7 @@ $config: (
257
285
  // padding-top: get("image-ratio"); // 9:16
258
286
  margin: get("image-margin");
259
287
  border: get("image-border");
260
- background-color: get("image-background-color");
288
+ background-color: color.get(get("image-background-color"));
261
289
  border-top-right-radius: get("border-radius");
262
290
  border-top-left-radius: get("border-radius");
263
291
  aspect-ratio: get("image-aspect-ratio");
@@ -295,14 +323,14 @@ $config: (
295
323
  }
296
324
 
297
325
  #{ $prefix }__image--icon {
298
- background-color: transparent;
326
+ // background-color: transparent;
299
327
  display: flex;
300
328
  align-items: center;
301
329
  justify-content: center;
302
330
  img {
303
331
  position: static;
304
332
  display: block;
305
- max-width: 30rem;
333
+ max-width: get("image-icon-max-width");
306
334
  height: auto;
307
335
  top: auto;
308
336
  left: auto;
@@ -340,11 +368,15 @@ $config: (
340
368
  position: relative;
341
369
  flex-grow: 0;
342
370
  z-index: 2;
343
- color: get("color-overlay");
344
- background-color: get("overlay-background-color");
371
+ color: color.get(get("color-overlay"));
372
+ background-color: color.get(get("overlay-background-color"));
345
373
  min-height: 0;
346
374
  padding-top: get("overlay-body-padding-y");
347
375
  padding-bottom: get("overlay-body-padding-y");
376
+ &:not(:has(~ #{ $prefix }__footer)) {
377
+ border-bottom-left-radius: get("border-radius");
378
+ border-bottom-right-radius: get("border-radius");
379
+ }
348
380
  @if (get("overlay-shading")) {
349
381
  margin-top: 4rem;
350
382
  &::before {
@@ -359,11 +391,20 @@ $config: (
359
391
  }
360
392
  }
361
393
  #{ $prefix }__footer {
362
- background-color: get("overlay-background-color");
363
- color: get("color-overlay");
394
+ background-color: color.get(get("overlay-background-color"));
395
+ color: color.get(get("color-overlay"));
396
+ border-bottom-left-radius: get("border-radius");
397
+ border-bottom-right-radius: get("border-radius");
398
+ }
399
+ #{ $prefix }__body,
400
+ #{ $prefix }__footer {
401
+ &:last-child {
402
+ border-bottom-left-radius: get("border-radius");
403
+ border-bottom-right-radius: get("border-radius");
404
+ }
364
405
  }
365
406
  #{ $prefix }__title {
366
- color: get("color-overlay");
407
+ color: color.get(get("color-overlay"));
367
408
  }
368
409
  #{ $prefix }__image {
369
410
  position: absolute;
@@ -373,7 +414,7 @@ $config: (
373
414
  right: 0;
374
415
  overflow: hidden;
375
416
  padding-top: 0;
376
- background-color: rgb(255, 255, 255);
417
+ background-color: color.get(rgb(255, 255, 255));
377
418
  border-radius: get("border-radius");
378
419
  aspect-ratio: auto;
379
420
  img {
@@ -396,28 +437,107 @@ $config: (
396
437
  }
397
438
  }
398
439
 
440
+ // Incase this modifier is being used to hide the image
441
+ // not just to tell the component how to layout without image
442
+ // - Use case is hiding image when you can't control the output
443
+ // of the inside of the card (printed no matter what). We had
444
+ // this happen in HHRC, including this extra CSS for that
445
+ #{ $prefix }--no-image {
446
+ #{ $prefix }__image {
447
+ display: none;
448
+ }
449
+ }
450
+ #{ $prefix }--image-fit {
451
+ #{ $prefix }__image {
452
+ img {
453
+ padding: get("image-fit-padding");
454
+ object-fit: contain;
455
+ object-position: top center;
456
+ filter: get("image-fit-filter");
457
+ }
458
+ }
459
+ }
460
+
399
461
  @if (get("horizontal-breakpoint")) {
400
462
  @include breakpoint.min(get("horizontal-breakpoint")) {
401
- #{ $prefix }--horizontal {
402
- display: flex;
403
- justify-content: center;
404
- align-items: center;
405
- #{ $prefix }__image {
406
- width: 33%;
407
- flex: 0 1 33%;
408
- // max-width: 30rem;
409
- min-height: 28rem;
410
- // padding-top: 0;
411
- }
412
- #{ $prefix }__body {
413
- display: flex;
414
- flex: 1;
415
- flex-direction: column;
416
- justify-content: center;
417
- max-width: 80rem;
418
- }
419
- }
463
+ @include -horizontal-card-styles();
420
464
  }
465
+ } @else {
466
+ @include -horizontal-card-styles();
421
467
  }
422
468
  }
423
469
 
470
+ @mixin -horizontal-card-styles() {
471
+ $prefix: selector.class("card");
472
+
473
+ #{ $prefix }--horizontal {
474
+ display: grid;
475
+ grid-template-columns: get("horizontal-image-width") 1fr;
476
+ // Creating the two rows (body and footer), if one is missing it's height will be 0
477
+ // Cannot use gap with the grid as it will create space when a row isn't needed
478
+ grid-template-rows: auto auto;
479
+ min-height: get("horizontal-min-height");
480
+ max-width: get("horizontal-max-width");
481
+ #{ $prefix }__image {
482
+ grid-column: 1 / 2;
483
+ grid-row: 1 / -1;
484
+ aspect-ratio: auto;
485
+ border-top-right-radius: 0;
486
+ border-bottom-left-radius: get("border-radius");
487
+ }
488
+ #{ $prefix }__body,
489
+ #{ $prefix }__footer {
490
+ grid-column: 2 / 3;
491
+ }
492
+ #{ $prefix }__body {
493
+ display: flex;
494
+ flex-direction: column;
495
+ justify-content: center;
496
+ max-width: get("horizontal-body-max-width");
497
+ }
498
+
499
+ // For modern browsers
500
+ // Optionally use no-image modifier for older browser support
501
+ &:not(:has(#{ $prefix }__image)) {
502
+ @include -card-horizontal-no-image-styles();
503
+ }
504
+ &#{ $prefix }--no-image {
505
+ @include -card-horizontal-no-image-styles();
506
+ }
507
+ }
508
+ }
509
+
510
+ @mixin -card-horizontal-no-image-styles() {
511
+ $prefix: selector.class("card");
512
+ grid-template-columns: 1fr;
513
+ #{ $prefix }__body,
514
+ #{ $prefix }__footer {
515
+ grid-column: 1 / 2;
516
+ }
517
+ }
518
+
519
+ // OLD CSS FOR HORIZONTAL
520
+ // #{ $prefix }--horizontal {
521
+ // display: flex;
522
+ // flex-direction: row;
523
+ // justify-content: center;
524
+ // align-items: center;
525
+ // #{ $prefix }__image {
526
+ // align-self: stretch;
527
+ // border-top-right-radius: 0;
528
+ // border-bottom-left-radius: get("border-radius");
529
+ // width: get("horizontal-image-width");
530
+ // flex: 0 0 get("horizontal-image-width");
531
+ // // max-width: 30rem;
532
+ // // min-height: 28rem;
533
+ // // padding-top: 0;
534
+ // }
535
+ // #{ $prefix }__body {
536
+ // display: flex;
537
+ // flex: 1;
538
+ // flex-direction: column;
539
+ // justify-content: center;
540
+ // max-width: get("horizontal-body-max-width");
541
+ // }
542
+ // }
543
+