@graupl/core 1.0.0-beta.22 → 1.0.0-beta.24

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 (273) hide show
  1. package/dist/css/base/button.css +2 -2
  2. package/dist/css/base/button.css.map +1 -1
  3. package/dist/css/base/form.css +2 -2
  4. package/dist/css/base/form.css.map +1 -1
  5. package/dist/css/base/link.css +2 -2
  6. package/dist/css/base/link.css.map +1 -1
  7. package/dist/css/base/table.css +2 -2
  8. package/dist/css/base/table.css.map +1 -1
  9. package/dist/css/base.css +2 -2
  10. package/dist/css/base.css.map +1 -1
  11. package/dist/css/component/accordion.css +2 -5
  12. package/dist/css/component/accordion.css.map +1 -1
  13. package/dist/css/component/alert.css +2 -2
  14. package/dist/css/component/alert.css.map +1 -1
  15. package/dist/css/component/badge.css +2 -2
  16. package/dist/css/component/badge.css.map +1 -1
  17. package/dist/css/component/card.css +2 -2
  18. package/dist/css/component/card.css.map +1 -1
  19. package/dist/css/component/carousel.css +2 -2
  20. package/dist/css/component/carousel.css.map +1 -1
  21. package/dist/css/component/disclosure.css +2 -2
  22. package/dist/css/component/disclosure.css.map +1 -1
  23. package/dist/css/component/input-group.css +2 -2
  24. package/dist/css/component/input-group.css.map +1 -1
  25. package/dist/css/component/list.css +2 -2
  26. package/dist/css/component/list.css.map +1 -1
  27. package/dist/css/component/menu.css +2 -2
  28. package/dist/css/component/menu.css.map +1 -1
  29. package/dist/css/component/navigation.css +2 -2
  30. package/dist/css/component/navigation.css.map +1 -1
  31. package/dist/css/component.css +2 -5
  32. package/dist/css/component.css.map +1 -1
  33. package/dist/css/graupl.css +2 -5
  34. package/dist/css/graupl.css.map +1 -1
  35. package/dist/css/init.css +2 -2
  36. package/dist/css/init.css.map +1 -1
  37. package/dist/css/layout/columns.css +2 -2
  38. package/dist/css/layout/columns.css.map +1 -1
  39. package/dist/css/layout/container.css +2 -2
  40. package/dist/css/layout/container.css.map +1 -1
  41. package/dist/css/layout/flex-columns.css +2 -2
  42. package/dist/css/layout/flex-columns.css.map +1 -1
  43. package/dist/css/layout.css +2 -5
  44. package/dist/css/layout.css.map +1 -1
  45. package/dist/css/normalize.css +2 -2
  46. package/dist/css/normalize.css.map +1 -1
  47. package/dist/css/state/focus.css +2 -2
  48. package/dist/css/state/focus.css.map +1 -1
  49. package/dist/css/state.css +2 -2
  50. package/dist/css/state.css.map +1 -1
  51. package/dist/css/theme/color.css +2 -2
  52. package/dist/css/theme/color.css.map +1 -1
  53. package/dist/css/theme/typography.css +2 -2
  54. package/dist/css/theme/typography.css.map +1 -1
  55. package/dist/css/theme.css +2 -2
  56. package/dist/css/theme.css.map +1 -1
  57. package/dist/css/utilities/alignment.css +1 -1
  58. package/dist/css/utilities/alignment.css.map +1 -1
  59. package/dist/css/utilities/background.css +2 -2
  60. package/dist/css/utilities/background.css.map +1 -1
  61. package/dist/css/utilities/border.css +2 -2
  62. package/dist/css/utilities/border.css.map +1 -1
  63. package/dist/css/utilities/color.css +2 -2
  64. package/dist/css/utilities/color.css.map +1 -1
  65. package/dist/css/utilities/container.css +1 -1
  66. package/dist/css/utilities/container.css.map +1 -1
  67. package/dist/css/utilities/display.css +2 -2
  68. package/dist/css/utilities/display.css.map +1 -1
  69. package/dist/css/utilities/flex.css +2 -2
  70. package/dist/css/utilities/flex.css.map +1 -1
  71. package/dist/css/utilities/gradient.css +2 -2
  72. package/dist/css/utilities/gradient.css.map +1 -1
  73. package/dist/css/utilities/height.css +2 -2
  74. package/dist/css/utilities/height.css.map +1 -1
  75. package/dist/css/utilities/inset.css +2 -2
  76. package/dist/css/utilities/inset.css.map +1 -1
  77. package/dist/css/utilities/justification.css +1 -1
  78. package/dist/css/utilities/justification.css.map +1 -1
  79. package/dist/css/utilities/list.css +1 -1
  80. package/dist/css/utilities/list.css.map +1 -1
  81. package/dist/css/utilities/order.css +2 -2
  82. package/dist/css/utilities/order.css.map +1 -1
  83. package/dist/css/utilities/position.css +2 -2
  84. package/dist/css/utilities/position.css.map +1 -1
  85. package/dist/css/utilities/ratio.css +2 -2
  86. package/dist/css/utilities/ratio.css.map +1 -1
  87. package/dist/css/utilities/spacing.css +2 -2
  88. package/dist/css/utilities/spacing.css.map +1 -1
  89. package/dist/css/utilities/typography.css +2 -2
  90. package/dist/css/utilities/typography.css.map +1 -1
  91. package/dist/css/utilities/visibility.css +2 -2
  92. package/dist/css/utilities/visibility.css.map +1 -1
  93. package/dist/css/utilities/visually-hidden.css +2 -2
  94. package/dist/css/utilities/visually-hidden.css.map +1 -1
  95. package/dist/css/utilities/width.css +2 -2
  96. package/dist/css/utilities/width.css.map +1 -1
  97. package/dist/css/utilities/z-index.css +1 -1
  98. package/dist/css/utilities/z-index.css.map +1 -1
  99. package/dist/css/utilities.css +2 -2
  100. package/dist/css/utilities.css.map +1 -1
  101. package/dist/js/accordion.js.map +1 -1
  102. package/dist/js/alert.js.map +1 -1
  103. package/dist/js/carousel.js.map +1 -1
  104. package/dist/js/component/accordion.cjs.js.map +1 -1
  105. package/dist/js/component/accordion.es.js.map +1 -1
  106. package/dist/js/component/accordion.iife.js.map +1 -1
  107. package/dist/js/component/alert.cjs.js.map +1 -1
  108. package/dist/js/component/alert.es.js.map +1 -1
  109. package/dist/js/component/alert.iife.js.map +1 -1
  110. package/dist/js/component/carousel.cjs.js.map +1 -1
  111. package/dist/js/component/carousel.es.js.map +1 -1
  112. package/dist/js/component/carousel.iife.js.map +1 -1
  113. package/dist/js/component/disclosure.cjs.js +2 -2
  114. package/dist/js/component/disclosure.cjs.js.map +1 -1
  115. package/dist/js/component/disclosure.es.js +2 -2
  116. package/dist/js/component/disclosure.es.js.map +1 -1
  117. package/dist/js/component/disclosure.iife.js +2 -2
  118. package/dist/js/component/disclosure.iife.js.map +1 -1
  119. package/dist/js/component/tabs.cjs.js +5 -0
  120. package/dist/js/component/tabs.cjs.js.map +1 -0
  121. package/dist/js/component/tabs.es.js +5 -0
  122. package/dist/js/component/tabs.es.js.map +1 -0
  123. package/dist/js/component/tabs.iife.js +5 -0
  124. package/dist/js/component/tabs.iife.js.map +1 -0
  125. package/dist/js/disclosure.js +2 -2
  126. package/dist/js/disclosure.js.map +1 -1
  127. package/dist/js/generator/accordion.cjs.js.map +1 -1
  128. package/dist/js/generator/accordion.es.js.map +1 -1
  129. package/dist/js/generator/accordion.iife.js.map +1 -1
  130. package/dist/js/generator/alert.cjs.js.map +1 -1
  131. package/dist/js/generator/alert.es.js.map +1 -1
  132. package/dist/js/generator/alert.iife.js.map +1 -1
  133. package/dist/js/generator/carousel.cjs.js.map +1 -1
  134. package/dist/js/generator/carousel.es.js.map +1 -1
  135. package/dist/js/generator/carousel.iife.js.map +1 -1
  136. package/dist/js/generator/disclosure.cjs.js +2 -2
  137. package/dist/js/generator/disclosure.cjs.js.map +1 -1
  138. package/dist/js/generator/disclosure.es.js +2 -2
  139. package/dist/js/generator/disclosure.es.js.map +1 -1
  140. package/dist/js/generator/disclosure.iife.js +2 -2
  141. package/dist/js/generator/disclosure.iife.js.map +1 -1
  142. package/dist/js/generator/navigation.cjs.js.map +1 -1
  143. package/dist/js/generator/navigation.es.js.map +1 -1
  144. package/dist/js/generator/navigation.iife.js.map +1 -1
  145. package/dist/js/generator/tabs.cjs.js +5 -0
  146. package/dist/js/generator/tabs.cjs.js.map +1 -0
  147. package/dist/js/generator/tabs.es.js +5 -0
  148. package/dist/js/generator/tabs.es.js.map +1 -0
  149. package/dist/js/generator/tabs.iife.js +5 -0
  150. package/dist/js/generator/tabs.iife.js.map +1 -0
  151. package/dist/js/graupl.js +5 -5
  152. package/dist/js/graupl.js.map +1 -1
  153. package/dist/js/navigation.js.map +1 -1
  154. package/dist/js/tabs.js +5 -0
  155. package/dist/js/tabs.js.map +1 -0
  156. package/package.json +4 -3
  157. package/src/js/disclosure/Disclosure.js +25 -45
  158. package/src/js/domHelpers.js +39 -22
  159. package/src/js/tabs/TabToggle.js +378 -0
  160. package/src/js/tabs/Tabs.js +1091 -0
  161. package/src/js/tabs/generator.js +32 -0
  162. package/src/js/tabs/index.js +5 -0
  163. package/src/scss/_defaults.scss +21 -88
  164. package/src/scss/_variables.scss +70 -0
  165. package/src/scss/base/button/_defaults.scss +2 -24
  166. package/src/scss/base/button/_index.scss +53 -52
  167. package/src/scss/base/button/_mixins.scss +24 -58
  168. package/src/scss/base/button/_variables.scss +139 -0
  169. package/src/scss/base/form/_defaults.scss +72 -2
  170. package/src/scss/base/form/_index.scss +196 -70
  171. package/src/scss/base/form/_variables.scss +166 -0
  172. package/src/scss/base/link/_defaults.scss +31 -0
  173. package/src/scss/base/link/_index.scss +177 -172
  174. package/src/scss/base/link/_variables.scss +215 -0
  175. package/src/scss/base/table/_defaults.scss +1 -11
  176. package/src/scss/base/table/_index.scss +126 -117
  177. package/src/scss/base/table/_variables.scss +214 -3
  178. package/src/scss/component/_index.scss +1 -0
  179. package/src/scss/component/accordion/_defaults.scss +73 -22
  180. package/src/scss/component/accordion/_index.scss +437 -62
  181. package/src/scss/component/accordion/_variables.scss +527 -101
  182. package/src/scss/component/alert/_defaults.scss +23 -32
  183. package/src/scss/component/alert/_index.scss +236 -30
  184. package/src/scss/component/alert/_variables.scss +155 -6
  185. package/src/scss/component/badge/_defaults.scss +1 -0
  186. package/src/scss/component/badge/_index.scss +25 -28
  187. package/src/scss/component/badge/_variables.scss +66 -2
  188. package/src/scss/component/card/_defaults.scss +64 -13
  189. package/src/scss/component/card/_index.scss +276 -30
  190. package/src/scss/component/card/_variables.scss +132 -0
  191. package/src/scss/component/carousel/_defaults.scss +73 -15
  192. package/src/scss/component/carousel/_index.scss +357 -41
  193. package/src/scss/component/carousel/_variables.scss +391 -0
  194. package/src/scss/component/disclosure/_index.scss +4 -4
  195. package/src/scss/component/disclosure/_variables.scss +127 -2
  196. package/src/scss/component/input-group/_defaults.scss +10 -3
  197. package/src/scss/component/input-group/_index.scss +72 -4
  198. package/src/scss/component/input-group/_variables.scss +37 -0
  199. package/src/scss/component/list/_defaults.scss +35 -2
  200. package/src/scss/component/list/_index.scss +159 -5
  201. package/src/scss/component/list/_variables.scss +152 -0
  202. package/src/scss/component/menu/_defaults.scss +49 -7
  203. package/src/scss/component/menu/_index.scss +325 -99
  204. package/src/scss/component/menu/_variables.scss +484 -1
  205. package/src/scss/component/navigation/_defaults.scss +45 -3
  206. package/src/scss/component/navigation/_index.scss +249 -98
  207. package/src/scss/component/navigation/_variables.scss +334 -5
  208. package/src/scss/component/tabs/_defaults.scss +82 -0
  209. package/src/scss/component/tabs/_index.scss +497 -0
  210. package/src/scss/component/tabs/_variables.scss +974 -0
  211. package/src/scss/layout/columns/_defaults.scss +5 -3
  212. package/src/scss/layout/columns/_index.scss +27 -21
  213. package/src/scss/layout/columns/_variables.scss +13 -0
  214. package/src/scss/layout/container/_defaults.scss +28 -11
  215. package/src/scss/layout/container/_index.scss +305 -161
  216. package/src/scss/layout/container/_variables.scss +148 -15
  217. package/src/scss/layout/flex-columns/_defaults.scss +5 -3
  218. package/src/scss/layout/flex-columns/_index.scss +28 -20
  219. package/src/scss/layout/flex-columns/_variables.scss +9 -0
  220. package/src/scss/mixins/_state.scss +37 -0
  221. package/src/scss/mixins/_theme.scss +36 -1
  222. package/src/scss/state/focus/_index.scss +17 -12
  223. package/src/scss/state/focus/_variables.scss +30 -4
  224. package/src/scss/theme/color/_defaults.scss +6 -35
  225. package/src/scss/theme/color/_index.scss +167 -1
  226. package/src/scss/theme/color/_variables.scss +155 -0
  227. package/src/scss/theme/typography/_defaults.scss +26 -19
  228. package/src/scss/theme/typography/_index.scss +176 -20
  229. package/src/scss/theme/typography/_variables.scss +186 -0
  230. package/src/scss/utilities/_template/_index.scss +0 -1
  231. package/src/scss/utilities/alignment/_defaults.scss +0 -33
  232. package/src/scss/utilities/alignment/_index.scss +24 -25
  233. package/src/scss/utilities/background/_defaults.scss +0 -77
  234. package/src/scss/utilities/background/_index.scss +32 -37
  235. package/src/scss/utilities/border/_defaults.scss +0 -33
  236. package/src/scss/utilities/border/_index.scss +25 -26
  237. package/src/scss/utilities/color/_defaults.scss +0 -19
  238. package/src/scss/utilities/color/_index.scss +22 -22
  239. package/src/scss/utilities/container/_defaults.scss +0 -11
  240. package/src/scss/utilities/container/_index.scss +20 -19
  241. package/src/scss/utilities/display/_defaults.scss +0 -11
  242. package/src/scss/utilities/display/_index.scss +20 -19
  243. package/src/scss/utilities/flex/_defaults.scss +0 -55
  244. package/src/scss/utilities/flex/_index.scss +28 -31
  245. package/src/scss/utilities/gradient/_defaults.scss +0 -28
  246. package/src/scss/utilities/gradient/_index.scss +27 -28
  247. package/src/scss/utilities/gradient/_variables.scss +15 -0
  248. package/src/scss/utilities/height/_defaults.scss +0 -8
  249. package/src/scss/utilities/height/_index.scss +22 -21
  250. package/src/scss/utilities/inset/_defaults.scss +0 -16
  251. package/src/scss/utilities/inset/_index.scss +20 -20
  252. package/src/scss/utilities/justification/_defaults.scss +0 -33
  253. package/src/scss/utilities/justification/_index.scss +24 -25
  254. package/src/scss/utilities/list/_defaults.scss +0 -22
  255. package/src/scss/utilities/list/_index.scss +22 -22
  256. package/src/scss/utilities/order/_defaults.scss +0 -8
  257. package/src/scss/utilities/order/_index.scss +20 -19
  258. package/src/scss/utilities/position/_defaults.scss +0 -11
  259. package/src/scss/utilities/position/_index.scss +20 -19
  260. package/src/scss/utilities/ratio/_defaults.scss +0 -8
  261. package/src/scss/utilities/ratio/_index.scss +22 -21
  262. package/src/scss/utilities/ratio/_variables.scss +6 -0
  263. package/src/scss/utilities/spacing/_defaults.scss +0 -11
  264. package/src/scss/utilities/spacing/_index.scss +18 -17
  265. package/src/scss/utilities/typography/_defaults.scss +0 -22
  266. package/src/scss/utilities/typography/_index.scss +27 -26
  267. package/src/scss/utilities/visibility/_defaults.scss +0 -11
  268. package/src/scss/utilities/visibility/_index.scss +19 -18
  269. package/src/scss/utilities/visually-hidden/_index.scss +19 -17
  270. package/src/scss/utilities/width/_defaults.scss +0 -8
  271. package/src/scss/utilities/width/_index.scss +21 -20
  272. package/src/scss/utilities/z-index/_defaults.scss +0 -11
  273. package/src/scss/utilities/z-index/_index.scss +19 -18
