@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,10 +6,23 @@
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
  // Navigation selectors.
10
- $navigation-selector: ".navigation" !default;
11
- $navigation-toggle-selector: ".navigation-toggle" !default;
12
- $navigation-branding-selector: ".navigation-branding" !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
+ $navigation-selector-base: $selector-base !default;
19
+ $navigation-selector: "navigation" !default;
20
+ $navigation-theme-selector-base: $modifier-selector-base !default;
21
+ $navigation-theme-selector-prefix: "" !default;
22
+ $navigation-toggle-selector-base: $selector-base !default;
23
+ $navigation-toggle-selector: "navigation-toggle" !default;
24
+ $navigation-branding-selector-base: $selector-base !default;
25
+ $navigation-branding-selector: "navigation-branding" !default;
13
26
 
14
27
  // Navigation toggle properties.
15
28
  $navigation-toggle-content: "'☰'" !default;
@@ -21,3 +34,32 @@ $navigation-branding-disabled-text-decoration: $navigation-branding-initial-text
21
34
  $navigation-branding-initial-text-decoration-style: solid !default;
22
35
  $navigation-branding-final-text-decoration-style: $navigation-branding-initial-text-decoration-style !default;
23
36
  $navigation-branding-disabled-text-decoration-style: $navigation-branding-initial-text-decoration-style !default;
37
+
38
+ // Navigation state theme defaults.
39
+ // This map is used to define the default colour shades for the
40
+ // themed navigation bases.
41
+ //
42
+ // e.g.
43
+ // Primary navigations will use primary--900 as the text colour and primary--700 as the border colour.
44
+ //
45
+ // Secondary/tertiary navigations will use the same shade for their respective colours.
46
+ $-navigation-theme-mappings: (
47
+ color: 900,
48
+ background: 100,
49
+ );
50
+ $navigation-theme-mappings: () !default;
51
+
52
+ // Merge the custom navigation state theme map with the default one.
53
+ @if $generate-base-theme-map {
54
+ $navigation-theme-mappings: map.merge(
55
+ $-navigation-theme-mappings,
56
+ $navigation-theme-mappings
57
+ );
58
+ }
59
+
60
+ $-navigation-theme-map: theme.generate-property-map($navigation-theme-mappings);
61
+ $navigation-theme-map: () !default;
62
+ $navigation-theme-map: map.deep-merge(
63
+ $-navigation-theme-map,
64
+ $navigation-theme-map
65
+ );
@@ -1,16 +1,200 @@
1
1
  // @graupl/core navigation component styles.
