@graupl/graupl 1.0.0-alpha.12 → 1.0.0-alpha.13

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 (88) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/base/button.css +1 -1
  3. package/dist/base/button.css.map +1 -1
  4. package/dist/base/form.css +1 -1
  5. package/dist/base/form.css.map +1 -1
  6. package/dist/base/link.css +1 -1
  7. package/dist/base/link.css.map +1 -1
  8. package/dist/base/table.css +1 -1
  9. package/dist/base/table.css.map +1 -1
  10. package/dist/base.css +1 -1
  11. package/dist/base.css.map +1 -1
  12. package/dist/component/card.css +2 -0
  13. package/dist/component/card.css.map +1 -0
  14. package/dist/component/input-group.css +1 -1
  15. package/dist/component/input-group.css.map +1 -1
  16. package/dist/component/menu.css +2 -0
  17. package/dist/component/menu.css.map +1 -0
  18. package/dist/component/navigation.css +2 -0
  19. package/dist/component/navigation.css.map +1 -0
  20. package/dist/component.css +1 -1
  21. package/dist/component.css.map +1 -1
  22. package/dist/graupl.css +1 -1
  23. package/dist/graupl.css.map +1 -1
  24. package/dist/layout/columns.css +1 -1
  25. package/dist/layout/columns.css.map +1 -1
  26. package/dist/layout/flex-columns.css +2 -0
  27. package/dist/layout/flex-columns.css.map +1 -0
  28. package/dist/layout.css +1 -1
  29. package/dist/layout.css.map +1 -1
  30. package/dist/theme/typography.css +1 -1
  31. package/dist/theme/typography.css.map +1 -1
  32. package/dist/theme.css +1 -1
  33. package/dist/theme.css.map +1 -1
  34. package/dist/utilities/order.css +2 -0
  35. package/dist/utilities/order.css.map +1 -0
  36. package/dist/utilities/spacing.css +1 -1
  37. package/dist/utilities/spacing.css.map +1 -1
  38. package/dist/utilities/typography.css +1 -1
  39. package/dist/utilities/typography.css.map +1 -1
  40. package/dist/utilities.css +1 -1
  41. package/dist/utilities.css.map +1 -1
  42. package/eslint.config.js +1 -0
  43. package/index.html +619 -325
  44. package/package.json +1 -1
  45. package/scss/component/card.scss +3 -0
  46. package/scss/component/menu.scss +3 -0
  47. package/scss/component/navigation.scss +3 -0
  48. package/scss/layout/flex-columns.scss +3 -0
  49. package/scss/utilities/order.scss +3 -0
  50. package/src/js/navigation.js +34 -0
  51. package/src/scss/_defaults.scss +15 -1
  52. package/src/scss/base/button/_defaults.scss +8 -3
  53. package/src/scss/base/button/_index.scss +99 -36
  54. package/src/scss/base/button/_variables.scss +43 -11
  55. package/src/scss/base/form/_index.scss +2 -4
  56. package/src/scss/base/form/_variables.scss +8 -0
  57. package/src/scss/base/link/_defaults.scss +37 -6
  58. package/src/scss/base/link/_index.scss +72 -12
  59. package/src/scss/base/link/_variables.scss +175 -18
  60. package/src/scss/base/table/_index.scss +2 -4
  61. package/src/scss/base/table/_variables.scss +8 -0
  62. package/src/scss/component/_index.scss +3 -0
  63. package/src/scss/component/card/_defaults.scss +29 -0
  64. package/src/scss/component/card/_index.scss +143 -0
  65. package/src/scss/component/card/_variables.scss +185 -0
  66. package/src/scss/component/menu/_defaults.scss +65 -0
  67. package/src/scss/component/menu/_index.scss +304 -0
  68. package/src/scss/component/menu/_variables.scss +491 -0
  69. package/src/scss/component/navigation/_defaults.scss +29 -0
  70. package/src/scss/component/navigation/_index.scss +189 -0
  71. package/src/scss/component/navigation/_variables.scss +237 -0
  72. package/src/scss/functions/_theme.scss +16 -0
  73. package/src/scss/layout/_index.scss +1 -0
  74. package/src/scss/layout/columns/_index.scss +22 -0
  75. package/src/scss/layout/flex-columns/_defaults.scss +18 -0
  76. package/src/scss/layout/flex-columns/_index.scss +77 -0
  77. package/src/scss/layout/flex-columns/_variables.scss +26 -0
  78. package/src/scss/mixins/_media-queries.scss +8 -0
  79. package/src/scss/theme/typography/_defaults.scss +1 -1
  80. package/src/scss/theme/typography/_variables.scss +5 -2
  81. package/src/scss/utilities/_index.scss +2 -0
  82. package/src/scss/utilities/order/_defaults.scss +19 -0
  83. package/src/scss/utilities/order/_index.scss +35 -0
  84. package/src/scss/utilities/order/_variables.scss +6 -0
  85. package/src/scss/utilities/ratio/_defaults.scss +24 -0
  86. package/src/scss/utilities/ratio/_index.scss +26 -0
  87. package/src/scss/utilities/ratio/_variables.scss +9 -0
  88. package/src/scss/utilities/spacing/_index.scss +33 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graupl/graupl",