@@ -6,20 +6,43 @@
6
6
  // They should not be used to define direct property values (i.e. font-size, color, etc.).
7
7
  // Those should be defined as custom properties in the `_variables.scss` file.
8
8
 
9
+ @use "../../defaults" as root-defaults;
10
+ @use "../../functions/theme";
11
+ @use "sass:map";
12
+
9
13
  // Card selectors.
10
- $card-selector: ".card" !default;
11
- $card-image-selector: ".card-image" !default;
12
- $card-content-selector: ".card-content" !default;
13
- $card-body-selector: ".card-body" !default;
14
- $card-header-selector: ".card-header" !default;
15
- $card-footer-selector: ".card-footer" !default;
16
- $card-title-selector: ".card-title" !default;
17
- $horizontal-card-selector: ".horizontal" !default;
18
- $horizontal-card-left-selector: ".left" !default;
19
- $horizontal-card-right-selector: ".right" !default;
20
- $vertical-card-top-selector: ".top" !default;
21
- $vertical-card-bottom-selector: ".bottom" !default;
22
- $inverse-card-selector: ".inverse" !default;
14
+ $selector-base: root-defaults.$component-selector-base !default;
15
+ $modifier-selector-base: root-defaults.$modifier-selector-base !default;
16
+ $generate-base-theme-map: root-defaults.$generate-base-theme-maps !default;
17
+ $themeable: false !default;
18
+ $card-selector-base: $selector-base !default;
19
+ $card-selector: "card" !default;
20
+ $card-theme-selector-base: $modifier-selector-base !default;
21
+ $card-theme-selector-prefix: "" !default;
22
+ $card-image-selector-base: $selector-base !default;
23
+ $card-image-selector: "card-image" !default;
24
+ $card-content-selector-base: $selector-base !default;
25
+ $card-content-selector: "card-content" !default;
26
+ $card-body-selector-base: $selector-base !default;
27
+ $card-body-selector: "card-body" !default;
28
+ $card-header-selector-base: $selector-base !default;
29
+ $card-header-selector: "card-header" !default;
30
+ $card-footer-selector-base: $selector-base !default;
31
+ $card-footer-selector: "card-footer" !default;
32
+ $card-title-selector-base: $selector-base !default;
33
+ $card-title-selector: "card-title" !default;
34
+ $horizontal-card-selector-base: $modifier-selector-base !default;
35
+ $horizontal-card-selector: "horizontal" !default;
36
+ $horizontal-card-left-selector-base: $modifier-selector-base !default;
37
+ $horizontal-card-left-selector: "left" !default;
38
+ $horizontal-card-right-selector-base: $modifier-selector-base !default;
39
+ $horizontal-card-right-selector: "right" !default;
40
+ $vertical-card-top-selector-base: $modifier-selector-base !default;
41
+ $vertical-card-top-selector: "top" !default;
42
+ $vertical-card-bottom-selector-base: $modifier-selector-base !default;
43
+ $vertical-card-bottom-selector: "bottom" !default;
44
+ $inverse-card-selector-base: $modifier-selector-base !default;
45
+ $inverse-card-selector: "inverse" !default;
23
46
 