2
+ //
3
+ // This module provides the navigation bar styles and its toggle/branding elements.
4
+ //
5
+ // The following selectors are generated by default:
6
+ // - `.navigation`: The navigation container.
7
+ // - `.navigation-toggle`: The navigation toggle control.
8
+ // - `.navigation-branding`: The branding link/label.
9
+ //
10
+ // The following custom properties can be used to customize the navigation component:
11
+ // | Property | Description | Default Value |
12
+ // | ----------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
13
+ // | `--graupl-navigation-background` | Background colour of the navigation bar. | `var(--graupl-background)` |
14
+ // | `--graupl-navigation-color` | Text colour of the navigation bar. | `var(--graupl-color)` |
15
+ // | `--graupl-navigation-toggle-min-width` | Minimum width of the toggle control. | `44px` |
16
+ // | `--graupl-navigation-toggle-min-height` | Minimum height of the toggle control. | `44px` |
17
+ // | `--graupl-navigation-toggle-padding-x` | Horizontal padding inside the toggle. | `var(--graupl-spacer-5)` |
18
+ // | `--graupl-navigation-toggle-padding-y` | Vertical padding inside the toggle. | `var(--graupl-spacer-3)` |
19
+ // | `--graupl-navigation-toggle-padding` | Shorthand padding for the toggle. | `var(--graupl-navigation-toggle-padding-y) var(--graupl-navigation-toggle-padding-x)` |
20
+ // | `--graupl-navigation-toggle-background` | Background colour of the toggle. | `var(--graupl-navigation-background)` |
21
+ // | `--graupl-navigation-toggle-visited-background` | Background when the toggle is visited. | `var(--graupl-navigation-toggle-background)` |
22
+ // | `--graupl-navigation-toggle-focus-background` | Background when the toggle is focused. | `var(--graupl-navigation-toggle-background)` |
23
+ // | `--graupl-navigation-toggle-hover-background` | Background when the toggle is hovered. | `var(--graupl-navigation-color)` |
24
+ // | `--graupl-navigation-toggle-active-background` | Background when the toggle is active. | `var(--graupl-navigation-toggle-hover-background)` |
25
+ // | `--graupl-navigation-toggle-disabled-background` | Background when the toggle is disabled. | `var(--graupl-navigation-background)` |
26
+ // | `--graupl-navigation-toggle-color` | Text colour of the toggle. | `var(--graupl-navigation-color)` |
27
+ // | `--graupl-navigation-toggle-visited-color` | Text colour of a visited toggle. | `var(--graupl-navigation-background)` |
28
+ // | `--graupl-navigation-toggle-focus-color` | Text colour of a focused toggle. | `var(--graupl-navigation-background)` |
29
+ // | `--graupl-navigation-toggle-hover-color` | Text colour of a hovered toggle. | `var(--graupl-navigation-background)` |
30
+ // | `--graupl-navigation-toggle-active-color` | Text colour of an active toggle. | `var(--graupl-navigation-background)` |
31
+ // | `--graupl-navigation-toggle-disabled-color` | Text colour of a disabled toggle. | `var(--graupl-theme-active--primary--200)` |
32
+ // | `--graupl-navigation-toggle-border-top-width` | Top border width of the toggle. | `var(--graupl-border-top-width)` |
33
+ // | `--graupl-navigation-toggle-border-right-width` | Right border width of the toggle. | `var(--graupl-border-right-width)` |
34
+ // | `--graupl-navigation-toggle-border-bottom-width` | Bottom border width of the toggle. | `var(--graupl-border-bottom-width)` |
35
+ // | `--graupl-navigation-toggle-border-left-width` | Left border width of the toggle. | `var(--graupl-border-left-width)` |
36
+ // | `--graupl-navigation-toggle-border-width` | Border width shorthand for the toggle. | `var(--graupl-navigation-toggle-border-top-width) var(--graupl-navigation-toggle-border-right-width) var(--graupl-navigation-toggle-border-bottom-width) var(--graupl-navigation-toggle-border-left-width)` |
37
+ // | `--graupl-navigation-toggle-border-top-style` | Top border style of the toggle. | `var(--graupl-border-top-style)` |
38
+ // | `--graupl-navigation-toggle-border-right-style` | Right border style of the toggle. | `var(--graupl-border-right-style)` |
39
+ // | `--graupl-navigation-toggle-border-bottom-style` | Bottom border style of the toggle. | `var(--graupl-border-bottom-style)` |
40
+ // | `--graupl-navigation-toggle-border-left-style` | Left border style of the toggle. | `var(--graupl-border-left-style)` |
41
+ // | `--graupl-navigation-toggle-border-style` | Border style shorthand for the toggle. | `var(--graupl-navigation-toggle-border-top-style) var(--graupl-navigation-toggle-border-right-style) var(--graupl-navigation-toggle-border-bottom-style) var(--graupl-navigation-toggle-border-left-style)` |
42
+ // | `--graupl-navigation-toggle-border-color` | Base border colour of the toggle. | `var(--graupl-navigation-toggle-color)` |
43
+ // | `--graupl-navigation-toggle-visited-border-color` | Border colour of a visited toggle. | `var(--graupl-navigation-toggle-border-color)` |
44
+ // | `--graupl-navigation-toggle-focus-border-color` | Border colour of a focused toggle. | `var(--graupl-navigation-toggle-border-color)` |
45
+ // | `--graupl-navigation-toggle-hover-border-color` | Border colour of a hovered toggle. | `var(--graupl-navigation-toggle-hover-color)` |
46
+ // | `--graupl-navigation-toggle-active-border-color` | Border colour of an active toggle. | `var(--graupl-navigation-toggle-hover-border-color)` |
47
+ // | `--graupl-navigation-toggle-disabled-border-color` | Border colour of a disabled toggle. | `var(--graupl-navigation-toggle-disabled-color)` |
48
+ // | `--graupl-navigation-toggle-border-top-left-radius` | Top-left border radius of the toggle. | `var(--graupl-border-top-left-radius)` |
49
+ // | `--graupl-navigation-toggle-border-top-right-radius` | Top-right border radius of the toggle. | `var(--graupl-border-top-right-radius)` |
50
+ // | `--graupl-navigation-toggle-border-bottom-right-radius` | Bottom-right border radius of the toggle. | `var(--graupl-border-bottom-right-radius)` |
51
+ // | `--graupl-navigation-toggle-border-bottom-left-radius` | Bottom-left border radius of the toggle. | `var(--graupl-border-bottom-left-radius)` |
52
+ // | `--graupl-navigation-toggle-border-radius` | Border radius shorthand for the toggle. | `var(--graupl-navigation-toggle-border-top-left-radius) var(--graupl-navigation-toggle-border-top-right-radius) var(--graupl-navigation-toggle-border-bottom-right-radius) var(--graupl-navigation-toggle-border-bottom-left-radius)` |
53
+ // | `--graupl-navigation-branding-padding-x` | Horizontal padding for the branding element. | `var(--graupl-spacer-3)` |
54
+ // | `--graupl-navigation-branding-padding-y` | Vertical padding for the branding element. | `var(--graupl-spacer-2)` |
55
+ // | `--graupl-navigation-branding-padding` | Shorthand padding for the branding element. | `var(--graupl-navigation-branding-padding-y) var(--graupl-navigation-branding-padding-x)` |
56
+ // | `--graupl-navigation-branding-font-size` | Font size of the branding element. | `var(--graupl-font-lg)` |
57
+ // | `--graupl-navigation-branding-font-weight` | Font weight of the branding element. | `var(--graupl-font-weight-bold)` |
58
+ // | `--graupl-navigation-branding-color` | Text colour for branding. | `var(--graupl-navigation-color)` |
59
+ // | `--graupl-navigation-branding-visited-color` | Text colour for visited branding. | `var(--graupl-navigation-branding-color)` |
60
+ // | `--graupl-navigation-branding-focus-color` | Text colour for focused branding. | `var(--graupl-navigation-branding-color)` |
61
+ // | `--graupl-navigation-branding-hover-color` | Text colour for hovered branding. | `var(--graupl-navigation-color)` |
62
+ // | `--graupl-navigation-branding-active-color` | Text colour for active branding. | `var(--graupl-navigation-branding-hover-color)` |
63
+ // | `--graupl-navigation-branding-disabled-color` | Text colour for disabled branding. | `var(--graupl-navigation-color)` |
64
+ // | `--graupl-navigation-branding-text-decoration` | Base text decoration for branding. | `none` |
65
+ // | `--graupl-navigation-branding-visited-text-decoration` | Text decoration for visited branding. | `var(--graupl-navigation-branding-text-decoration)` |
66
+ // | `--graupl-navigation-branding-focus-text-decoration` | Text decoration for focused branding. | `var(--graupl-navigation-branding-text-decoration)` |
67
+ // | `--graupl-navigation-branding-hover-text-decoration` | Text decoration for hovered branding. | `none` |
68
+ // | `--graupl-navigation-branding-active-text-decoration` | Text decoration for active branding. | `var(--graupl-navigation-branding-hover-text-decoration)` |
69
+ // | `--graupl-navigation-branding-disabled-text-decoration` | Text decoration for disabled branding. | `none` |
70
+ // | `--graupl-navigation-branding-text-decoration-style` | Base text decoration style for branding. | `solid` |
71
+ // | `--graupl-navigation-branding-visited-text-decoration-style` | Text decoration style for visited branding. | `var(--graupl-navigation-branding-text-decoration-style)` |
72
+ // | `--graupl-navigation-branding-focus-text-decoration-style` | Text decoration style for focused branding. | `var(--graupl-navigation-branding-text-decoration-style)` |
73
+ // | `--graupl-navigation-branding-hover-text-decoration-style` | Text decoration style for hovered branding. | `solid` |
74
+ // | `--graupl-navigation-branding-active-text-decoration-style` | Text decoration style for active branding. | `var(--graupl-navigation-branding-hover-text-decoration-style)` |
75
+ // | `--graupl-navigation-branding-disabled-text-decoration-style` | Text decoration style for disabled branding. | `solid` |
76
+ // | `--graupl-navigation-branding-text-decoration-thickness` | Base decoration thickness for branding. | `var(--graupl-border-width)` |
77
+ // | `--graupl-navigation-branding-visited-text-decoration-thickness` | Decoration thickness for visited branding. | `var(--graupl-navigation-branding-text-decoration-thickness)` |
78
+ // | `--graupl-navigation-branding-focus-text-decoration-thickness` | Decoration thickness for focused branding. | `var(--graupl-navigation-branding-text-decoration-thickness)` |
79
+ // | `--graupl-navigation-branding-hover-text-decoration-thickness` | Decoration thickness for hovered branding. | `var(--graupl-border-width)` |
80
+ // | `--graupl-navigation-branding-active-text-decoration-thickness` | Decoration thickness for active branding. | `var(--graupl-navigation-branding-hover-text-decoration-thickness)` |
81
+ // | `--graupl-navigation-branding-disabled-text-decoration-thickness` | Decoration thickness for disabled branding. | `var(--graupl-border-width)` |
82
+ // | `--graupl-navigation-branding-text-decoration-color` | Base decoration colour for branding. | `var(--graupl-navigation-branding-color)` |
83
+ // | `--graupl-navigation-branding-visited-text-decoration-color` | Decoration colour for visited branding. | `var(--graupl-navigation-branding-visited-color)` |
84
+ // | `--graupl-navigation-branding-focus-text-decoration-color` | Decoration colour for focused branding. | `var(--graupl-navigation-branding-focus-color)` |
85
+ // | `--graupl-navigation-branding-hover-text-decoration-color` | Decoration colour for hovered branding. | `var(--graupl-navigation-branding-hover-color)` |
86
+ // | `--graupl-navigation-branding-active-text-decoration-color` | Decoration colour for active branding. | `var(--graupl-navigation-branding-active-color)` |
87
+ // | `--graupl-navigation-branding-disabled-text-decoration-color` | Decoration colour for disabled branding. | `var(--graupl-navigation-branding-disabled-color)` |
88
+ // | `--graupl-navigation-toggle-content` | Content used for the toggle pseudo-element. | `'☰'` |
89
+ //
90
+ // The following sass variables can be used to customize the generation of the navigation component:
91
+ // | Variable | Description | Default Value |
92
+ // | ------------------------------------ | -------------------------------------------------------------------- | ------------------------- |
93
+ // | `$selector-base` | Selector base for the component. | `"."` |
94
+ // | `$modifier-selector-base` | Selector base for component modifiers. | `"."` |
95
+ // | `$generate-base-theme-map` | Flag to generate the base theme maps for navigation variants. | `true` |
96
+ // | `$themeable` | Flag to generate theme modifiers. | `false` |
97
+ // | `$navigation-selector-base` | Selector base for the navigation container. | `$selector-base` |
98
+ // | `$navigation-selector` | Selector for the navigation container. | `"navigation"` |
99
+ // | `$navigation-theme-selector-base` | Selector base for navigation theme modifiers. | `$modifier-selector-base` |
100
+ // | `$navigation-theme-selector-prefix` | Selector prefix for navigation theme modifiers. | `""` |
101
+ // | `$navigation-toggle-selector-base` | Selector base for the navigation toggle. | `$selector-base` |
102
+ // | `$navigation-toggle-selector` | Selector for the navigation toggle. | `"navigation-toggle"` |
103
+ // | `$navigation-branding-selector-base` | Selector base for the navigation branding. | `$selector-base` |
104
+ // | `$navigation-branding-selector` | Selector for the navigation branding. | `"navigation-branding"` |
105
+ // | `$navigation-toggle-content` | Content for the toggle pseudo-element. | `'☰'` |
106
+ // | `$navigation-theme-mappings` | A map of properties and shade values applied to navigation variants. | `()` |
107
+ // | `$navigation-theme-map` | A fully expanded property map used to generate navigation variants. | `()` |
108
+ //
109
+ // ## Using `$navigation-theme-mappings`
110
+ //
111
+ // `$navigation-theme-mappings` is a single-level map of properties and shade values.
112
+ //
113
+ // e.g.
114
+ // ```scss
115
+ // $navigation-theme-mappings: (
116
+ // color: 900,
117
+ // background: 100,
118
+ // );
119
+ // ```
120
+ //
121
+ // This directly[1] informs all navigation variants what shade to use for each property key.
122
+ // Based on the example above:
123
+ // - Primary navigations expose `--graupl-navigation-color` as `var(--graupl-theme-active--primary--900)` and `--graupl-navigation-background` as `var(--graupl-theme-active--primary--100)`,
124
+ // - Secondary navigations expose those properties via the secondary palette, and
125
+ // - Tertiary navigations expose those properties via the tertiary palette.
126
+ //
127
+ // You can target multiple properties at once to keep every variant in sync.
128
+ //
129
+ // ```scss
130
+ // $navigation-theme-mappings: (
131
+ // color: 800,
132
+ // toggle-hover-background: 700,
133
+ // );
134
+ // ```
135
+ //
136
+ // - Primary navigations use `--graupl-theme-active--primary--800` for `--graupl-navigation-color` and `--graupl-theme-active--primary--700` for `--graupl-navigation-toggle-hover-background`.
137
+ // - Secondary/tertiary navigations pull the same shades from their respective palettes.
138
+ //
139
+ // [1] `$navigation-theme-mappings` gets parsed into a larger, more explicit map: `$navigation-theme-map`.
140
+ //
141
+ // ## Using `$navigation-theme-map`
142
+ //
143
+ // `$navigation-theme-map` is a multi-level map of properties, colours, and shade values, allowing you to override individual variants without affecting the others.
144
+ //
145
+ // e.g.
146
+ // ```scss
147
+ // $navigation-theme-map: (
148
+ // primary: (
149
+ // color: (
150
+ // color: primary,
151
+ // shade: 950,
152
+ // ),
153
+ // ),
154
+ // secondary: (
155
+ // background: (
156
+ // color: secondary,
157
+ // shade: 200,
158
+ // ),
159
+ // ),
160
+ // );
161
+ // ```
162
+ //
163
+ // This example keeps the default behaviour for tertiary navigations, while deepening the colour on the primary variant and lightening the background on the secondary variant.
164
+ //
165
+ // @example
166
+ // <nav class="navigation" data-graupl-menu-type="DisclosureMenu" data-graupl-menu-options="{'optionalKeySupport': true}">
167
+ // <a class="navigation-branding" href="#">Graupl</a>
168
+ // <button class="navigation-toggle" aria-label="Toggle navigation"></button>
169
+ // <ul class="menu">
170
+ // <li class="menu-item"><a class="menu-link" href="#">Home</a></li>
171
+ // <li class="menu-item submenu-item">
172
+ // <button class="menu-link button link submenu-toggle" type="button">About</button>
173
+ // <ul class="submenu">
174
+ // <li class="menu-item"><a class="menu-link" href="#">About Us</a></li>
175
+ // <li class="menu-item"><a class="menu-link" href="#">Our Team</a></li>
176
+ // <li class="menu-item"><a class="menu-link" href="#">Our Mission</a></li>
177
+ // </ul>
178
+ // </li>
179
+ // <li class="menu-item"><a class="menu-link" href="#">Blog</a></li>
180
+ // <li class="menu-item"><a class="menu-link" href="#">Portfolio</a></li>
181
+ // <li class="menu-item"><a class="menu-link button tertiary" href="#">Contact</a></li>
182
+ // </ul>
183
+ // </nav>
2
184
 
