maverick-wave 4.3.0 → 4.4.1

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 (71) hide show
  1. package/.claude/skills/maverick-wave/SKILL.md +5 -3
  2. package/.claude/skills/maverick-wave/examples/angular-form.md +4 -0
  3. package/.claude/skills/maverick-wave/examples/static-landing-page.md +1 -1
  4. package/.claude/skills/maverick-wave/references/forms.md +27 -0
  5. package/.claude/skills/maverick-wave/references/theming.md +91 -67
  6. package/CHANGELOG.md +16 -0
  7. package/CLAUDE.md +10 -10
  8. package/README.md +109 -31
  9. package/maverick-wave.min.css +2 -2
  10. package/package.json +2 -2
  11. package/scripts/verify.js +13 -7
  12. package/src/assets/header-logo.svg +4 -4
  13. package/src/js/main.js +3 -3
  14. package/src/partials/accordions-container.html +9 -9
  15. package/src/partials/blog-posts-container.html +1 -1
  16. package/src/partials/buttons-container.html +1 -1
  17. package/src/partials/colors-container.html +75 -3
  18. package/src/partials/footer-container.html +3 -3
  19. package/src/partials/form-elements-container.html +98 -0
  20. package/src/partials/form-field-container.html +20 -4
  21. package/src/partials/get-started-container.html +36 -33
  22. package/src/partials/header-utilities-container.html +1 -1
  23. package/src/partials/modals-container.html +1 -1
  24. package/src/partials/ratings-container.html +1 -1
  25. package/src/partials/segmented-container.html +2 -2
  26. package/src/partials/tables-container.html +4 -4
  27. package/src/partials/tabs-container.html +7 -6
  28. package/src/partials/tags-container.html +1 -1
  29. package/src/partials/timelines-container.html +5 -5
  30. package/src/partials/utilities-container.html +1 -1
  31. package/src/scss/abstracts/_variables.scss +158 -46
  32. package/src/scss/base/_base.scss +1 -1
  33. package/src/scss/base/_typography.scss +2 -2
  34. package/src/scss/components/_alerts.scss +2 -2
  35. package/src/scss/components/_avatars.scss +2 -2
  36. package/src/scss/components/_blog-post.scss +5 -5
  37. package/src/scss/components/_breadcrumbs.scss +3 -3
  38. package/src/scss/components/_button-bar.scss +4 -4
  39. package/src/scss/components/_buttons.scss +6 -6
  40. package/src/scss/components/_calendar.scss +10 -10
  41. package/src/scss/components/_cards.scss +2 -2
  42. package/src/scss/components/_divider.scss +3 -3
  43. package/src/scss/components/_empty-state.scss +4 -4
  44. package/src/scss/components/_gallery.scss +1 -1
  45. package/src/scss/components/_info.scss +3 -3
  46. package/src/scss/components/_kanban.scss +12 -12
  47. package/src/scss/components/_lists.scss +12 -12
  48. package/src/scss/components/_localhost-indicator.scss +2 -2
  49. package/src/scss/components/_meta-info.scss +1 -1
  50. package/src/scss/components/_ratings.scss +1 -1
  51. package/src/scss/components/_segmented.scss +3 -3
  52. package/src/scss/components/_spinners.scss +10 -10
  53. package/src/scss/components/_stepper.scss +4 -4
  54. package/src/scss/components/_tabs.scss +5 -5
  55. package/src/scss/components/_techstack-bucket.scss +2 -2
  56. package/src/scss/components/_timelines.scss +10 -10
  57. package/src/scss/form-elements/_checkbox.scss +1 -1
  58. package/src/scss/form-elements/_form.scss +4 -4
  59. package/src/scss/form-elements/_index.scss +1 -0
  60. package/src/scss/form-elements/_input-group.scss +1 -1
  61. package/src/scss/form-elements/_input.scss +3 -3
  62. package/src/scss/form-elements/_login.scss +2 -2
  63. package/src/scss/form-elements/_prefilled.scss +65 -0
  64. package/src/scss/form-elements/_select.scss +2 -2
  65. package/src/scss/form-elements/_slider.scss +1 -1
  66. package/src/scss/form-elements/_textarea.scss +2 -2
  67. package/src/scss/layout/_footer.scss +3 -3
  68. package/src/scss/layout/_header.scss +5 -5
  69. package/src/scss/layout/_section.scss +5 -5
  70. package/src/scss/utilities/_flex.scss +1 -1
  71. package/src/scss/utilities/_text.scss +6 -6