24
47
  // Card properties.
25
48
  $card-transform: none !default;
@@ -30,3 +53,31 @@ $card-content-ratio: 1fr !default;
30
53
  $card-image-ratio: auto !default;
31
54
  $horizontal-card-content-ratio: 3fr !default;
32
55
  $horizontal-card-image-ratio: 2fr !default;
56
+
57
+ // Card transform properties.
58
+ $card-item-content-transform: translateY(-100%) !default;
59
+ $card-item-content-open-transform: translateY(0) !default;
60
+
61
+ // Card state theme defaults.
62
+ // This map is used to define the default colour shades for the
63
+ // themed card bases.
64
+ //
65
+ // e.g.
66
+ // Primary cards will use primary--900 as the text colour and primary--800 as the title colour.
67
+ //
68
+ // Secondary/tertiary cards will use the same shade for their respective colours.
69
+ $-card-theme-mappings: (
70
+ color: 900,
71
+ title-color: 700,
72
+ border-color: 700,
73
+ );
74
+ $card-theme-mappings: () !default;
75
+
76
+ // Merge the custom card state theme map with the default one.
77
+ @if $generate-base-theme-map {
78
+ $card-theme-mappings: map.merge($-card-theme-mappings, $card-theme-mappings);
79
+ }
80
+
81
+ $-card-theme-map: theme.generate-property-map($card-theme-mappings);
82
+ $card-theme-map: () !default;
83
+ $card-theme-map: map.deep-merge($-card-theme-map, $card-theme-map);
@@ -1,14 +1,226 @@
1
1
  // @graupl/core card component styles.