3
- @use "defaults";
4
- @use "variables" as *;
5
185
  @use "../../defaults" as root-defaults;
6
- @use "../menu/defaults" as menu-defaults;
7
- @use "../menu/variables" as menu-variables;
8
186
  @use "../../mixins/layer" as *;
9
187
  @use "../../mixins/screen";
188
+ @use "../../mixins/state";
189
+ @use "../../mixins/theme";
190
+ @use "../menu/defaults" as menu-defaults;
191
+ @use "../menu/variables" as menu-variables;
192
+ @use "defaults";
193
+ @use "variables" as *;
10
194
 
11
195
  @include layer(component) {
12
- // Navigation.
13
- #{defaults.$navigation-selector} {
196
+ // .navigation
197
+ #{defaults.$navigation-selector-base}#{defaults.$navigation-selector} {
14
198
  display: grid;
15
199
  grid-template-areas:
16
200
  "branding - toggle"
@@ -18,21 +202,24 @@
18
202
  grid-template-columns: auto 1fr auto;
19
203
  isolation: isolate;
20
204
 
21
- #{menu-defaults.$menu-selector} {
205
+ // .menu
206
+ #{menu-defaults.$menu-selector-base}#{menu-defaults.$menu-selector} {
22
207
  grid-area: menu;
23
208
 
24
- &#{menu-defaults.$menu-show-selector} {
209
+ // &.show
210
+ &#{menu-defaults.$menu-show-selector-base}#{menu-defaults.$menu-show-selector} {
25
211
  --#{root-defaults.$prefix}menu-display: #{menu-variables.$menu-show-display};
26
212
  }
