maverick-wave 5.38.0 → 6.0.0

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 (69) hide show
  1. package/README.md +63 -47
  2. package/maverick-wave.min.css +94 -68
  3. package/maverick-wave.min.js +1 -1
  4. package/package.json +7 -7
  5. package/src/js/main.js +382 -57
  6. package/src/scss/abstracts/_mixins.scss +35 -24
  7. package/src/scss/abstracts/_variables.scss +15 -0
  8. package/src/scss/base/_base.scss +107 -64
  9. package/src/scss/base/_index.scss +1 -0
  10. package/src/scss/base/_page-transitions.scss +29 -0
  11. package/src/scss/base/_reset.scss +0 -8
  12. package/src/scss/components/_accordions.scss +23 -18
  13. package/src/scss/components/_action-bar.scss +143 -0
  14. package/src/scss/components/_alerts.scss +13 -1
  15. package/src/scss/components/_avatars.scss +17 -0
  16. package/src/scss/components/_badge.scss +12 -0
  17. package/src/scss/components/_breadcrumbs.scss +10 -2
  18. package/src/scss/components/_chat.scss +250 -0
  19. package/src/scss/components/_code.scss +3 -1
  20. package/src/scss/components/_compare.scss +135 -0
  21. package/src/scss/components/_deck.scss +8 -14
  22. package/src/scss/components/_devices.scss +323 -0
  23. package/src/scss/components/_dropdown.scss +43 -2
  24. package/src/scss/components/_empty-state.scss +43 -0
  25. package/src/scss/components/_flag.scss +16 -0
  26. package/src/scss/components/_index.scss +6 -0
  27. package/src/scss/components/_lightbox.scss +1 -1
  28. package/src/scss/components/_marquee.scss +132 -0
  29. package/src/scss/components/_modals.scss +112 -83
  30. package/src/scss/components/_occasions.scss +62 -11
  31. package/src/scss/components/_pagination.scss +91 -0
  32. package/src/scss/components/_portrait-gallery.scss +1 -1
  33. package/src/scss/components/_progress.scss +122 -2
  34. package/src/scss/components/_segmented.scss +65 -2
  35. package/src/scss/components/_skeleton.scss +8 -0
  36. package/src/scss/components/_spinners.scss +38 -0
  37. package/src/scss/components/_stat.scss +232 -0
  38. package/src/scss/components/_stepper.scss +42 -2
  39. package/src/scss/components/_stories.scss +36 -22
  40. package/src/scss/components/_tables.scss +160 -17
  41. package/src/scss/components/_tabs.scss +42 -4
  42. package/src/scss/components/_tags.scss +39 -4
  43. package/src/scss/components/_tiles.scss +1 -1
  44. package/src/scss/components/_timelines.scss +138 -1
  45. package/src/scss/components/_toasts.scss +5 -1
  46. package/src/scss/components/_tooltip.scss +13 -0
  47. package/src/scss/form-elements/_checkbox.scss +40 -7
  48. package/src/scss/form-elements/_form.scss +2 -4
  49. package/src/scss/form-elements/_input.scss +9 -6
  50. package/src/scss/form-elements/_radio.scss +32 -3
  51. package/src/scss/form-elements/_select.scss +44 -1
  52. package/src/scss/form-elements/_slider.scss +18 -0
  53. package/src/scss/form-elements/_textarea.scss +9 -6
  54. package/src/scss/form-elements/_toggle.scss +37 -4
  55. package/src/scss/layout/_app-shell.scss +661 -0
  56. package/src/scss/layout/_bento.scss +43 -0
  57. package/src/scss/layout/_footer.scss +114 -2
  58. package/src/scss/layout/_grid.scss +7 -2
  59. package/src/scss/layout/_header-reveal.scss +30 -17
  60. package/src/scss/layout/_header.scss +21 -4
  61. package/src/scss/layout/_index.scss +2 -0
  62. package/src/scss/layout/_parallax.scss +13 -11
  63. package/src/scss/utilities/_accessibility.scss +4 -19
  64. package/src/scss/utilities/_index.scss +1 -0
  65. package/src/scss/utilities/_print.scss +7 -3
  66. package/src/scss/utilities/_reveal.scss +25 -17
  67. package/src/scss/utilities/_shape.scss +24 -0
  68. package/src/scss/utilities/_touch-targets.scss +23 -0
  69. package/src/scss/utilities/_variants.scss +25 -6
@@ -14,20 +14,23 @@
14
14
  transition: var(--mw-transition);
15
15
  font-family: inherit;
16
16
 
17
+ // Firefox fades placeholders by default, which took the muted ink to 2.4:1
17
18
  &::placeholder {
18
19
  color: var(--mw-text-muted-color);
19
- opacity: 0.7;
20
+ opacity: 1;
20
21
  }