2
+ //
3
+ // This module provides the card component styles for vertical and horizontal layouts.
4
+ //
5
+ // The following selectors are generated by default:
6
+ // - `.card`: The card container.
7
+ // - `.card-image`: The card image wrapper.
8
+ // - `.card-content`: The card content wrapper.
9
+ // - `.card-body`: The main body region.
10
+ // - `.card-header`: The header region.
11
+ // - `.card-footer`: The footer region.
12
+ // - `.card-title`: The title element.
13
+ // - `.horizontal`: A modifier to use a horizontal layout for the card.
14
+ // - `.left`: A modifier to position the image on the left in a horizontal layout.
15
+ // - `.right`: A modifier to position the image on the right in a horizontal layout.
16
+ // - `.top`: A modifier to position the image on the top in a vertical layout.
17
+ // - `.bottom`: A modifier to position the image on the bottom in a vertical layout.
18
+ // - `.inverse`: A modifier to invert the image/content positioning.
19
+ //
20
+ // The following custom properties can be used to customize the card component:
21
+ // | Property | Description | Default Value |
22
+ // | --- | --- | --- |
23
+ // | `--graupl-card-padding-x` | Horizontal padding of the card. | `var(--graupl-spacer-0)` |
24
+ // | `--graupl-card-padding-y` | Vertical padding of the card. | `var(--graupl-spacer-0)` |
25
+ // | `--graupl-card-padding` | Shorthand padding of the card. | `var(--graupl-card-padding-y) var(--graupl-card-padding-x)` |
26
+ // | `--graupl-card-transition` | Transition applied to the card. | `transform var(--graupl-transition-duration-fast) var(--graupl-transition-timing-function)` |
27
+ // | `--graupl-card-transition-reduced-motion` | Transition when reduced motion is enabled. | `none` |
28
+ // | `--graupl-card-transform` | Base transform for the card. | `none` |
29
+ // | `--graupl-card-hover-transform` | Transform for hovered cards. | `none` |
30
+ // | `--graupl-card-column-gap` | Column gap inside the card. | `var(--graupl-spacer-0)` |
31
+ // | `--graupl-card-row-gap` | Row gap inside the card. | `var(--graupl-spacer-0)` |
32
+ // | `--graupl-card-gap` | Gap inside the card (column/row). | `var(--graupl-card-column-gap) var(--graupl-card-row-gap)` |
33
+ // | `--graupl-card-background` | Background colour of the card. | `var(--graupl-background)` |
34
+ // | `--graupl-card-color` | Text colour of the card. | `var(--graupl-color)` |
35
+ // | `--graupl-card-border-width` | Border width of the card. | `var(--graupl-border-top-width) var(--graupl-border-right-width) var(--graupl-border-bottom-width) var(--graupl-border-left-width)` |
36
+ // | `--graupl-card-border-style` | Border style of the card. | `var(--graupl-border-top-style) var(--graupl-border-right-style) var(--graupl-border-bottom-style) var(--graupl-border-left-style)` |
37
+ // | `--graupl-card-border-radius` | Border radius of the card. | `var(--graupl-border-top-left-radius) var(--graupl-border-top-right-radius) var(--graupl-border-bottom-right-radius) var(--graupl-border-bottom-left-radius)` |
38
+ // | `--graupl-card-border-color` | Border colour of the card. | `var(--graupl-card-color)` |
39
+ // | `--graupl-card-content-ratio` | Grid row ratio used for card content. | `1fr` |
40
+ // | `--graupl-card-image-ratio` | Grid row ratio used for card images. | `auto` |
41
+ // | `--graupl-horizontal-card-content-ratio` | Grid column ratio for horizontal cards (content area). | `3fr` |
42
+ // | `--graupl-horizontal-card-image-ratio` | Grid column ratio for horizontal cards (image area). | `2fr` |
43
+ // | `--graupl-card-image-padding` | Padding for the card image wrapper. | `var(--graupl-spacer-0) var(--graupl-spacer-0)` |
44
+ // | `--graupl-card-content-padding` | Padding for the card content wrapper. | `var(--graupl-spacer-3) var(--graupl-spacer-5)` |
45
+ // | `--graupl-card-content-gap` | Gap inside the card content (column/row). | `var(--graupl-card-content-column-gap) var(--graupl-card-content-row-gap)` |
46
+ // | `--graupl-card-title-color` | Text colour of the card title. | `var(--graupl-card-color)` |
47
+ // | `--graupl-card-title-font-size` | Font size of the card title. | `var(--graupl-h4)` |
48
+ // | `--graupl-card-title-font-weight` | Font weight of the card title. | `var(--graupl-font-weight-h4)` |
49
+ // | `--graupl-card-title-font-family` | Font family of the card title. | `var(--graupl-font-family-h4)` |
50
+ // | `--graupl-card-title-line-height` | Line height of the card title. | `var(--graupl-line-height-h4)` |
51
+ //
52
+ // The following sass variables can be used to customize the generation of the card component:
53
+ // | Variable | Description | Default Value |
54
+ // | --- | --- | --- |
55
+ // | `$selector-base` | Selector base for the component. | `"."` |
56
+ // | `$modifier-selector-base` | Selector base for component modifiers. | `"."` |
57
+ // | `$generate-base-theme-map` | A flag to generate the base theme maps for accordion variants. | `true` |
58
+ // | `$themeable` | Flag to generate theme modifiers. | `false` |
59
+ // | `$card-selector-base` | Selector base for the card container. | `$selector-base` |
60
+ // | `$card-selector` | Selector for the card container. | `"card"` |
61
+ // | `$card-image-selector-base` | Selector base for the image wrapper. | `$selector-base` |
62
+ // | `$card-image-selector` | Selector for the image wrapper. | `"card-image"` |
63
+ // | `$card-content-selector-base` | Selector base for the content wrapper. | `$selector-base` |
64
+ // | `$card-content-selector` | Selector for the content wrapper. | `"card-content"` |
65
+ // | `$card-body-selector-base` | Selector base for the body region. | `$selector-base` |
66
+ // | `$card-body-selector` | Selector for the body region. | `"card-body"` |
67
+ // | `$card-header-selector-base` | Selector base for the header region. | `$selector-base` |
68
+ // | `$card-header-selector` | Selector for the header region. | `"card-header"` |
69
+ // | `$card-footer-selector-base` | Selector base for the footer region. | `$selector-base` |
70
+ // | `$card-footer-selector` | Selector for the footer region. | `"card-footer"` |
71
+ // | `$card-title-selector-base` | Selector base for the title element. | `$selector-base` |
72
+ // | `$card-title-selector` | Selector for the title element. | `"card-title"` |
73
+ // | `$horizontal-card-selector-base` | Selector base for horizontal layout modifier. | `"."` |
74
+ // | `$horizontal-card-selector` | Selector for horizontal layout modifier. | `"horizontal"` |
75
+ // | `$horizontal-card-left-selector-base` | Selector base for left modifier. | `"."` |
76
+ // | `$horizontal-card-left-selector` | Selector for left modifier. | `"left"` |
77
+ // | `$horizontal-card-right-selector-base` | Selector base for right modifier. | `"."` |
78
+ // | `$horizontal-card-right-selector` | Selector for right modifier. | `"right"` |
79
+ // | `$vertical-card-top-selector-base` | Selector base for top modifier. | `"."` |
80
+ // | `$vertical-card-top-selector` | Selector for top modifier. | `"top"` |
81
+ // | `$vertical-card-bottom-selector-base` | Selector base for bottom modifier. | `"."` |
82
+ // | `$vertical-card-bottom-selector` | Selector for bottom modifier. | `"bottom"` |
83
+ // | `$inverse-card-selector-base` | Selector base for inverse layout modifier. | `"."` |
84
+ // | `$inverse-card-selector` | Selector for inverse layout modifier. | `"inverse"` |
85
+ // | `$card-transform` | Base transform for the card. | `none` |
86
+ // | `$card-hover-transform` | Hover transform for the card. | `none` |
87
+ // | `$card-content-ratio` | Grid ratio for content rows. | `1fr` |
88
+ // | `$card-image-ratio` | Grid ratio for image rows. | `auto` |
89
+ // | `$horizontal-card-content-ratio` | Grid ratio for content in horizontal layout. | `3fr` |
90
+ // | `$horizontal-card-image-ratio` | Grid ratio for images in horizontal layout. | `2fr` |
91
+ // | `$card-theme-mappings` | A map of properties and color shades used generate all card variants. | `()` |
92
+ // | `$card-theme-map` | A map of all properties, colors, and color shades used to generate all card variants. | `()` |
93
+ //
94
+ // ## Using `$card-theme-mappings`
95
+ //
96
+ // `$card-theme-mappings` is a 1-level map of properties and shade values.
97
+ //
98
+ // e.g.
99
+ // ```scss
100
+ // $card-theme-mappings: (
101
+ // border-color: 700,
102
+ // )
103
+ // ```
104
+ //
105
+ // This directly[1] maps to all card variants, telling them what shade to use for said property.
106
+ // All card variants will use the following based on the example above:
107
+ // - Primary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--primary--700`,
108
+ // - Secondary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--secondary--700`, and
109
+ // - Tertiary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--tertiary--700`.
110
+ //
111
+ // You can use this to customize _all_ cards variants in the same way.
112
+ //
113
+ // For example, if you use the following map:
114
+ // ```scss
115
+ // $card-theme-mappings: (
116
+ // border-color: 500,
117
+ // )
118
+ // ```
119
+ //
120
+ // All card variants will use the following:
121
+ // - Primary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--primary--500`,
122
+ // - Secondary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--secondary--500`, and
123
+ // - Tertiary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--tertiary--500`.
124
+ //
125
+ // [1] `$card-theme-mappings` gets parsed into a larger, more explicit map: `$card-theme-map`.
126
+ //
127
+ // Using `$card-theme-map`
128
+ //
129
+ // `$card-theme-map` is a multi-level map of properties, colors, and shade values.
130
+ //
131
+ // e.g.
132
+ // ```scss
133
+ // $card-theme-map: (
134
+ // primary: (
135
+ // border-color: (
136
+ // color: primary,
137
+ // shade: 700
138
+ // ),
139
+ // ),
140
+ // secondary: (
141
+ // border-color: (
142
+ // color: secondary,
143
+ // shade: 700
144
+ // ),
145
+ // ),
146
+ // tertiary: (
147
+ // border-color: (
148
+ // color: tertiary,
149
+ // shade: 700
150
+ // ),
151
+ // ),
152
+ // )
153
+ // ```
154
+ //
155
+ // This directly maps to all card variants, telling them what shade to use for said property.
156
+ // The card variants will use the following based on the example above:
157
+ // - Primary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--primary--700`,
158
+ // - Secondary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--secondary--700`, and
159
+ // - Tertiary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--tertiary--700`.
160
+ //
161
+ // You can use this to customize card variants individually.
162
+ //
163
+ // For example, if you use the following map:
164
+ //
165
+ // ```scss
166
+ // $card-theme-map: (
167
+ // primary: (
168
+ // border-color: (
169
+ // color: secondary,
170
+ // shade: 700
171
+ // ),
172
+ // ),
173
+ // secondary: (
174
+ // border-color: (
175
+ // color: secondary,
176
+ // shade: 700
177
+ // ),
178
+ // ),
179
+ // tertiary: (
180
+ // border-color: (
181
+ // color: secondary,
182
+ // shade: 700
183
+ // ),
184
+ // ),
185
+ // )
186
+ // ```
187
+ //
188
+ // The card variants will use the following:
189
+ // - Primary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--secondary--700`,
190
+ // - Secondary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--secondary--700`, and
191
+ // - Tertiary cards will have their `--graupl-card-border-color` property set to `--graupl-theme-active--secondary--700`.
192
+ //
193
+ // @example
194
+ // <div class="card">
195
+ // <div class="card-image"><img src="https://picsum.photos/600/400" alt="Card image" /></div>
196
+ // <div class="card-content">
197
+ // <div class="card-header"><h3 class="card-title">Card Title</h3></div>
198
+ // <div class="card-body"><p>This is some text that describes the card.</p></div>
199
+ // <div class="card-footer"><a class="card stretched" href="#">Card Action</a></div>
200
+ // </div>
201
+ // </div>
202
+ //
203
+ // @example
204
+ // <div class="card horizontal right">
205
+ // <div class="card-image"><img src="https://picsum.photos/600/400" alt="Card image" /></div>
206
+ // <div class="card-content">
207
+ // <div class="card-header"><h3 class="card-title">Card Title</h3></div>
208
+ // <div class="card-body"><p>This is some text that describes the card.</p></div>
209
+ // <div class="card-footer"><a class="card stretched" href="#">Card Action</a></div>
210
+ // </div>
211
+ // </div>
2
212
 