27
213
 
28
- &#{menu-defaults.$menu-hide-selector} {
214
+ // &.hide
215
+ &#{menu-defaults.$menu-hide-selector-base}#{menu-defaults.$menu-hide-selector} {
29
216
  --#{root-defaults.$prefix}menu-display: #{menu-variables.$menu-hide-display};
30
217
  }
31
218
  }
32
219
  }
33
220
 
34
- // Navigation toggle.
35
- #{defaults.$navigation-toggle-selector} {
221
+ // .navigation-toggle
222
+ #{defaults.$navigation-toggle-selector-base}#{defaults.$navigation-toggle-selector} {
36
223
  display: flex;
37
224
  grid-area: toggle;
38
225
  align-items: center;
@@ -50,8 +237,8 @@
50
237
  }
51
238
  }
52
239
 
53
- // Navigation branding.
54
- #{defaults.$navigation-branding-selector} {
240
+ // .navigation-branding
241
+ #{defaults.$navigation-branding-selector-base}#{defaults.$navigation-branding-selector} {
55
242
  display: flex;
56
243
  grid-area: branding;
57
244
  align-items: center;
@@ -63,47 +250,19 @@
63
250
  text-decoration-style: $navigation-branding-text-decoration-style;
64
251
  text-decoration-thickness: $navigation-branding-text-decoration-thickness;