3
- "version": "1.0.0-alpha.12",
3
+ "version": "1.0.0-alpha.13",
4
4
  "description": "A modular and modern CSS framework.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -0,0 +1,3 @@
1
+ // @graupl/graupl card component.
2
+
3
+ @forward "../../src/scss/component/card";
@@ -0,0 +1,3 @@
1
+ // @graupl/graupl menu component.
2
+
3
+ @forward "../../src/scss/component/menu";
@@ -0,0 +1,3 @@
1
+ // @graupl/graupl navigation component.
2
+
3
+ @forward "../../src/scss/component/navigation";
@@ -0,0 +1,3 @@
1
+ // @graupl/graupl flex columns layout.
2
+
3
+ @forward "../../src/scss/layout/flex-columns";
@@ -0,0 +1,3 @@
1
+ // @graupl/graupl order utilities.
2
+
3
+ @forward "../../src/scss/utilities/order";
@@ -0,0 +1,34 @@
1
+ document.addEventListener("DOMContentLoaded", function () {
2
+ const navs = document.querySelectorAll(".navigation");
3
+ const menus = [];
4
+
5
+ navs.forEach((nav) => {
6
+ const MenuConstructor = nav.dataset.grauplMenuType || DisclosureMenu;
7
+
8
+ if (window[MenuConstructor] === undefined) {
9
+ console.warn(
10
+ `Graupl navigation requires accessible-menu's ${MenuConstructor}. Please make sure to include it on this page.`
11
+ );
12
+
13
+ return;
14
+ }
15
+
16
+ const menuOptions =
17
+ JSON.parse(nav.dataset.grauplMenuOptions.replace(/'/g, '"')) || {};
18
+ const menuElement = nav.querySelector(".menu");
19
+ const controllerElement = nav.querySelector(".navigation-toggle");
20
+ const containerElement = nav;
21
+ const menu = new window[MenuConstructor]({
22
+ menuElement,
23
+ menuItemSelector: ".menu-item",
24
+ menuLinkSelector: ".menu-link",
25
+ submenuItemSelector: ".submenu-item",
26
+ submenuToggleSelector: ".submenu-toggle",
27
+ controllerElement,
28
+ containerElement,
29
+ ...menuOptions,
30
+ });
31
+
32
+ menus.push(menu);
33
+ });
34
+ });
@@ -19,10 +19,24 @@ $content-max-width: 96ch !default;
19
19
 
20
20
  // Screen sizes.
21
21
  $base-screen-sizes: (
22
- xs: "(0 <= width <= 48ch)",
22
+ xs: "(width <= 48ch)",
23
+ sm: "(48ch < width)",
24
+ md: "(72ch < width)",
25
+ lg: "(108ch < width)",
26
+ xl: "(156ch < width)",
23
27
  );
24
28
  $custom-screen-sizes: () !default;
25
29
  $screen-sizes: map.merge($base-screen-sizes, $custom-screen-sizes);
30
+ $base-screen-size-triggers: (
31
+ navigation-collapse: "(width <= 72ch)",
32
+ navigation-expand: "(72ch < width)",
33
+ force-vertical-card: "(width <= 72ch)",
34
+ );
35
+ $custom-screen-size-triggers: () !default;
36
+ $screen-size-triggers: map.merge(
37
+ $base-screen-size-triggers,
38
+ $custom-screen-size-triggers
39
+ );
26
40
 
27
41
  // Spacing properties.
28
42
  $spacer: 1rem !default;
@@ -15,10 +15,11 @@ $button-theme-selector-prefix: "." !default;
15
15
 
16
16
  // Button properties.
17
17
  $button-transform: none !default;
18
- $button-hover-transform: none !default;
19
- $button-hover-transform-reduced-motion: none !default;
18
+ $button-visited-transform: $button-transform !default;
19
+ $button-focus-transform: $button-transform !default;
20
+ $button-hover-transform: $button-transform !default;
20
21
  $button-active-transform: scale(0.95) !default;
21
- $button-active-transform-reduced-motion: scale(0.98) !default;
22
+ $button-disabled-transform: $button-transform !default;
22
23
 
23
24
  // Button state theme defaults.
24
25
  // This map is used to define the default colour shades for the
@@ -32,6 +33,10 @@ $button-active-transform-reduced-motion: scale(0.98) !default;
32
33
  $base-button-state-theme-map: (
33
34
  color: 900,
34
35
  border-color: 700,
36
+ visited-color: 900,
37
+ visited-border-color: 700,
38
+ focus-color: 900,
39
+ focus-border-color: 700,
35
40
  hover-color: 100,
36
41
  hover-background: 700,
37
42
  hover-border-color: 700,
@@ -2,11 +2,13 @@
2
2
 
3
3
  @use "defaults";
4
4
  @use "../../defaults" as root-defaults;
5
+ @use "../link/defaults" as link-defaults;
5
6
  @use "../../theme/color/variables" as color;
6
7
  @use "../../base/link/variables" as link;
7
8
  @use "variables" as *;
8
9
  @use "../../mixins/layer" as *;
9
10
  @use "../../mixins/media-queries" as *;
11
+ @use "../../functions/theme";
10
12
  @use "sass:map";
11
13
 
12
14
  @include layer(base) {
@@ -19,12 +21,19 @@
19
21
  padding: $button-padding;
20
22
  transform: $button-transform;
21
23
  transition: $button-transition;
22
- border-width: $button-border-width;
23
- border-style: $button-border-style;
24
+ border: $button-border;
24
25
  border-radius: $button-border-radius;
25
26
  font-size: $button-font-size;
26
27
  cursor: pointer;
27
28
 
29
+ &:visited {
30
+ --#{root-defaults.$prefix}-button-transform: #{$button-visited-transform};
31
+ }
32
+
33
+ &:focus-visible {
34
+ --#{root-defaults.$prefix}-button-transform: #{$button-focus-transform};
35
+ }
36
+
28
37
  &:hover {
29
38
  --#{root-defaults.$prefix}-button-transform: #{$button-hover-transform};
30
39
  }
@@ -33,23 +42,16 @@
33
42
  --#{root-defaults.$prefix}-button-transform: #{$button-active-transform};
34
43
  }
35
44
 
36
- &:not(#{defaults.$button-link-selector}) {
37
- --#{root-defaults.$prefix}-link-text-decoration: none;
38
- --#{root-defaults.$prefix}-link-padding: #{$button-padding};
39
- --#{root-defaults.$prefix}-link-transition: #{$button-transition};
40
- --#{root-defaults.$prefix}-link-transition-reduced-motion: #{$button-transition-reduced-motion};
41
- --#{root-defaults.$prefix}-link-transform: #{$button-transform};
42
- --#{root-defaults.$prefix}-link-hover-transform: #{$button-hover-transform};
43
- --#{root-defaults.$prefix}-link-active-transform: #{$button-active-transform};
44
- }
45
-
46
45
  &:disabled,
47
46
  &[disabled] {
48
47
  cursor: not-allowed;
49
48
 
49
+ &,
50
+ &:visited,
51
+ &:focus-visible,
50
52
  &:hover,
51
53
  &:active {
52
- transform: none;
54
+ --#{root-defaults.$prefix}-button-transform: #{$button-disabled-transform};
53
55
  }
54
56
  }
55
57
 
@@ -58,23 +60,51 @@
58
60
  --#{root-defaults.$prefix}-button-transition: #{link.$link-transition};
59
61
  --#{root-defaults.$prefix}-button-transition-reduced-motion: #{link.$link-transition-reduced-motion};
60
62
  --#{root-defaults.$prefix}-button-transform: #{link.$link-transform};
63
+ --#{root-defaults.$prefix}-button-visited-transform: #{link.$link-visited-transform};
64
+ --#{root-defaults.$prefix}-button-focus-transform: #{link.$link-transform};
61
65
  --#{root-defaults.$prefix}-button-hover-transform: #{link.$link-hover-transform};
62
66
  --#{root-defaults.$prefix}-button-active-transform: #{link.$link-active-transform};
67
+ --#{root-defaults.$prefix}-button-border-width: #{link.$link-border-width};
68
+ --#{root-defaults.$prefix}-button-border-style: #{link.$link-border-style};
69
+ --#{root-defaults.$prefix}-button-border-radius: #{link.$link-border-radius};
70
+ --#{root-defaults.$prefix}-button-min-width: #{link.$link-min-width};
71
+ --#{root-defaults.$prefix}-button-min-height: #{link.$link-min-height};
72
+ --#{root-defaults.$prefix}-button-font-size: inherit;
63
73
 
64
- min-width: auto;
65
- min-height: auto;
66
- border: 0;
67
- font-size: inherit;
68
74
  text-decoration: link.$link-text-decoration;
69
75
  text-decoration-thickness: link.$link-text-decoration-thickness;
76
+ text-decoration-style: link.$link-text-decoration-style;
77
+ }
78
+ }
79
+
80
+ #{link-defaults.$link-selector} {
81
+ &#{defaults.$button-selector}:not(#{defaults.$button-link-selector}) {
82
+ --#{root-defaults.$prefix}-link-padding: #{$button-padding};
83
+ --#{root-defaults.$prefix}-link-transition: #{$button-transition};
84
+ --#{root-defaults.$prefix}-link-transition-reduced-motion: #{$button-transition-reduced-motion};
85
+ --#{root-defaults.$prefix}-link-transform: #{$button-transform};
86
+ --#{root-defaults.$prefix}-link-visited-transform: #{$button-visited-transform};
87
+ --#{root-defaults.$prefix}-link-focus-transform: #{$button-focus-transform};
88
+ --#{root-defaults.$prefix}-link-hover-transform: #{$button-hover-transform};
89
+ --#{root-defaults.$prefix}-link-active-transform: #{$button-active-transform};
90
+ --#{root-defaults.$prefix}-link-disabled-transform: #{$button-disabled-transform};
91
+ --#{root-defaults.$prefix}-link-border-width: #{$button-border-width};
92
+ --#{root-defaults.$prefix}-link-border-style: #{$button-border-style};
93
+ --#{root-defaults.$prefix}-link-border-radius: #{$button-border-radius};
94
+ --#{root-defaults.$prefix}-link-min-width: #{$button-min-width};
95
+ --#{root-defaults.$prefix}-link-min-height: #{$button-min-height};
96
+ --#{root-defaults.$prefix}-link-text-decoration: none;
97
+ --#{root-defaults.$prefix}-link-visited-text-decoration: none;
98
+ --#{root-defaults.$prefix}-link-focus-text-decoration: none;
99
+ --#{root-defaults.$prefix}-link-hover-text-decoration: none;
100
+ --#{root-defaults.$prefix}-link-active-text-decoration: none;
101
+ --#{root-defaults.$prefix}-link-disabled-text-decoration: none;
70
102
  }