3
213
  @use "defaults";
4
214
  @use "variables" as *;
5
215
  @use "../../defaults" as root-defaults;
6
216
  @use "../../mixins/layer" as *;
217
+ @use "../../mixins/theme";
7
218
  @use "../../mixins/animation";
8
219
  @use "../../mixins/container";
9
220
 
10
221
  @include layer(component) {
11
- #{defaults.$card-selector} {
222
+ // .card
223
+ #{defaults.$card-selector-base}#{defaults.$card-selector} {
12
224
  display: grid;
13
225
  position: relative;
14
226
  grid-template-columns: [image-start content-start] 1fr [image-end content-end];
@@ -21,8 +233,9 @@
21
233
  gap: $card-gap;
22
234
  isolation: isolate;
23
235
 
236
+ // &, &.top
24
237
  &,
25
- &#{defaults.$vertical-card-top-selector} {
238
+ &#{defaults.$vertical-card-top-selector-base}#{defaults.$vertical-card-top-selector} {
26
239
  grid-template-rows:
27
240
  [image-start]
28
241
  $card-image-ratio
@@ -31,8 +244,9 @@
31
244
  [content-end];
32
245
  }
33
246
 
34
- &#{defaults.$vertical-card-bottom-selector},
35
- &#{defaults.$inverse-card-selector} {
247
+ // &.bottom, &.inverse
248
+ &#{defaults.$vertical-card-bottom-selector-base}#{defaults.$vertical-card-bottom-selector},
249
+ &#{defaults.$inverse-card-selector-base}#{defaults.$inverse-card-selector} {
36
250
  grid-template-rows:
37
251
  [content-start]
38
252
  $card-content-ratio
@@ -45,9 +259,11 @@
45
259
  --#{root-defaults.$prefix}card-transform: #{$card-hover-transform};
46
260
  }
47
261
 
48
- &#{defaults.$horizontal-card-selector} {
262
+ // &.horizontal
263
+ &#{defaults.$horizontal-card-selector-base}#{defaults.$horizontal-card-selector} {
264
+ // &, &.left
49
265
  &,
50
- &#{defaults.$horizontal-card-left-selector} {
266
+ &#{defaults.$horizontal-card-left-selector-base}#{defaults.$horizontal-card-left-selector} {
51
267
  --#{root-defaults.$prefix}card-content-ratio: #{$horizontal-card-content-ratio};
52
268
  --#{root-defaults.$prefix}card-image-ratio: #{$horizontal-card-image-ratio};
53
269
 
@@ -59,7 +275,9 @@
59
275
  [content-end];
60
276
  grid-template-rows: [image-start content-start] 1fr [image-end content-end];
61
277
 
62
- #{defaults.$card-image-selector} img {
278
+ // .card-image
279
+ #{defaults.$card-image-selector-base}#{defaults.$card-image-selector}
280
+ img {
63
281
  border-radius: calc(
64
282
  $card-border-top-left-radius - min(
65
283
  $card-border-top-width,
@@ -76,8 +294,9 @@
76
294
  }
77
295
  }
78
296
 
79
- &#{defaults.$horizontal-card-right-selector},
80
- &#{defaults.$inverse-card-selector} {
297
+ // &.right, &.inverse
298
+ &#{defaults.$horizontal-card-right-selector-base}#{defaults.$horizontal-card-right-selector},
299
+ &#{defaults.$inverse-card-selector-base}#{defaults.$inverse-card-selector} {
81
300
  grid-template-columns:
82
301
  [content-start]
83
302
  $card-content-ratio
@@ -85,7 +304,9 @@
85
304
  $card-image-ratio
86
305
  [image-end];
87
306
 
88
- #{defaults.$card-image-selector} img {
307
+ // .card-image
308
+ #{defaults.$card-image-selector-base}#{defaults.$card-image-selector}
309
+ img {
89
310
  border-radius: 0
90
311
  calc(
91
312
  $card-border-top-right-radius - min(
@@ -105,7 +326,8 @@
105
326
  }
106
327
  }
107
328
 
108
- #{defaults.$card-image-selector} {
329
+ // .card-image
330
+ #{defaults.$card-image-selector-base}#{defaults.$card-image-selector} {
109
331
  grid-area: image;
110
332
  padding: $card-image-padding;
111
333
 
@@ -129,7 +351,8 @@
129
351
  }
130
352
  }