65
252
 
66
- &:visited {
67
- --#{root-defaults.$prefix}navigation-branding-text-decoration: #{$navigation-branding-visited-text-decoration};
68
- --#{root-defaults.$prefix}navigation-branding-text-decoration-thickness: #{$navigation-branding-visited-text-decoration-thickness};
69
- --#{root-defaults.$prefix}navigation-branding-text-decoration-style: #{$navigation-branding-visited-text-decoration-style};
70
- }
71
-
72
- &:focus-visible {
73
- --#{root-defaults.$prefix}navigation-branding-text-decoration: #{$navigation-branding-focus-text-decoration};
74
- --#{root-defaults.$prefix}navigation-branding-text-decoration-thickness: #{$navigation-branding-focus-text-decoration-thickness};
75
- --#{root-defaults.$prefix}navigation-branding-text-decoration-style: #{$navigation-branding-focus-text-decoration-style};
76
- }
77
-
78
- &:hover {
79
- --#{root-defaults.$prefix}navigation-branding-text-decoration: #{$navigation-branding-hover-text-decoration};
80
- --#{root-defaults.$prefix}navigation-branding-text-decoration-thickness: #{$navigation-branding-hover-text-decoration-thickness};
81
- --#{root-defaults.$prefix}navigation-branding-text-decoration-style: #{$navigation-branding-hover-text-decoration-style};
82
- }
83
-
84
- &:active {
85
- --#{root-defaults.$prefix}navigation-branding-text-decoration: #{$navigation-branding-active-text-decoration};
86
- --#{root-defaults.$prefix}navigation-branding-text-decoration-thickness: #{$navigation-branding-active-text-decoration-thickness};
87
- --#{root-defaults.$prefix}navigation-branding-text-decoration-style: #{$navigation-branding-active-text-decoration-style};
88
- }
89
-
90
- &:disabled,
91
- &[disabled] {
92
- &,
93
- &:visited,
94
- &:focus-visible,
95
- &:hover,
96
- &:active {
97
- --#{root-defaults.$prefix}navigation-branding-text-decoration: #{$navigation-branding-disabled-text-decoration};
98
- --#{root-defaults.$prefix}navigation-branding-text-decoration-thickness: #{$navigation-branding-disabled-text-decoration-thickness};
99
- --#{root-defaults.$prefix}navigation-branding-text-decoration-style: #{$navigation-branding-disabled-text-decoration-style};
100
- }
101
- }
253
+ @include state.generate-modifiers(
254
+ (
255
+ text-decoration: $navigation-branding-text-decoration-states,
256
+ text-decoration-thickness:
257
+ $navigation-branding-text-decoration-thickness-states,
258
+ text-decoration-style: $navigation-branding-text-decoration-style-states,
259
+ )
260
+ );
102
261
  }