21
22
 
22
- &:hover:not(:focus):not(:read-only):not(:disabled) {
23
+ &:hover:not(:focus, [readonly], :disabled) {
23
24
  border-color: var(--mw-gray-color);
24
25
  }
25
26
 
26
27
  @include field-focus;
27
28
 
28
- &:read-only {
29
- background-color: var(--mw-gray-background);
30
- color: var(--mw-text-muted-color);
29
+ // Not :read-only, which also matches colour, range and file inputs
30
+ &[readonly] {
31
+ // Light and in full ink in both themes - the value is content
32
+ background-color: var(--mw-form-elements-readonly-background);
33
+ color: var(--mw-form-elements-color);
31
34
  cursor: default;
32
35
  box-shadow: none;
33
36
  }
@@ -84,7 +87,7 @@
84
87
  }
85
88
 
86
89
  &:disabled {
87
- background-color: var(--mw-gray-background);
90
+ background-color: var(--mw-form-elements-disabled-background);
88
91
  color: var(--mw-text-muted-color);
89
92
  cursor: not-allowed;
90
93
  }
@@ -28,12 +28,19 @@
28
28
  min-height: 1.5rem;
29
29
  cursor: pointer;
30
30
  user-select: none;
31
+ position: relative;
32
+ isolation: isolate;
31
33
 
34
+ // Row-sized for touch exploration, behind the content so a label link works
32
35
  input[type='radio'] {
33
36
  position: absolute;
37
+ inset: 0;
38
+ z-index: -1;
39
+ width: 100%;
40
+ height: 100%;
41
+ margin: spacing('0');
34
42
  opacity: 0;
35
- width: 0;
36
- height: 0;
43
+ cursor: inherit;
37
44
  }
38
45
 
39
46
  .mw-radio-button {
@@ -65,9 +72,17 @@
65
72
  border-color: var(--mw-primary-color);
66
73
  }
67
74
 
75
+ &:hover input[type='radio']:not(:checked, :disabled) + .mw-radio-button {
76
+ border-color: var(--mw-gray-color);
77
+ }
78
+
68
79
  input[type='radio']:checked + .mw-radio-button {
69
80
  border-color: var(--mw-primary-color);
70
81
  }
82
+
83
+ input[type='radio']:is(#{$invalid-states}) + .mw-radio-button {
84
+ border-color: var(--mw-danger-color);
85
+ }
71
86
  input[type='radio']:checked + .mw-radio-button::after {
72
87
  transform: translate(-50%, -50%) scale(1);
73
88
  }
@@ -107,7 +122,8 @@
107
122
  }
108
123
  }
109
124
 
110
- &-disabled {
125
+ &-disabled,
126
+ &:has(input[type='radio']:disabled) {
111
127
  cursor: not-allowed;
112
128
 
113
129
  input[type='radio'] {
@@ -121,4 +137,17 @@
121
137
  }
122
138
  }
123
139
  }
140
+
141
+ // Forced colours drop the dot's fill and the focus halo - the whole state
142
+ @media (forced-colors: active) {
143
+ .mw-radio input[type='radio']:checked + .mw-radio-button::after {
144
+ forced-color-adjust: none;
145
+ background: CanvasText;
146
+ }
147
+
148
+ .mw-radio input[type='radio']:focus-visible + .mw-radio-button {
149
+ outline: 2px solid;
150
+ outline-offset: 2px;
151
+ }
152
+ }
124
153
  }
@@ -42,9 +42,52 @@
42
42
  }
43
43
 
44
44
  &:disabled {
45
- background-color: var(--mw-gray-background);
45
+ background-color: var(--mw-form-elements-disabled-background);
46
46
  color: var(--mw-text-muted-color);
47
47
  cursor: not-allowed;
48
48
  }
49
49
  }
50
+
51
+ // Opt-in: the page draws the open list where base-select exists, else native
52
+ @supports (appearance: base-select) {
53
+ .mw-select-custom,
54
+ .mw-select-custom::picker(select) {
55
+ appearance: base-select;
56
+ }
57
+
58
+ // The field keeps the framework's arrow, base-select would add its own
59
+ .mw-select-custom::picker-icon {
60
+ display: none;
61
+ }
62
+
63
+ .mw-select-custom::picker(select) {
64
+ margin-block: spacing('1');
65
+ padding: spacing('1');
66
+ border: 1px solid var(--mw-border);
67
+ border-radius: radius('md');
68
+ background: var(--mw-form-elements-background);
69
+ color: var(--mw-form-elements-color);
70
+ box-shadow: var(--mw-elevation-4);
71
+ }
72
+
73
+ .mw-select-custom option {
74
+ padding: spacing('2') spacing('3');
75
+ border-radius: radius('sm');
76
+ cursor: pointer;
77
+ @include focus-ring-inset;
78
+
79
+ &:hover,
80
+ &:focus-visible {
81
+ background: var(--mw-primary-background);
82
+ }
83
+
84
+ &:checked {
85
+ font-weight: font-weight('medium');
86
+ }
87
+
88
+ &::checkmark {
89
+ color: var(--mw-primary-text-color);
90
+ }
91
+ }
92
+ }
50
93
  }