131
353
 
132
- #{defaults.$card-content-selector} {
354
+ // .card-content
355
+ #{defaults.$card-content-selector-base}#{defaults.$card-content-selector} {
133
356
  display: flex;
134
357
  grid-area: content;
135
358
  flex-direction: column;
@@ -137,37 +360,44 @@
137
360
  gap: $card-content-gap;
138
361
  }
139
362
 
140
- #{defaults.$card-body-selector} {
363
+ // .card-body
364
+ #{defaults.$card-body-selector-base}#{defaults.$card-body-selector} {
141
365
  flex: 1 0 auto;
142
366
  }
143
367
 
144
- #{defaults.$card-footer-selector} {
368
+ // .card-footer
369
+ #{defaults.$card-footer-selector-base}#{defaults.$card-footer-selector} {
145
370
  flex: 0 0 auto;
146
371
  }
147
372
 
148
- #{defaults.$card-title-selector} {
373
+ // .card-title
374
+ #{defaults.$card-title-selector-base}#{defaults.$card-title-selector} {
149
375
  flex: 0 0 auto;
150
376
  }
151
377
 
152
378
  @include container.trigger(force-vertical-card) {
153
- #{defaults.$card-selector} {
154
- &#{defaults.$horizontal-card-selector} {
379
+ // .card
380
+ #{defaults.$card-selector-base}#{defaults.$card-selector} {
381
+ // .horizontal
382
+ &#{defaults.$horizontal-card-selector-base}#{defaults.$horizontal-card-selector} {
383
+ // &, &.left, &.top, &.right, &.bottom, &.inverse
155
384
  &,
156
- &#{defaults.$horizontal-card-left-selector},
157
- &#{defaults.$vertical-card-top-selector},
158
- &#{defaults.$horizontal-card-right-selector},
159
- &#{defaults.$vertical-card-bottom-selector},
160
- &#{defaults.$inverse-card-selector} {
385
+ &#{defaults.$horizontal-card-left-selector-base}#{defaults.$horizontal-card-left-selector},
386
+ &#{defaults.$vertical-card-top-selector-base}#{defaults.$vertical-card-top-selector},
387
+ &#{defaults.$horizontal-card-right-selector-base}#{defaults.$horizontal-card-right-selector},
388
+ &#{defaults.$vertical-card-bottom-selector-base}#{defaults.$vertical-card-bottom-selector},
389
+ &#{defaults.$inverse-card-selector-base}#{defaults.$inverse-card-selector} {
161
390
  --#{root-defaults.$prefix}horizontal-card-image-ratio: #{defaults.$card-image-ratio};
162
391
  --#{root-defaults.$prefix}horizontal-card-content-ratio: #{defaults.$card-content-ratio};
163
392
 
164
393
  grid-template-columns: [image-start content-start] 1fr [image-end content-end];
165
394
  }