103
262
 
104
263
  @include screen.trigger(navigation-collapse) {
105
- // Navigation.
106
- #{defaults.$navigation-selector} {
264
+ // .navigation
265
+ #{defaults.$navigation-selector-base}#{defaults.$navigation-selector} {
107
266
  --#{root-defaults.$prefix}menu-flex-direction: column;
108
267
  --#{root-defaults.$prefix}submenu-position: relative;
109
268
  --#{root-defaults.$prefix}menu-item-min-width: 100%;
@@ -112,79 +271,71 @@
112
271
  }
113
272
 
114
273
  @include screen.trigger(navigation-expand) {
115
- // Navigation.
116
- #{defaults.$navigation-selector} {
274
+ // .navigation
275
+ #{defaults.$navigation-selector-base}#{defaults.$navigation-selector} {
117
276
  --#{root-defaults.$prefix}menu-hide-display: #{menu-variables.$menu-show-display};
118
277
 
119
278
  grid-template-areas: "branding - menu";
120
279
  }
121
280
 
122
- // Navigation toggle.
123
- #{defaults.$navigation-toggle-selector} {
281
+ // .navigation-toggle
282
+ #{defaults.$navigation-toggle-selector-base}#{defaults.$navigation-toggle-selector} {
124
283
  display: none;