@@ -1,6 +1,6 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Pixel-precise shape values no fractional keys in the spacing map
3
+ // Pixel-precise shape values - no fractional keys in the spacing map
4
4
  $_mw-kanban-action-size: 26px;
5
5
  $_mw-kanban-action-size-touch: 32px;
6
6
  // Room the ribbon needs in the top right corner of a ticket
@@ -22,7 +22,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
22
22
  // Board
23
23
  // ---------------------------------------------------------------------------
24
24
  .mw-kanban {
25
- // Board surface drop it with .mw-kanban-plain or override per board.
25
+ // Board surface - drop it with .mw-kanban-plain or override per board.
26
26
  --mw-kanban-background: color-mix(
27
27
  in srgb,
28
28
  var(--mw-gray-color) 40%,
@@ -30,7 +30,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
30
30
  );
31
31
  --mw-kanban-lane-border: 1px dashed
32
32
  color-mix(in srgb, var(--mw-text-muted-color) 40%, transparent);
33
- // Keeps an empty lane from collapsing onto its header raise it per board
33
+ // Keeps an empty lane from collapsing onto its header - raise it per board
34
34
  // to give a board that starts out empty some presence
35
35
  --mw-kanban-column-min-height: 120px;
36
36
 
@@ -55,7 +55,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
55
55
  }
56
56
  }
57
57
 
58
- // Board without its own surface for pages that already sit on a panel
58
+ // Board without its own surface - for pages that already sit on a panel
59
59
  .mw-kanban-plain {
60
60
  --mw-kanban-background: transparent;
61
61
  padding: spacing('0');
@@ -108,7 +108,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
108
108
  flex-shrink: 0;
109
109
  }
110
110
 
111
- // Sits on .mw-btn this only trims it down to the header's line height
111
+ // Sits on .mw-btn - this only trims it down to the header's line height
112
112
  .mw-kanban-add {
113
113
  padding: spacing('1') spacing('3');
114
114
  line-height: 1;
@@ -124,7 +124,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
124
124
  min-height: var(--mw-kanban-column-min-height);
125
125
  }
126
126
 
127
- // Ticket a plain .mw-card, only smaller
127
+ // Ticket - a plain .mw-card, only smaller
128
128
  .mw-kanban-card {
129
129
  padding: spacing('4');
130
130
 
@@ -169,7 +169,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
169
169
  line-height: 1.45;
170
170
  }
171
171
 
172
- // Footer ticket key on the left, assignee and the action buttons on the right
172
+ // Footer - ticket key on the left, assignee and the action buttons on the right
173
173
  .mw-kanban-card-footer {
174
174
  display: flex;
175
175
  align-items: center;
@@ -221,12 +221,12 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
221
221
 
222
222
  &:hover:not(:disabled) {
223
223
  background: var(--mw-primary-color);
224
- border-color: var(--mw-primary-color);
224
+ border-color: var(--mw-primary-text-color);
225
225
  color: var(--mw-accent-text-color);
226
226
  }
227
227
 
228
228
  &:focus-visible {
229
- outline: 2px solid var(--mw-primary-color);
229
+ outline: 2px solid var(--mw-primary-text-color);
230
230
  outline-offset: 2px;
231
231
  }
232
232
 
@@ -247,14 +247,14 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
247
247
  border-color: var(--mw-danger-color);
248
248
  }