71
103
  }
72
104
 
73
105
  @include animation-off {
74
106
  #{defaults.$button-selector} {
75
107
  --#{root-defaults.$prefix}-button-transition: #{$button-transition-reduced-motion};
76
- --#{root-defaults.$prefix}-button-hover-transform: #{$button-hover-transform-reduced-motion};
77
- --#{root-defaults.$prefix}-button-active-transform: #{$button-active-transform-reduced-motion};
78
108
  }
79
109
  }
80
110
  }
@@ -88,34 +118,45 @@
88
118
  @each $color, $map in color.$theme-active {
89
119
  &#{defaults.$button-theme-selector-prefix}#{$color} {
90
120
  @each $prop, $shade in defaults.$button-state-theme-map {
91
- --#{root-defaults.$prefix}-button-#{$prop}: #{map.get($map, $shade)};
121
+ --#{root-defaults.$prefix}-button-#{$prop}: #{theme.get(
122
+ $color,
123
+ $shade
124
+ )};
92
125
  }
93
126
  }
94
127
  }
95
128
 
96
129
  &#{defaults.$button-link-selector} {
97
130
  --#{root-defaults.$prefix}-button-color: #{link.$link-color};
131
+ --#{root-defaults.$prefix}-button-visited-color: #{link.$link-visited-color};
132
+ --#{root-defaults.$prefix}-button-focus-color: #{link.$link-focus-color};
98
133
  --#{root-defaults.$prefix}-button-hover-color: #{link.$link-hover-color};