166
395
 
396
+ // &, &.left, &.top
167
397
  &,
168
- &#{defaults.$horizontal-card-left-selector},
169
- &#{defaults.$horizontal-card-right-selector},
170
- &#{defaults.$vertical-card-top-selector} {
398
+ &#{defaults.$horizontal-card-left-selector-base}#{defaults.$horizontal-card-left-selector},
399
+ &#{defaults.$horizontal-card-right-selector-base}#{defaults.$horizontal-card-right-selector},
400
+ &#{defaults.$vertical-card-top-selector-base}#{defaults.$vertical-card-top-selector} {
171
401
  grid-template-rows:
172
402
  [image-start]
173
403
  $card-image-ratio
@@ -176,8 +406,9 @@
176
406
  [content-end];
177
407
  }
178
408
 
179
- &#{defaults.$vertical-card-bottom-selector},
180
- &#{defaults.$inverse-card-selector} {
409
+ // &.bottom, &.inverse
410
+ &#{defaults.$vertical-card-bottom-selector-base}#{defaults.$vertical-card-bottom-selector},
411
+ &#{defaults.$inverse-card-selector-base}#{defaults.$inverse-card-selector} {
181
412
  grid-template-rows:
182
413
  [content-start]
183
414
  $card-content-ratio
@@ -190,20 +421,35 @@
190
421
  }
191
422
 
192
423
  @include animation.off {
193
- #{defaults.$card-selector} {
424
+ // .card
425
+ #{#{defaults.$card-selector-base}}#{defaults.$card-selector} {
194
426
  --#{root-defaults.$prefix}card-transition: #{$card-transition-reduced-motion};
195
427
  }
196
428
  }
197
429
  }
198
430
 
199
431
  @include layer(theme) {
200
- #{defaults.$card-selector} {
432
+ // .card
433
+ #{#{defaults.$card-selector-base}}#{defaults.$card-selector} {
434
+ --#{root-defaults.$prefix}color: #{$card-color};
435
+ --#{root-defaults.$prefix}background: #{$card-background};
436
+
201
437
  border-color: $card-border-color;
202
438
  background: $card-background;
203
439
  color: $card-color;
440
+
441
+ @if root-defaults.$themeable-components and defaults.$themeable {
442
+ @include theme.generate-modifiers(
443
+ defaults.$card-theme-map,
444
+ defaults.$card-theme-selector-base,
445
+ defaults.$card-theme-selector-prefix,
446
+ "card-"
447
+ );
448
+ }
204
449
  }
205
450
 
206
- #{defaults.$card-title-selector} {
451
+ // .card-title
452
+ #{defaults.$card-title-selector-base}#{defaults.$card-title-selector} {
207
453
  color: $card-title-color;
208
454
  font-size: $card-title-font-size;
209
455
  font-weight: $card-title-font-weight;