125
284
  }
126
285
  }
127
286
  }
128
287
 
129
288
  @include layer(theme) {
130
- // Navigation.
131
- #{defaults.$navigation-selector} {
289
+ // .navigation
290
+ #{defaults.$navigation-selector-base}#{defaults.$navigation-selector} {
132
291
  --#{root-defaults.$prefix}menu-background: #{$navigation-background};
133
292
  --#{root-defaults.$prefix}menu-color: #{$navigation-color};
134
- --#{root-defaults.$prefix}submenu-background: #{$navigation-background};
135
- --#{root-defaults.$prefix}submenu-color: #{$navigation-color};
136
293
 
137
294
  background: $navigation-background;
138
295
  color: $navigation-color;
296
+
297
+ @if root-defaults.$themeable-components and defaults.$themeable {
298
+ @include theme.generate-modifiers(
299
+ defaults.$navigation-theme-map,
300
+ defaults.$navigation-theme-selector-base,
301
+ defaults.$navigation-theme-selector-prefix,
302
+ "navigation-"
303
+ );
304
+ @include theme.generate-modifiers(
305
+ defaults.$navigation-theme-map,
306
+ defaults.$navigation-theme-selector-base,
307
+ defaults.$navigation-theme-selector-prefix,
308
+ "navigation-",
309
+ ""
310
+ );
311
+ }
139
312
  }