99
134
  --#{root-defaults.$prefix}-button-active-color: #{link.$link-active-color};
100
135
  --#{root-defaults.$prefix}-button-disabled-color: #{link.$link-disabled-color};
101
136
  --#{root-defaults.$prefix}-button-background: #{link.$link-background};
137
+ --#{root-defaults.$prefix}-button-visited-background: #{link.$link-visited-background};
138
+ --#{root-defaults.$prefix}-button-focus-background: #{link.$link-focus-background};
102
139
  --#{root-defaults.$prefix}-button-hover-background: #{link.$link-hover-background};
103
140
  --#{root-defaults.$prefix}-button-active-background: #{link.$link-active-background};
104
141
  --#{root-defaults.$prefix}-button-disabled-background: #{link.$link-disabled-background};
105
- --#{root-defaults.$prefix}-button-border-color: none;
106
- --#{root-defaults.$prefix}-button-hover-border-color: none;
107
- --#{root-defaults.$prefix}-button-active-border-color: none;
108
- --#{root-defaults.$prefix}-button-disabled-border-color: none;
109
- --#{root-defaults.$prefix}-button-hover-transform: none;
110
- --#{root-defaults.$prefix}-button-active-transform: none;
142
+ --#{root-defaults.$prefix}-button-border-color: #{link.$link-border-color};
143
+ --#{root-defaults.$prefix}-button-visited-border-color: #{link.$link-visited-border-color};
144
+ --#{root-defaults.$prefix}-button-focus-border-color: #{link.$link-focus-border-color};
145
+ --#{root-defaults.$prefix}-button-hover-border-color: #{link.$link-hover-border-color};
146
+ --#{root-defaults.$prefix}-button-active-border-color: #{link.$link-active-border-color};
147
+ --#{root-defaults.$prefix}-button-disabled-border-color: #{link.$link-disabled-border-color};
111
148
  }
112
149
 