249
249
 
250
- // Composer one per board, moved into whichever lane it is needed in
250
+ // Composer - one per board, moved into whichever lane it is needed in
251
251
  .mw-kanban-composer {
252
252
  display: none;
253
253
  flex-direction: column;
254
254
  gap: spacing('3');
255
255
  padding: spacing('4');
256
256
  background: var(--mw-card-background);
257
- border: 1px dashed var(--mw-primary-color);
257
+ border: 1px dashed var(--mw-primary-text-color);
258
258
  // Same silhouette as a ticket, so it reads as one being written
259
259
  border-radius: radius('sm') radius('xl') radius('sm') radius('xl');
260
260
 
@@ -310,7 +310,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
310
310
  display: none;
311
311
  }
312
312
 
313
- // Compact board for many lanes or a board next to a sidebar
313
+ // Compact board - for many lanes or a board next to a sidebar
314
314
  .mw-kanban-compact {
315
315
  --mw-kanban-column-min-height: 90px;
316
316
 
@@ -69,7 +69,7 @@
69
69
  }
70
70
 
71
71
  &:hover {
72
- color: var(--mw-primary-color);
72
+ color: var(--mw-primary-text-color);
73
73
 
74
74
  &::after {
75
75
  opacity: 1;
@@ -91,7 +91,7 @@
91
91
 
92
92
  &::marker {
93
93
  left: spacing('0');
94
- color: var(--mw-primary-color);
94
+ color: var(--mw-primary-text-color);
95
95
  }
96
96
  }
97
97
  }
@@ -108,7 +108,7 @@
108
108
 
109
109
  li::before {
110
110
  content: '✓';
111
- color: var(--mw-primary-color);
111
+ color: var(--mw-primary-text-color);
112
112
  padding-right: spacing('4');
113
113
  }
114
114
  }
@@ -124,7 +124,7 @@
124
124
 
125
125
  // Smooth focus management for accessibility
126
126
  &:focus-within {
127
- outline: 2px solid var(--mw-primary-color);
127
+ outline: 2px solid var(--mw-primary-text-color);
128
128
  outline-offset: 2px;
129
129
  border-radius: radius('sm');
130
130
  }
@@ -172,14 +172,14 @@
172
172
  top: 0;
173
173
  bottom: 0;
174
174
  width: 0;
175
- background: var(--mw-primary-color);
175
+ background: var(--mw-primary-text-color);
176
176
  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
177
177
  }
178
178
 
179
179
  &:hover {
180
180
  padding-left: spacing('4');
181
181
  background: var(--mw-primary-background-hover);
182
- border-color: var(--mw-primary-color);
182
+ border-color: var(--mw-primary-text-color);
183
183
  transform: translateX(4px);
184
184
 
185
185
  &::before {
@@ -195,12 +195,12 @@
195
195
 
196
196
  > * {
197
197
  &::before {
198
- background: var(--mw-secondary-color);
198
+ background: var(--mw-secondary-text-color);
199
199
  }
200
200
 
201
201
  &:hover {
202
202
  background: var(--mw-secondary-background-hover);
203
- border-color: var(--mw-secondary-color);
203
+ border-color: var(--mw-secondary-text-color);
204
204
  }
205
205
  }
206
206
  }
@@ -234,7 +234,7 @@
234
234
  top: 0;
235
235
  bottom: 0;
236
236
  width: 3px;
237
- background: var(--mw-primary-color);
237
+ background: var(--mw-primary-text-color);
238
238
  }
239
239
  }
240
240
 
@@ -266,7 +266,7 @@
266
266
  &:hover {
267
267
  background: var(--mw-primary-background-hover);
268
268
  padding-left: spacing('4');
269
- border-left: 3px solid var(--mw-primary-color);
269
+ border-left: 3px solid var(--mw-primary-text-color);
270
270
  }