@@ -121,4 +121,22 @@
121
121
  }
122
122
  }
123
123
  }
124
+
125
+ // The filled track is a gradient, which forced colours would drop
126
+ @media (forced-colors: active) {
127
+ .mw-slider {
128
+ forced-color-adjust: none;
129
+ --fill: Highlight;
130
+ --track: GrayText;
131
+ --mw-focus-ring-color: CanvasText;
132
+
133
+ &::-webkit-slider-thumb {
134
+ border-color: CanvasText;
135
+ }
136
+
137
+ &::-moz-range-thumb {
138
+ border-color: CanvasText;
139
+ }
140
+ }
141
+ }
124
142
  }
@@ -29,20 +29,23 @@
29
29
  max-height: 60dvh;
30
30
  }
31
31
 
32
+ // Firefox fades placeholders by default, which took the muted ink to 2.4:1
32
33
  &::placeholder {
33
34
  color: var(--mw-text-muted-color);
34
- opacity: 0.7;
35
+ opacity: 1;
35
36
  }
36
37
 
37
- &:hover:not(:focus):not(:read-only):not(:disabled) {
38
+ &:hover:not(:focus, [readonly], :disabled) {
38
39
  border-color: var(--mw-gray-color);
39
40
  }
40
41
 
41
42
  @include field-focus;
42
43
 
43
- &:read-only {
44
- background-color: var(--mw-gray-background);
45
- color: var(--mw-text-muted-color);
44
+ // Not :read-only, which also matches colour, range and file inputs
45
+ &[readonly] {
46
+ // Light and in full ink in both themes - the value is content
47
+ background-color: var(--mw-form-elements-readonly-background);
48
+ color: var(--mw-form-elements-color);
46
49
  cursor: default;
47
50
  box-shadow: none;
48
51
  }
@@ -68,7 +71,7 @@
68
71
  }
69
72
 
70
73
  &:disabled {
71
- background-color: var(--mw-gray-background);
74
+ background-color: var(--mw-form-elements-disabled-background);
72
75
  color: var(--mw-text-muted-color);
73
76
  cursor: not-allowed;
74
77
  }
@@ -31,13 +31,18 @@
31
31
  cursor: pointer;
32
32
  user-select: none;
33
33
  position: relative;
34
+ isolation: isolate;
34
35
 
36
+ // Row-sized for touch exploration, behind the content so a label link works
35
37
  input[type='checkbox'] {
36
38
  position: absolute;
37
- opacity: 0;
38
- width: 0;
39
- height: 0;
39
+ inset: 0;
40
+ z-index: -1;
41
+ width: 100%;
42
+ height: 100%;
40
43
  margin: spacing('0');
44
+ opacity: 0;
45
+ cursor: inherit;
41
46
  }
42
47
 
43
48
  .mw-toggle-track {
@@ -135,7 +140,8 @@
135
140
  }
136
141
  }
137
142
 
138
- &-disabled {
143
+ &-disabled,
144
+ &:has(input[type='checkbox']:disabled) {
139
145
  cursor: not-allowed;
140
146
  opacity: 0.45;
141
147
 
@@ -161,4 +167,31 @@
161
167
  }
162
168
  }
163
169
  }
170
+
171
+ // Track and knob are fills, which forced colours take away - system colours
172
+ @media (forced-colors: active) {
173
+ .mw-toggle-track {
174
+ forced-color-adjust: none;
175
+ background: Canvas;
176
+ outline: 1px solid CanvasText;
177
+
178
+ &::after {
179
+ background: CanvasText;
180
+ box-shadow: none;
181
+ }
182
+ }
183
+
184
+ .mw-toggle input[type='checkbox']:checked + .mw-toggle-track {
185
+ background: Highlight;
186
+
187
+ &::after {
188
+ background: HighlightText;
189
+ }
190
+ }
191
+
192
+ .mw-toggle input[type='checkbox']:focus-visible + .mw-toggle-track {
193
+ outline: 2px solid CanvasText;
194
+ outline-offset: 2px;
195
+ }
196
+ }
164
197
  }