113
- &:not(#{defaults.$button-link-selector}) {
114
- --#{root-defaults.$prefix}-link-color: #{$button-color};
115
- --#{root-defaults.$prefix}-link-hover-color: #{$button-hover-color};
116
- --#{root-defaults.$prefix}-link-active-color: #{$button-active-color};
117
- --#{root-defaults.$prefix}-link-visited-color: #{$button-hover-color};
118
- --#{root-defaults.$prefix}-link-disabled-color: #{$button-disabled-color};
150
+ &:visited {
151
+ --#{root-defaults.$prefix}-button-border-color: #{$button-visited-border-color};
152
+ --#{root-defaults.$prefix}-button-background: #{$button-visited-background};
153
+ --#{root-defaults.$prefix}-button-color: #{$button-visited-color};
154
+ }
155
+
156
+ &:focus-visible {
157
+ --#{root-defaults.$prefix}-button-border-color: #{$button-focus-border-color};
158
+ --#{root-defaults.$prefix}-button-background: #{$button-focus-background};
159
+ --#{root-defaults.$prefix}-button-color: #{$button-focus-color};
119
160
  }
120
161
 
121
162
  &:hover {
@@ -132,10 +173,9 @@
132
173
 
133
174
  &:disabled,
134
175
  &[disabled] {
135
- --#{root-defaults.$prefix}-button-border-color: #{$button-disabled-border-color};
136
- --#{root-defaults.$prefix}-button-background: #{$button-disabled-background};
137
- --#{root-defaults.$prefix}-button-color: #{$button-disabled-color};
138
-
176
+ &,
177
+ &:visited,
178
+ &:focus-visible,
139
179
  &:hover,
140
180
  &:active {
141
181
  --#{root-defaults.$prefix}-button-border-color: #{$button-disabled-border-color};
@@ -144,4 +184,27 @@
144
184
  }
145
185
  }
146
186
  }
187
+
188
+ #{link-defaults.$link-selector} {
189
+ &#{defaults.$button-selector}:not(#{defaults.$button-link-selector}) {
190
+ --#{root-defaults.$prefix}-link-color: #{$button-color};
191
+ --#{root-defaults.$prefix}-link-visited-color: #{$button-visited-color};
192
+ --#{root-defaults.$prefix}-link-focus-color: #{$button-focus-color};
193
+ --#{root-defaults.$prefix}-link-hover-color: #{$button-hover-color};
194
+ --#{root-defaults.$prefix}-link-active-color: #{$button-active-color};
195
+ --#{root-defaults.$prefix}-link-disabled-color: #{$button-disabled-color};
196
+ --#{root-defaults.$prefix}-link-background: #{$button-background};
197
+ --#{root-defaults.$prefix}-link-visited-background: #{$button-visited-background};
198
+ --#{root-defaults.$prefix}-link-focus-background: #{$button-focus-background};
199
+ --#{root-defaults.$prefix}-link-hover-background: #{$button-hover-background};
200
+ --#{root-defaults.$prefix}-link-active-background: #{$button-active-background};
201
+ --#{root-defaults.$prefix}-link-disabled-background: #{$button-disabled-background};
202
+ --#{root-defaults.$prefix}-link-border-color: #{$button-border-color};
203
+ --#{root-defaults.$prefix}-link-visited-border-color: #{$button-visited-border-color};
204
+ --#{root-defaults.$prefix}-link-focus-border-color: #{$button-focus-border-color};
205
+ --#{root-defaults.$prefix}-link-hover-border-color: #{$button-hover-border-color};
206
+ --#{root-defaults.$prefix}-link-active-border-color: #{$button-active-border-color};
207
+ --#{root-defaults.$prefix}-link-disabled-border-color: #{$button-disabled-border-color};
208
+ }
209
+ }
147
210
  }
@@ -53,6 +53,14 @@ $button-transform: var(
53
53
  --#{root-defaults.$prefix}-button-transform,
54
54
  #{defaults.$button-transform}
55
55
  );