271
271
  }
272
272
  }
@@ -516,7 +516,7 @@
516
516
  // When item is selected, add visual feedback
517
517
  &.mw-selected {
518
518
  background: var(--mw-primary-background-hover);
519
- border-left-color: var(--mw-primary-color);
519
+ border-left-color: var(--mw-primary-text-color);
520
520
  }
521
521
  }
522
522
 
@@ -619,7 +619,7 @@
619
619
 
620
620
  &.mw-selected {
621
621
  background: var(--mw-secondary-background-hover);
622
- border-left-color: var(--mw-secondary-color);
622
+ border-left-color: var(--mw-secondary-text-color);
623
623
  }
624
624
  }
625
625
  }
@@ -15,7 +15,7 @@
15
15
  // Keyframes for the pulsing indicator
16
16
  @keyframes pulse-indicator {
17
17
  0% {
18
- opacity: 0.4;
18
+ opacity: 0.5;
19
19
  box-shadow: 0 0 3px var(--mw-warning-color);
20
20
  }
21
21
  25% {
@@ -23,7 +23,7 @@
23
23
  box-shadow: 0 6px 13px var(--mw-warning-color);
24
24
  }
25
25
  100% {
26
- opacity: 0.4;
26
+ opacity: 0.5;
27
27
  box-shadow: 0 0 3px var(--mw-warning-color);
28
28
  }
29
29
  }
@@ -24,7 +24,7 @@
24
24
 
25
25
  i {
26
26
  font-size: font-size('lg');
27
- color: var(--mw-primary-color);
27
+ color: var(--mw-primary-text-color);
28
28
  flex-shrink: 0;
29
29
  }
30
30
  span {
@@ -43,7 +43,7 @@
43
43
  @for $i from 1 through 5 {
44
44
  .mw-rating[data-rating='#{$i}'] {
45
45
  & .mw-rating-icon:nth-child(-n + #{$i}) {
46
- color: var(--mw-primary-color);
46
+ color: var(--mw-primary-text-color);
47
47
  }
48
48
  }
49
49
  }
@@ -47,7 +47,7 @@
47
47
 
48
48
  // Inset, because an outline outside the item would be clipped by the frame
49
49
  &:focus-visible {
50
- outline: 2px solid var(--mw-primary-color);
50
+ outline: 2px solid var(--mw-primary-text-color);
51
51
  outline-offset: -2px;
52
52
  }
53
53
 
@@ -59,7 +59,7 @@
59
59
  &.mw-active,
60
60
  &.active {
61
61
  background: var(--mw-primary-color);
62
- border-color: var(--mw-primary-color);
62
+ border-color: var(--mw-primary-text-color);
63
63
  color: var(--mw-accent-text-color);
64
64
  }
65
65
  }
@@ -69,7 +69,7 @@
69
69
  &.mw-active,
70
70
  &.active {
71
71
  background: var(--mw-secondary-color);
72
- border-color: var(--mw-secondary-color);
72
+ border-color: var(--mw-secondary-text-color);
73
73
  }
74
74
  }
75
75
 
@@ -14,7 +14,7 @@ $_size-lg: 7.5rem;
14
14
  height: $_size-default;
15
15
  border: 0.5rem solid var(--mw-border);
16
16
  border-radius: radius('full');
17
- border-top-color: var(--mw-primary-color);
17
+ border-top-color: var(--mw-primary-text-color);
18
18
  animation: mw-spin 1.2s linear infinite;
19
19
 
20
20
  // Size variants
@@ -34,11 +34,11 @@ $_size-lg: 7.5rem;
34
34
 
35
35
  // Color variants
36
36
  &.mw-spinner-primary {
37
- border-top-color: var(--mw-primary-color);
37
+ border-top-color: var(--mw-primary-text-color);
38
38
  }
39
39
 