140
313
 
141
- // Navigation toggle.
142
- #{defaults.$navigation-toggle-selector} {
314
+ // .navigation-toggle
315
+ #{defaults.$navigation-toggle-selector-base}#{defaults.$navigation-toggle-selector} {
143
316
  border-color: $navigation-toggle-border-color;
144
317
  background: $navigation-toggle-background;
145
318
  color: $navigation-toggle-color;
146
319
 
147
- &:hover {
148
- --#{root-defaults.$prefix}navigation-toggle-background: #{$navigation-toggle-hover-background};
149
- --#{root-defaults.$prefix}navigation-toggle-color: #{$navigation-toggle-hover-color};
150
- }
320
+ @include state.generate-modifiers(
321
+ (
322
+ border-color: $navigation-toggle-border-color-states,
323
+ background: $navigation-toggle-background-states,
324
+ color: $navigation-toggle-color-states,
325
+ )
326
+ );
151
327
  }
152
328
 
153
- // Navigation branding.
154
- #{defaults.$navigation-branding-selector} {
329
+ // .navigation-branding
330
+ #{defaults.$navigation-branding-selector-base}#{defaults.$navigation-branding-selector} {
155
331
  color: $navigation-branding-color;
156
332
  text-decoration-color: $navigation-branding-text-decoration-color;
157
333
 
158
- &:visited {
159
- --#{root-defaults.$prefix}navigation-branding-color: #{$navigation-branding-visited-color};
160
- --#{root-defaults.$prefix}navigation-branding-text-decoration-color: #{$navigation-branding-visited-text-decoration-color};
161
- }
162
-
163
- &:focus-visible {
164
- --#{root-defaults.$prefix}navigation-branding-color: #{$navigation-branding-focus-color};
165
- --#{root-defaults.$prefix}navigation-branding-text-decoration-color: #{$navigation-branding-focus-text-decoration-color};
166
- }
167
-
168
- &:hover {
169
- --#{root-defaults.$prefix}navigation-branding-color: #{$navigation-branding-hover-color};
170
- --#{root-defaults.$prefix}navigation-branding-text-decoration-color: #{$navigation-branding-hover-text-decoration-color};
171
- }
172
-
173
- &:active {
174
- --#{root-defaults.$prefix}navigation-branding-color: #{$navigation-branding-active-color};
175
- --#{root-defaults.$prefix}navigation-branding-text-decoration-color: #{$navigation-branding-active-text-decoration-color};
176
- }
177
-
178
- &:disabled,
179
- &[disabled] {
180
- &,
181
- &:visited,
182
- &:focus-visible,
183
- &:hover,
184
- &:active {
185
- --#{root-defaults.$prefix}navigation-branding-color: #{$navigation-branding-disabled-color};
186
- --#{root-defaults.$prefix}navigation-branding-text-decoration-color: #{$navigation-branding-disabled-text-decoration-color};
187
- }
188
- }
334
+ @include state.generate-modifiers(
335
+ (
336
+ color: $navigation-branding-color-states,
337
+ text-decoration: $navigation-branding-text-decoration-color-states,
338
+ )
339
+ );
189
340
  }
190
341
  }