56
+ $button-visited-transform: var(
57
+ --#{root-defaults.$prefix}-button-visited-transform,
58
+ #{defaults.$button-visited-transform}
59
+ );
60
+ $button-focus-transform: var(
61
+ --#{root-defaults.$prefix}-button-focus-transform,
62
+ #{defaults.$button-focus-transform}
63
+ );
56
64
  $button-hover-transform: var(
57
65
  --#{root-defaults.$prefix}-button-hover-transform,
58
66
  #{defaults.$button-hover-transform}
@@ -61,13 +69,9 @@ $button-active-transform: var(
61
69
  --#{root-defaults.$prefix}-button-active-transform,
62
70
  #{defaults.$button-active-transform}
63
71
  );
64
- $button-hover-transform-reduced-motion: var(
65
- --#{root-defaults.$prefix}-button-hover-transform-reduced-motion,
66
- #{defaults.$button-hover-transform-reduced-motion}
67
- );
68
- $button-active-transform-reduced-motion: var(
69
- --#{root-defaults.$prefix}-button-active-transform-reduced-motion,
70
- #{defaults.$button-active-transform-reduced-motion}
72
+ $button-disabled-transform: var(
73
+ --#{root-defaults.$prefix}-button-disabled-transform,
74
+ #{defaults.$button-disabled-transform}
71
75
  );
72
76
 
73
77
  // Background properties.
@@ -75,6 +79,14 @@ $button-background: var(
75
79
  --#{root-defaults.$prefix}-button-background,
76
80
  #{color.$root-background}
77
81
  );
82
+ $button-visited-background: var(
83
+ --#{root-defaults.$prefix}-button-visited-background,
84
+ #{color.$root-background}
85
+ );
86
+ $button-focus-background: var(
87
+ --#{root-defaults.$prefix}-button-focus-background,
88
+ #{color.$root-background}
89
+ );
78
90
  $button-hover-background: var(
79
91
  --#{root-defaults.$prefix}-button-hover-background,
80
92
  #{theme.get(primary, 900)}
@@ -91,7 +103,15 @@ $button-disabled-background: var(
91
103
  // Text properties.
92
104
  $button-color: var(
93
105
  --#{root-defaults.$prefix}-button-color,
94
- #{theme.get(primary, 900)}
106
+ #{color.$root-color}
107
+ );
108
+ $button-visited-color: var(
109
+ --#{root-defaults.$prefix}-button-visited-color,
110
+ #{color.$root-color}
111
+ );
112
+ $button-focus-color: var(
113
+ --#{root-defaults.$prefix}-button-focus-color,
114
+ #{color.$root-color}
95
115
  );
96
116
  $button-hover-color: var(
97
117
  --#{root-defaults.$prefix}-button-hover-color,
@@ -115,6 +135,10 @@ $button-border-style: var(
115
135
  --#{root-defaults.$prefix}-botton-border-style,
116
136
  #{root-variables.$border-style}
117
137
  );
138
+ $button-border: var(
139
+ --#{root-defaults.$prefix}-button-border,
140
+ #{$button-border-width} #{$button-border-style}
141
+ );
118
142
  $button-border-radius: var(
119
143
  --#{root-defaults.$prefix}-button-border-radius,
120
144
  #{root-variables.$border-radius}
@@ -123,15 +147,23 @@ $button-border-radius: var(
123
147
  // Border colour properties.
124
148
  $button-border-color: var(
125
149
  --#{root-defaults.$prefix}-button-border-color,
126
- #{theme.get(primary, 900)}
150
+ #{color.$root-color}
151
+ );
152
+ $button-visited-border-color: var(
153
+ --#{root-defaults.$prefix}-button-visited-border-color,
154
+ #{color.$root-color}
155
+ );
156
+ $button-focus-border-color: var(
157
+ --#{root-defaults.$prefix}-button-focus-border-color,
158
+ #{color.$root-color}
127
159
  );
128
160
  $button-hover-border-color: var(
129
161
  --#{root-defaults.$prefix}-button-hover-border-color,
130
- #{theme.get(primary, 900)}
162
+ #{color.$root-color}
131
163
  );
132
164
  $button-active-border-color: var(
133
165
  --#{root-defaults.$prefix}-button-active-border-color,
134
- #{theme.get(primary, 900)}
166
+ #{color.$root-color}
135
167
  );
136
168
  $button-disabled-border-color: var(
137
169
  --#{root-defaults.$prefix}-button-disabled-border-color,
@@ -9,8 +9,7 @@
9
9
  #{defaults.$textarea-selector},
10
10
  #{defaults.$select-selector} {
11
11
  padding: $input-padding;
12
- border-width: $input-border-width;
13
- border-style: $input-border-style;
12
+ border: $input-border;
14
13
  border-radius: $input-border-radius;
15
14
  font-size: $input-font-size;
16
15
 
@@ -28,8 +27,7 @@
28
27
  flex-flow: $fieldset-direction wrap;
29
28
  gap: $fieldset-gap;
30
29
  padding: $fieldset-padding;
31
- border-width: $fieldset-border-width;
32
- border-style: $fieldset-border-style;
30
+ border: $fieldset-border;
33
31
  border-radius: $fieldset-border-radius;
34
32
  font-size: $fieldset-font-size;
35
33
 
@@ -106,6 +106,10 @@ $input-border-style: var(
106
106
  --#{root-defaults.$prefix}-botton-border-style,
107
107
  #{root-variables.$border-style}
108
108
  );
109
+ $input-border: var(
110
+ --#{root-defaults.$prefix}-input-border,
111
+ #{$input-border-width} #{$input-border-style}
112
+ );
109
113
  $input-border-radius: var(
110
114
  --#{root-defaults.$prefix}-input-border-radius,
111
115
  #{root-variables.$border-radius}
@@ -118,6 +122,10 @@ $fieldset-border-style: var(
118
122
  --#{root-defaults.$prefix}-fieldset-border-style,
119
123
  #{$input-border-style}
120
124
  );
125
+ $fieldset-border: var(
126
+ --#{root-defaults.$prefix}-fieldset-border,
127
+ #{$fieldset-border-width} #{$fieldset-border-style}
128
+ );
121
129
  $fieldset-border-radius: var(
122
130
  --#{root-defaults.$prefix}-fieldset-border-radius,
123
131
  #{$input-border-radius}
@@ -8,12 +8,43 @@
8
8
 
9
9
  // Link selectors.
10
10
  $link-selector: "a" !default;
11
+ $stretched-link-selector: ".stretched" !default;
12
+ $stretched-link-pseudo-selector: "before" !default;
11
13
 
12
14
  // Link properties.
13
- $link-text-decoration: underline;
14
- $link-hover-text-decoration: underline;
15
+ $link-text-decoration: underline !default;
16
+ $link-visited-text-decoration: $link-text-decoration !default;
17
+ $link-active-text-decoration: $link-text-decoration !default;
18
+ $link-hover-text-decoration: $link-text-decoration !default;
19
+ $link-focus-text-decoration: $link-text-decoration !default;
20
+ $link-disabled-text-decoration: $link-text-decoration !default;
21
+ $link-text-decoration-style: solid !default;
22
+ $link-visited-text-decoration-style: $link-text-decoration-style !default;
23
+ $link-active-text-decoration-style: $link-text-decoration-style !default;
24
+ $link-hover-text-decoration-style: $link-text-decoration-style !default;
25
+ $link-focus-text-decoration-style: $link-text-decoration-style !default;
26
+ $link-disabled-text-decoration-style: $link-text-decoration-style !default;
15
27
  $link-transform: none !default;
16
- $link-hover-transform: none !default;
17
- $link-hover-transform-reduced-motion: none !default;
18
- $link-active-transform: none !default;
19
- $link-active-transform-reduced-motion: none !default;
28
+ $link-visited-transform: $link-transform !default;
29
+ $link-focus-transform: $link-transform !default;
30
+ $link-hover-transform: $link-transform !default;
31
+ $link-active-transform: $link-transform !default;
32
+ $link-disabled-transform: $link-transform !default;
33
+ $link-border-width: 0 !default;
34
+ $link-border-color: transparent !default;
35
+ $link-visited-border-color: $link-border-color !default;
36
+ $link-focus-border-color: $link-border-color !default;
37
+ $link-hover-border-color: $link-border-color !default;
38
+ $link-active-border-color: $link-border-color !default;
39
+ $link-disabled-border-color: $link-border-color !default;
40
+ $link-background: transparent !default;
41
+ $link-visited-background: $link-background !default;
42
+ $link-focus-background: $link-background !default;
43
+ $link-hover-background: $link-background !default;
44
+ $link-active-background: $link-background !default;
45
+ $link-disabled-background: $link-background !default;
46
+ $link-min-width: auto;
47
+ $link-min-height: auto;
48
+
49
+ // Stretched link properties.
50
+ $stretched-link-z-index: 5 !default;
@@ -8,24 +8,70 @@
8
8
 
9
9
  @include layer(base) {
10
10
  #{defaults.$link-selector} {
11
+ min-width: $link-min-width;
12
+ min-height: $link-min-height;
11
13
  padding: $link-padding;
12
14
  transform: $link-transform;
13
15
  transition: $link-transition;
16
+ border: $link-border;
17
+ border-radius: $link-border-radius;
14
18
  text-decoration: $link-text-decoration;
19
+ text-decoration-style: $link-text-decoration-style;
15
20
  text-decoration-thickness: $link-text-decoration-thickness;
16
21
 
22
+ &:visited {
23
+ --#{root-defaults.$prefix}-link-text-decoration: #{$link-visited-text-decoration};
24
+ --#{root-defaults.$prefix}-link-text-decoration-thickness: #{$link-visited-text-decoration-thickness};
25
+ --#{root-defaults.$prefix}-link-text-decoration-style: #{$link-visited-text-decoration-style};
26
+ --#{root-defaults.$prefix}-link-transform: #{$link-visited-transform};
27
+ }
28
+
29
+ &:focus-visible {
30
+ --#{root-defaults.$prefix}-link-text-decoration: #{$link-focus-text-decoration};
31
+ --#{root-defaults.$prefix}-link-text-decoration-thickness: #{$link-focus-text-decoration-thickness};
32
+ --#{root-defaults.$prefix}-link-text-decoration-style: #{$link-focus-text-decoration-style};
33
+ --#{root-defaults.$prefix}-link-transform: #{$link-focus-transform};
34
+ }
35
+
17
36
  &:hover {
18
37
  --#{root-defaults.$prefix}-link-text-decoration: #{$link-hover-text-decoration};
19
38
  --#{root-defaults.$prefix}-link-text-decoration-thickness: #{$link-hover-text-decoration-thickness};
39
+ --#{root-defaults.$prefix}-link-text-decoration-style: #{$link-hover-text-decoration-style};
20
40
  --#{root-defaults.$prefix}-link-transform: #{$link-hover-transform};
21
41
  }
22
42
 
23
43
  &:active {
44
+ --#{root-defaults.$prefix}-link-text-decoration: #{$link-active-text-decoration};
45
+ --#{root-defaults.$prefix}-link-text-decoration-thickness: #{$link-active-text-decoration-thickness};
46
+ --#{root-defaults.$prefix}-link-text-decoration-style: #{$link-active-text-decoration-style};
24
47
  --#{root-defaults.$prefix}-link-transform: #{$link-active-transform};
25
48
  }
26
49
 
50
+ &:disabled,
27
51
  &[disabled] {
28
52
  cursor: not-allowed;
53
+
54
+ &,
55
+ &:visited,
56
+ &:focus-visible,
57
+ &:hover,
58
+ &:active {
59
+ --#{root-defaults.$prefix}-link-text-decoration: #{$link-disabled-text-decoration};
60
+ --#{root-defaults.$prefix}-link-text-decoration-thickness: #{$link-disabled-text-decoration-thickness};
61
+ --#{root-defaults.$prefix}-link-text-decoration-style: #{$link-disabled-text-decoration-style};
62
+ --#{root-defaults.$prefix}-link-transform: #{$link-disabled-transform};
63
+ }
64
+ }
65
+
66
+ &#{defaults.$stretched-link-selector} {
67
+ isolation: isolate;
68
+
69
+ &::#{defaults.$stretched-link-pseudo-selector} {
70
+ content: "";
71
+ position: absolute;
72
+ inset: 0;
73
+ z-index: $stretched-link-z-index;
74
+ }
29
75
  }
30
76
  }
31
77
 
@@ -38,37 +84,51 @@
38
84
 
39
85
  @include layer(theme) {
40
86
  #{defaults.$link-selector} {
87
+ border-color: $link-border-color;
41
88
  background: $link-background;
42
89
  color: $link-color;
90
+ text-decoration-color: $link-text-decoration-color;
91
+
92
+ &:visited {
93
+ --#{root-defaults.$prefix}-link-color: #{$link-visited-color};
94
+ --#{root-defaults.$prefix}-link-background: #{$link-visited-background};
95
+ --#{root-defaults.$prefix}-link-border-color: #{$link-visited-border-color};
96
+ --#{root-defaults.$prefix}-link-text-decoration-color: #{$link-visited-text-decoration-color};
97
+ }
98
+
99
+ &:focus-visible {
100
+ --#{root-defaults.$prefix}-link-color: #{$link-focus-color};
101
+ --#{root-defaults.$prefix}-link-background: #{$link-focus-background};
102
+ --#{root-defaults.$prefix}-link-border-color: #{$link-focus-border-color};
103
+ --#{root-defaults.$prefix}-link-text-decoration-color: #{$link-focus-text-decoration-color};
104
+ }
43
105
 
44
106
  &:hover {
45
107
  --#{root-defaults.$prefix}-link-color: #{$link-hover-color};
46
108
  --#{root-defaults.$prefix}-link-background: #{$link-hover-background};
109
+ --#{root-defaults.$prefix}-link-border-color: #{$link-hover-border-color};
110
+ --#{root-defaults.$prefix}-link-text-decoration-color: #{$link-hover-text-decoration-color};
47
111
  }
48
112
 
49
113
  &:active {
50
114
  --#{root-defaults.$prefix}-link-color: #{$link-active-color};
51
115
  --#{root-defaults.$prefix}-link-background: #{$link-active-background};
116
+ --#{root-defaults.$prefix}-link-border-color: #{$link-active-border-color};
117
+ --#{root-defaults.$prefix}-link-text-decoration-color: #{$link-active-text-decoration-color};
52
118
  }
53
119
 
54
- // stylelint-disable no-descending-specificity
55
- &:visited {
56
- &,
57
- &:hover {
58
- --#{root-defaults.$prefix}-link-color: #{$link-visited-color};
59
- --#{root-defaults.$prefix}-link-background: #{$link-visited-background};
60
- }
61
- }
62
-
120
+ &:disabled,
63
121
  &[disabled] {
64
122
  &,
123
+ &:visited,
124
+ &:focus-visible,
65
125
  &:hover,
66
- &:active,
67
- &:visited {
126
+ &:active {
68
127
  --#{root-defaults.$prefix}-link-color: #{$link-disabled-color};
69
128
  --#{root-defaults.$prefix}-link-background: #{$link-disabled-background};
129
+ --#{root-defaults.$prefix}-link-border-color: #{$link-disabled-border-color};
130
+ --#{root-defaults.$prefix}-link-text-decoration-color: #{$link-disabled-text-decoration-color};
70
131
  }
71
132
  }
72
- // stylelint-enable no-descending-specificity
73
133
  }
74
134
  }