40
40
  &.mw-spinner-secondary {
41
- border-top-color: var(--mw-secondary-color);
41
+ border-top-color: var(--mw-secondary-text-color);
42
42
  }
43
43
  }
44
44
 
@@ -110,9 +110,9 @@ $_size-lg: 7.5rem;
110
110
  width: $_size-default;
111
111
  height: $_size-default;
112
112
  border-radius: radius('full');
113
- border: 0.5rem solid var(--mw-primary-color);
114
- border-color: var(--mw-primary-color) transparent var(--mw-primary-color)
115
- transparent;
113
+ border: 0.5rem solid var(--mw-primary-text-color);
114
+ border-color: var(--mw-primary-text-color) transparent
115
+ var(--mw-primary-text-color) transparent;
116
116
  animation: mw-spin 1.5s linear infinite;
117
117
  }
118
118
 
@@ -141,13 +141,13 @@ $_size-lg: 7.5rem;
141
141
 
142
142
  // Color variants
143
143
  &.mw-spinner-primary:after {
144
- border-color: var(--mw-primary-color) transparent var(--mw-primary-color)
145
- transparent;
144
+ border-color: var(--mw-primary-text-color) transparent
145
+ var(--mw-primary-text-color) transparent;
146
146
  }
147
147
 
148
148
  &.mw-spinner-secondary:after {
149
- border-color: var(--mw-secondary-color) transparent
150
- var(--mw-secondary-color) transparent;
149
+ border-color: var(--mw-secondary-text-color) transparent
150
+ var(--mw-secondary-text-color) transparent;
151
151
  }
152
152
  }
153
153
  }
@@ -68,12 +68,12 @@
68
68
  transition: color 0.3s ease;
69
69
 
70
70
  &.mw-active {
71
- color: var(--mw-primary-color);
71
+ color: var(--mw-primary-text-color);
72
72
  font-weight: font-weight('medium');
73
73
  }
74
74
 
75
75
  &.mw-done {
76
- color: var(--mw-success-color);
76
+ color: var(--mw-success-text-color);
77
77
  }
78
78
  }
79
79
 
@@ -114,7 +114,7 @@
114
114
  }
115
115
 
116
116
  &.mw-done:not(:last-child)::after {
117
- background: var(--mw-primary-color);
117
+ background: var(--mw-primary-text-color);
118
118
  }
119
119
  }
120
120
 
@@ -134,7 +134,7 @@
134
134
  margin-bottom: spacing('1');
135
135
 
136
136
  .mw-stepper-step.mw-active & {
137
- color: var(--mw-primary-color);
137
+ color: var(--mw-primary-text-color);
138
138
  }
139
139
  }
140
140
 
@@ -35,13 +35,13 @@
35
35
  white-space: nowrap;
36
36
 
37
37
  &:hover {
38
- color: var(--mw-primary-color);
38
+ color: var(--mw-primary-text-color);
39
39
  }
40
40
 
41
41
  &.mw-active,
42
42
  &.active {
43
- color: var(--mw-primary-color);
44
- border-bottom-color: var(--mw-primary-color);
43
+ color: var(--mw-primary-text-color);
44
+ border-bottom-color: var(--mw-primary-text-color);
45
45
  }
46
46
  }
47
47
 
@@ -103,7 +103,7 @@
103
103
 
104
104
  &.mw-active,
105
105
  &.active {
106
- border-right-color: var(--mw-primary-color);
106
+ border-right-color: var(--mw-primary-text-color);
107
107
  }
108
108
 
109
109
  @include media-down('sm') {
@@ -114,7 +114,7 @@
114
114
  &.mw-active,
115
115
  &.active {
116
116
  border-right-color: transparent;
117
- border-bottom-color: var(--mw-primary-color);
117
+ border-bottom-color: var(--mw-primary-text-color);
118
118
  }
119
119
  }
120
120
  }
@@ -35,14 +35,14 @@
35
35
  &:hover {
36
36
  transform: translateY(-2px);
37
37
  box-shadow: 0 3px 10px var(--mw-shadow);
38
- border-color: var(--mw-primary-color);
38
+ border-color: var(--mw-primary-text-color);
39
39
 
40
40
  .mw-techstack-logo {
41
41
  transform: scale(1.1);
42
42
  }
43
43
 
44
44
  .mw-techstack-name {
45
- color: var(--mw-primary-color);
45
+ color: var(--mw-primary-text-color);
46
46
  }
47
47
  }
48
48
  }
@@ -28,7 +28,7 @@ $_simple-date-width: 110px;
28
28
 
29
29
  @keyframes mw-pulse-ring-big {
30
30
  0% {
31
- box-shadow: 0 0 0 0 var(--mw-primary-color);
31
+ box-shadow: 0 0 0 0 var(--mw-primary-text-color);
32
32
  }
33
33
  70% {
34
34
  box-shadow: 0 0 0 13px transparent;
@@ -40,7 +40,7 @@ $_simple-date-width: 110px;
40
40
 
41
41
  @keyframes mw-pulse-ring-simple {
42
42
  0% {
43
- box-shadow: 0 0 0 0 var(--mw-primary-color);
43
+ box-shadow: 0 0 0 0 var(--mw-primary-text-color);
44
44
  }
45
45
  70% {
46
46
  box-shadow: 0 0 0 5px transparent;
@@ -65,7 +65,7 @@ $_simple-date-width: 110px;
65
65
  top: 0;
66
66
  width: $_border-width-big;
67
67
  height: 100%;
68
- background: var(--mw-primary-color);
68
+ background: var(--mw-primary-text-color);
69
69
  transform: translateX(-50%);
70
70
  }
71
71
 
@@ -79,7 +79,7 @@ $_simple-date-width: 110px;
79
79
  &-date-container {
80
80
  position: relative;
81
81
  z-index: z-index('card');
82
- border: $_border-width-big solid var(--mw-primary-color);
82
+ border: $_border-width-big solid var(--mw-primary-text-color);
83
83
  background: var(--mw-card-background);
84
84
  border-radius: radius('md');
85
85
  padding: spacing('3') spacing('4');
@@ -148,7 +148,7 @@ $_simple-date-width: 110px;
148
148
  animation-name: mw-slide-in-left;
149
149
 
150
150
  .mw-timeline-big-event {
151
- border-right: 2px solid var(--mw-secondary-color);
151
+ border-right: 2px solid var(--mw-secondary-text-color);
152
152
  border-top-right-radius: radius('none');
153
153
  border-bottom-right-radius: radius('none');
154
154
  text-align: right;
@@ -164,7 +164,7 @@ $_simple-date-width: 110px;
164
164
  animation-name: mw-slide-in-right;
165
165
 
166
166
  .mw-timeline-big-event {
167
- border-left: 2px solid var(--mw-secondary-color);
167
+ border-left: 2px solid var(--mw-secondary-text-color);
168
168
  border-top-left-radius: radius('none');
169
169
  border-bottom-left-radius: radius('none');
170
170
  text-align: left;
@@ -182,7 +182,7 @@ $_simple-date-width: 110px;
182
182
  &-step.mw-active &-date-container,
183
183
  &-step.active &-date-container {
184
184
  background: var(--mw-primary-color);
185
- border-color: var(--mw-primary-color);
185
+ border-color: var(--mw-primary-text-color);
186
186
  transform: scale(1.1);
187
187
  animation: mw-pulse-ring-big 2s infinite;
188
188
 
@@ -227,7 +227,7 @@ $_simple-date-width: 110px;
227
227
 
228
228
  .mw-timeline-big-event {
229
229
  border-right: none;
230
- border-left: 2px solid var(--mw-secondary-color);
230
+ border-left: 2px solid var(--mw-secondary-text-color);
231
231
  border-top-right-radius: radius('sm');
232
232
  border-bottom-right-radius: radius('sm');
233
233
  text-align: left;
@@ -264,7 +264,7 @@ $_simple-date-width: 110px;
264
264
  top: 0;
265
265
  width: $_border-width-simple;
266
266
  height: 100%;
267
- background: var(--mw-primary-color);
267
+ background: var(--mw-primary-text-color);
268
268
  transform: translateX(-50%);
269
269
  }
270
270
 
@@ -282,7 +282,7 @@ $_simple-date-width: 110px;
282
282
  font-size: font-size('sm');
283
283
  padding: spacing('2');
284
284
  border-radius: radius('md');
285
- border: $_border-width-simple solid var(--mw-primary-color);
285
+ border: $_border-width-simple solid var(--mw-primary-text-color);
286
286
  background: var(--mw-card-background);
287
287
  line-height: 1.1;
288
288
  position: relative;
@@ -5,7 +5,7 @@ $_size-sm: spacing('5');
5
5
  $_size-default: spacing('6');
6
6
  $_size-lg: spacing('7');
7
7
 
8
- // Checkmark dimensions (not from spacing map these are shape-drawing values)
8
+ // Checkmark dimensions (not from spacing map - these are shape-drawing values)
9
9
  $_check-sm-w: 9px;
10
10
  $_check-sm-h: 6px;
11
11
  $_check-default-w: 14px;
@@ -84,7 +84,7 @@
84
84
  }
85
85
  }
86
86
 
87
- // ===== Form Field label + input + hint + error as a unit =====
87
+ // ===== Form Field - label + input + hint + error as a unit =====
88
88
  // Designed e.g. for Angular reactive forms pattern:
89
89
  // <div class="mw-field">
90
90
  // <label class="mw-field-label mw-required">Email</label>
@@ -103,11 +103,11 @@
103
103
  color: var(--mw-text-color);
104
104
  }
105
105
 
106
- // Required field asterisk add class mw-required or attribute data-required
106
+ // Required field asterisk - add class mw-required or attribute data-required
107
107
  &-label.mw-required::after,
108
108
  &-label[data-required='true']::after {
109
109
  content: ' *';
110
- color: var(--mw-danger-color);
110
+ color: var(--mw-danger-text-color);
111
111
  font-weight: font-weight('bold');
112
112
  }
113
113
 
@@ -118,7 +118,7 @@
118
118
 
119
119
  &-error {
120
120
  font-size: font-size('xs');
121
- color: var(--mw-danger-color);
121
+ color: var(--mw-danger-text-color);
122
122
  display: flex;
123
123
  align-items: center;
124
124
  gap: spacing('1');
@@ -8,3 +8,4 @@
8
8
  @forward 'slider';
9
9
  @forward 'textarea';
10
10
  @forward 'toggle';
11
+ @forward 'prefilled';
@@ -84,7 +84,7 @@
84
84
  }
85
85
  }
86
86
 
87
- // Size variants applied to the group, cascades to prefix/suffix
87
+ // Size variants - applied to the group, cascades to prefix/suffix
88
88
  &-sm {
89
89
  .mw-input-group-prefix,
90
90
  .mw-input-group-suffix {
@@ -27,7 +27,7 @@
27
27
  }
28
28
 
29
29
  &:read-only {
30
- background: var(--mw-gray-background);
30
+ background-color: var(--mw-gray-background);
31
31
  color: var(--mw-text-muted-color);
32
32
  cursor: default;
33
33
  box-shadow: none;
@@ -66,7 +66,7 @@
66
66
  }
67
67
  }
68
68
 
69
- // Date / time inputs style the native picker indicator
69
+ // Date / time inputs - style the native picker indicator
70
70
  &[type='date'],
71
71
  &[type='time'],
72
72
  &[type='datetime-local'] {
@@ -85,7 +85,7 @@
85
85
 
86
86
  // disabled state
87
87
  &:disabled {
88
- background: var(--mw-gray-background);
88
+ background-color: var(--mw-gray-background);
89
89
  color: var(--mw-text-muted-color);
90
90
  cursor: not-allowed;
91
91
  }
@@ -39,11 +39,11 @@
39
39
 
40
40
  // Variants
41
41
  &-info {
42
- color: var(--mw-info-color);
42
+ color: var(--mw-info-text-color);
43
43
  }
44
44
 
45
45
  &-error {
46
- color: var(--mw-danger-color);
46
+ color: var(--mw-danger-text-color);
47
47
  }
48
48
 
49
49
  // Multiple messages spacing
@@ -0,0 +1,65 @@
1
+ @use '../abstracts' as *;
2
+
3
+ // ===== Prefilled marker =====
4
+ // Marks a control whose value did not come from the user in this session -
5
+ // loaded from an existing record, restored from a draft, filled with a
6
+ // default. Add `mw-prefilled` to the control itself, not to the wrapper, so
7
+ // it also works outside `mw-field` (input groups, standalone selects).
8
+
9
+ $_marker-sm: 10px;
10
+ $_marker-base: 12px;
11
+ $_marker-lg: 14px;
12
+
13
+ // 135deg puts the hard edge on the anti-diagonal, which fills the top left
14
+ // half of the background box - a right triangle pointing into the corner.
15
+ $_marker-image: linear-gradient(
16
+ 135deg,
17
+ var(--mw-info-color) 50%,
18
+ transparent 50%
19
+ );
20
+
21
+ @mixin _marker($size) {
22
+ background-image: $_marker-image;
23
+ background-repeat: no-repeat;
24
+ background-position: left top;
25
+ background-size: $size $size;
26
+ }
27
+
28
+ // A select already paints its arrow, so adding a layer means restating both.
29
+ @mixin _marker-select($size, $arrow-inset, $arrow-size) {
30
+ background-image: $_marker-image, $select-arrow-image;
31
+ background-repeat: no-repeat;
32
+ background-position:
33
+ left top,
34
+ right $arrow-inset center;
35
+ background-size:
36
+ $size $size,
37
+ $arrow-size $arrow-size;
38
+ }
39
+
40
+ .mw-prefilled {
41
+ @include _marker($_marker-base);
42
+
43
+ &.mw-input-sm,
44
+ &.mw-textarea-sm {
45
+ @include _marker($_marker-sm);
46
+ }
47
+
48
+ &.mw-input-lg,
49
+ &.mw-textarea-lg {
50
+ @include _marker($_marker-lg);
51
+ }
52
+
53
+ // Selects last: each size restates the arrow layer it would otherwise lose.
54
+ &.mw-select {
55
+ @include _marker-select($_marker-base, spacing('3'), spacing('3'));
56
+ }
57
+
58
+ &.mw-select-sm {
59
+ @include _marker-select($_marker-sm, spacing('2'), spacing('2'));
60
+ }
61
+
62
+ &.mw-select-lg {
63
+ @include _marker-select($_marker-lg, spacing('4'), spacing('4'));
64
+ }
65
+ }
@@ -11,7 +11,7 @@
11
11
  transition: var(--mw-transition);
12
12
  appearance: none;
13
13
  -webkit-appearance: none;
14
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath fill='%23666' d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");
14
+ background-image: $select-arrow-image;
15
15
  background-repeat: no-repeat;
16
16
  background-position: right spacing('3') center;
17
17
  background-size: spacing('3') spacing('3');
@@ -44,7 +44,7 @@
44
44
 
45
45
  // disabled state
46
46
  &:disabled {
47
- background: var(--mw-gray-background);
47
+ background-color: var(--mw-gray-background);
48
48
  color: var(--mw-text-muted-color);
49
49
  cursor: not-allowed;
50
50
  }