maverick-wave 4.27.0 → 5.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 (140) hide show
  1. package/.claude/settings.local.json +29 -1
  2. package/.claude/skills/mw-maverick-wave/SKILL.md +42 -25
  3. package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
  4. package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
  5. package/.claude/skills/mw-maverick-wave/references/components.md +90 -5
  6. package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
  7. package/.claude/skills/mw-maverick-wave/references/javascript.md +18 -4
  8. package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
  9. package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
  10. package/.impeccable/config.local.json +5 -0
  11. package/.impeccable/hook.cache.json +1 -0
  12. package/CHANGELOG.md +17 -0
  13. package/CLAUDE.md +5 -5
  14. package/README.md +48 -4
  15. package/index.html +19 -38
  16. package/maverick-wave.min.css +14 -12
  17. package/maverick-wave.min.js +1 -1
  18. package/package.json +2 -2
  19. package/scripts/verify.js +27 -2
  20. package/src/js/main.js +266 -75
  21. package/src/partials/accordions-container.html +6 -10
  22. package/src/partials/alerts-container.html +6 -6
  23. package/src/partials/announcement-container.html +5 -5
  24. package/src/partials/avatars-container.html +85 -17
  25. package/src/partials/badges-container.html +6 -6
  26. package/src/partials/blog-posts-container.html +11 -12
  27. package/src/partials/buttons-container.html +3 -3
  28. package/src/partials/cards-container.html +26 -9
  29. package/src/partials/code-container.html +5 -5
  30. package/src/partials/content-slider-container.html +5 -4
  31. package/src/partials/divider-container.html +7 -7
  32. package/src/partials/dropdown-container.html +2 -2
  33. package/src/partials/empty-state-container.html +5 -5
  34. package/src/partials/footer-container.html +21 -18
  35. package/src/partials/form-elements-container.html +14 -14
  36. package/src/partials/gallery-container.html +16 -8
  37. package/src/partials/get-started-container.html +4 -8
  38. package/src/partials/header-container.html +18 -7
  39. package/src/partials/header-utilities-container.html +192 -5
  40. package/src/partials/home-container.html +10 -20
  41. package/src/partials/input-group-container.html +11 -2
  42. package/src/partials/kbd-container.html +1 -1
  43. package/src/partials/login-container.html +5 -1
  44. package/src/partials/media-container.html +2 -2
  45. package/src/partials/modals-container.html +22 -32
  46. package/src/partials/pricing-container.html +9 -9
  47. package/src/partials/skeleton-container.html +6 -6
  48. package/src/partials/stepper-container.html +2 -2
  49. package/src/partials/tables-container.html +12 -12
  50. package/src/partials/tabs-container.html +17 -27
  51. package/src/partials/tags-container.html +23 -17
  52. package/src/partials/techstack-bucket-container.html +13 -0
  53. package/src/partials/tiles-container.html +26 -9
  54. package/src/partials/typography-container.html +7 -6
  55. package/src/partials/utilities-container.html +35 -15
  56. package/src/scss/_layers.scss +10 -0
  57. package/src/scss/abstracts/_index.scss +6 -0
  58. package/src/scss/abstracts/_mixins.scss +61 -153
  59. package/src/scss/abstracts/_variables.scss +123 -319
  60. package/src/scss/base/_base.scss +170 -190
  61. package/src/scss/base/_reset.scss +106 -104
  62. package/src/scss/base/_typography.scss +153 -151
  63. package/src/scss/components/_accordions.scss +97 -97
  64. package/src/scss/components/_alerts.scss +71 -70
  65. package/src/scss/components/_announcement.scss +71 -70
  66. package/src/scss/components/_avatars.scss +130 -142
  67. package/src/scss/components/_badge.scss +131 -132
  68. package/src/scss/components/_blog-post.scss +223 -220
  69. package/src/scss/components/_breadcrumbs.scss +93 -92
  70. package/src/scss/components/_button-bar.scss +102 -110
  71. package/src/scss/components/_buttons.scss +319 -324
  72. package/src/scss/components/_calendar.scss +251 -252
  73. package/src/scss/components/_cards.scss +359 -386
  74. package/src/scss/components/_code.scss +190 -194
  75. package/src/scss/components/_coming-soon.scss +77 -75
  76. package/src/scss/components/_content-slider.scss +90 -89
  77. package/src/scss/components/_divider.scss +55 -53
  78. package/src/scss/components/_dropdown.scss +179 -185
  79. package/src/scss/components/_empty-state.scss +57 -57
  80. package/src/scss/components/_flag.scss +325 -0
  81. package/src/scss/components/_gallery.scss +131 -133
  82. package/src/scss/components/_index.scss +2 -0
  83. package/src/scss/components/_info.scss +151 -167
  84. package/src/scss/components/_kanban.scss +332 -341
  85. package/src/scss/components/_kbd.scss +40 -38
  86. package/src/scss/components/_lang-switch.scss +108 -0
  87. package/src/scss/components/_links.scss +21 -28
  88. package/src/scss/components/_lists.scss +510 -514
  89. package/src/scss/components/_localhost-indicator.scss +26 -24
  90. package/src/scss/components/_media.scss +22 -20
  91. package/src/scss/components/_meta-info.scss +35 -33
  92. package/src/scss/components/_modals.scss +277 -186
  93. package/src/scss/components/_pagination.scss +81 -87
  94. package/src/scss/components/_panels.scss +99 -97
  95. package/src/scss/components/_pricing.scss +183 -241
  96. package/src/scss/components/_progress.scss +112 -89
  97. package/src/scss/components/_prose.scss +35 -33
  98. package/src/scss/components/_ratings.scss +40 -38
  99. package/src/scss/components/_segmented.scss +82 -84
  100. package/src/scss/components/_skeleton.scss +66 -72
  101. package/src/scss/components/_spinners.scss +155 -159
  102. package/src/scss/components/_stepper.scss +116 -116
  103. package/src/scss/components/_tables.scss +155 -148
  104. package/src/scss/components/_tabs.scss +232 -141
  105. package/src/scss/components/_tags.scss +109 -107
  106. package/src/scss/components/_techstack-bucket.scss +123 -122
  107. package/src/scss/components/_testimonial.scss +72 -70
  108. package/src/scss/components/_theme-toggle.scss +53 -51
  109. package/src/scss/components/_tiles.scss +174 -174
  110. package/src/scss/components/_timelines.scss +282 -280
  111. package/src/scss/components/_toasts.scss +66 -72
  112. package/src/scss/form-elements/_checkbox.scss +117 -132
  113. package/src/scss/form-elements/_form.scss +149 -115
  114. package/src/scss/form-elements/_input-group.scss +99 -103
  115. package/src/scss/form-elements/_input.scss +74 -74
  116. package/src/scss/form-elements/_login.scss +48 -48
  117. package/src/scss/form-elements/_prefilled.scss +53 -51
  118. package/src/scss/form-elements/_radio.scss +95 -107
  119. package/src/scss/form-elements/_select.scss +42 -42
  120. package/src/scss/form-elements/_slider.scss +117 -132
  121. package/src/scss/form-elements/_textarea.scss +68 -54
  122. package/src/scss/form-elements/_toggle.scss +127 -140
  123. package/src/scss/layout/_footer.scss +172 -171
  124. package/src/scss/layout/_grid.scss +268 -302
  125. package/src/scss/layout/_header.scss +426 -427
  126. package/src/scss/layout/_home.scss +28 -27
  127. package/src/scss/layout/_main.scss +275 -238
  128. package/src/scss/layout/_page-header.scss +38 -36
  129. package/src/scss/layout/_section.scss +150 -124
  130. package/src/scss/main.scss +1 -1
  131. package/src/scss/utilities/_accessibility.scss +46 -45
  132. package/src/scss/utilities/_aspect.scss +22 -20
  133. package/src/scss/utilities/_corner.scss +23 -5
  134. package/src/scss/utilities/_display.scss +76 -70
  135. package/src/scss/utilities/_elevation.scss +13 -11
  136. package/src/scss/utilities/_flex.scss +83 -85
  137. package/src/scss/utilities/_reveal.scss +40 -63
  138. package/src/scss/utilities/_spacing.scss +63 -64
  139. package/src/scss/utilities/_text.scss +139 -141
  140. package/src/scss/utilities/_touch-targets.scss +130 -147
@@ -1,148 +1,182 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- .mw-form {
4
- display: flex;
5
- flex-direction: column;
6
- gap: spacing('4');
7
- width: 100%;
8
-
9
- &-inline {
10
- flex-direction: row;
11
- align-items: center;
12
- gap: spacing('4');
13
- }
14
-
15
- &-group {
3
+ @layer mw.components {
4
+ .mw-form {
16
5
  display: flex;
17
6
  flex-direction: column;
18
- padding: spacing('4');
19
- gap: spacing('2');
20
- border-radius: radius('sm');
21
- border: 2px solid var(--mw-border);
22
-
23
- // Explicit hook for the heading, mirrors mw-modal-title
24
- &-title {
25
- font-size: font-size('md');
26
- font-weight: font-weight('bold');
27
- color: var(--mw-text-color);
28
- line-height: 1.2;
29
- margin: spacing('0') spacing('0') spacing('1') spacing('0');
30
- }
31
- }
7
+ gap: spacing('4');
8
+ width: 100%;
32
9
 
33
- label {
34
- font-size: font-size('base');
35
- span {
36
- margin-bottom: spacing('1');
10
+ &-inline {
11
+ flex-direction: row;
12
+ align-items: center;
13
+ gap: spacing('4');
37
14
  }
38
- }
39
15
 
40
- &-actions {
41
- display: flex;
42
- flex-wrap: wrap;
43
- gap: spacing('3');
44
- margin-top: spacing('5');
45
- justify-content: flex-end;
46
- position: relative;
47
- text-align: right;
48
-
49
- // The note above the buttons is `.mw-actions-note` (see _buttons.scss), so
50
- // it looks the same in a form, a modal, a panel and a card. Only its
51
- // alignment is the form's business, because a form row can be re-aligned.
52
-
53
- // full-width stacked
54
- &-full-width {
16
+ &-group {
17
+ display: flex;
55
18
  flex-direction: column;
19
+ padding: spacing('4');
20
+ gap: spacing('2');
21
+ border-radius: radius('sm');
22
+ border: 2px solid var(--mw-border);
23
+
24
+ &-title {
25
+ font-size: font-size('md');
26
+ font-weight: font-weight('bold');
27
+ color: var(--mw-text-color);
28
+ line-height: 1.2;
29
+ margin: spacing('0') spacing('0') spacing('1') spacing('0');
30
+ }
31
+ }
56
32
 
57
- &:has(.mw-actions-note),
58
- &:has(.mw-form-actions-hint) {
59
- flex-wrap: nowrap;
33
+ label {
34
+ font-size: font-size('base');
35
+ span {
36
+ margin-bottom: spacing('1');
60
37
  }
38
+ }
61
39
 
62
- .mw-actions-note,
63
- .mw-form-actions-hint {
64
- flex: 0 0 auto;
65
- text-align: left;
40
+ &-actions {
41
+ display: flex;
42
+ flex-wrap: wrap;
43
+ gap: spacing('3');
44
+ margin-top: spacing('5');
45
+ justify-content: flex-end;
46
+ position: relative;
47
+ text-align: right;
48
+
49
+ // The note above the buttons is `.mw-actions-note` (see _buttons.scss), so
50
+ // it looks the same in a form, a modal, a panel and a card. Only its
51
+ // alignment is the form's business, because a form row can be re-aligned.
52
+
53
+ &-full-width {
54
+ flex-direction: column;
55
+
56
+ &:has(.mw-actions-note),
57
+ &:has(.mw-form-actions-hint) {
58
+ flex-wrap: nowrap;
59
+ }
60
+
61
+ .mw-actions-note,
62
+ .mw-form-actions-hint {
63
+ flex: 0 0 auto;
64
+ text-align: left;
65
+ }
66
+
67
+ > * {
68
+ width: 100%;
69
+ }
66
70
  }
67
71
 
68
- > * {
69
- width: 100%;
72
+ &-center {
73
+ justify-content: center;
74
+ text-align: center;
75
+
76
+ .mw-actions-note,
77
+ .mw-form-actions-hint {
78
+ text-align: center;
79
+ }
70
80
  }
71
- }
72
81
 
73
- &-center {
74
- justify-content: center;
75
- text-align: center;
82
+ &-left {
83
+ justify-content: flex-start;
84
+ text-align: left;
76
85
 
77
- .mw-actions-note,
78
- .mw-form-actions-hint {
79
- text-align: center;
86
+ .mw-actions-note,
87
+ .mw-form-actions-hint {
88
+ text-align: left;
89
+ }
80
90
  }
81
91
  }
82
92
 
83
- &-left {
84
- justify-content: flex-start;
85
- text-align: left;
93
+ &-element-error {
94
+ border: 3px solid var(--mw-danger-color);
86
95
 
87
- .mw-actions-note,
88
- .mw-form-actions-hint {
89
- text-align: left;
96
+ // A field brings its own padding, a checkbox or radio group is a bare flex
97
+ // container - without this its rows sit flush against the 3px border
98
+ &.mw-checkbox-group,
99
+ &.mw-radio-group {
100
+ padding: spacing('4');
101
+ border-radius: radius('sm');
90
102
  }
91
103
  }
92
104
  }
93
105
 
94
- &-element-error {
95
- border: 3px solid var(--mw-danger-color);
96
- }
97
- }
106
+ // ===== Form Field - label + input + hint + error as a unit =====
107
+ // Designed e.g. for Angular reactive forms pattern:
108
+ // <div class="mw-field">
109
+ // <label class="mw-field-label mw-required">Email</label>
110
+ // <input class="mw-input" formControlName="email">
111
+ // <span class="mw-field-hint">We'll never share your email</span>
112
+ // <span class="mw-field-error">Please enter a valid email</span>
113
+ // </div>
114
+ .mw-field {
115
+ display: flex;
116
+ flex-direction: column;
117
+ gap: spacing('2');
98
118
 
99
- // ===== Form Field - label + input + hint + error as a unit =====
100
- // Designed e.g. for Angular reactive forms pattern:
101
- // <div class="mw-field">
102
- // <label class="mw-field-label mw-required">Email</label>
103
- // <input class="mw-input" formControlName="email">
104
- // <span class="mw-field-hint">We'll never share your email</span>
105
- // <span class="mw-field-error">Please enter a valid email</span>
106
- // </div>
107
- .mw-field {
108
- display: flex;
109
- flex-direction: column;
110
- gap: spacing('2');
111
-
112
- &-label {
113
- font-size: font-size('base');
114
- font-weight: font-weight('medium');
115
- color: var(--mw-text-color);
116
- }
119
+ &-label {
120
+ font-size: font-size('base');
121
+ font-weight: font-weight('medium');
122
+ color: var(--mw-text-color);
123
+ }
117
124
 
118
- // Required field asterisk - add class mw-required or attribute data-required
119
- &-label.mw-required::after,
120
- &-label[data-required='true']::after {
121
- content: ' *';
122
- color: var(--mw-danger-text-color);
123
- font-weight: font-weight('bold');
124
- }
125
+ // Required field asterisk. The two explicit spellings stay for a label that
126
+ // is not next to its control - an Angular form where the validator lives in
127
+ // the component and the input carries no `required` attribute at all.
128
+ //
129
+ // The third selector is for the markup that does say so: a label directly in
130
+ // front of a required control gets the asterisk without anyone having to
131
+ // remember the class, and it cannot drift out of step with the validation,
132
+ // because it *is* the validation.
133
+ &-label.mw-required::after,
134
+ &-label[data-required='true']::after,
135
+ &-label:has(
136
+ + .mw-input:required,
137
+ + .mw-select:required,
138
+ + .mw-textarea:required
139
+ )::after {
140
+ content: ' *';
141
+ color: var(--mw-danger-text-color);
142
+ font-weight: font-weight('bold');
143
+ }
144
+
145
+ &-hint {
146
+ font-size: font-size('xs');
147
+ color: var(--mw-text-muted-color);
148
+ }
125
149
 
126
- &-hint {
127
- font-size: font-size('xs');
128
- color: var(--mw-text-muted-color);
150
+ &-error {
151
+ font-size: font-size('xs');
152
+ color: var(--mw-danger-text-color);
153
+ display: flex;
154
+ align-items: center;
155
+ gap: spacing('1');
156
+ }
157
+
158
+ &.mw-field-has-error {
159
+ .mw-input,
160
+ .mw-select,
161
+ .mw-textarea {
162
+ border-color: var(--mw-danger-color);
163
+ @include focus-halo('danger-text-color');
164
+ }
165
+ }
129
166
  }
130
167
 
131
- &-error {
132
- font-size: font-size('xs');
133
- color: var(--mw-danger-text-color);
134
- display: flex;
135
- align-items: center;
136
- gap: spacing('1');
168
+ // The same look from the browser's own validation, so nothing has to toggle
169
+ // mw-field-has-error. `:user-invalid` and never `:invalid`, which is true from
170
+ // page load and would mark an empty required field before anyone typed.
171
+ // The class stays authoritative for a validator that lives in the application.
172
+ .mw-input:user-invalid,
173
+ .mw-select:user-invalid,
174
+ .mw-textarea:user-invalid {
175
+ border-color: var(--mw-danger-color);
176
+ @include focus-halo('danger-text-color');
137
177
  }
138
178
 
139
- // When the field itself is in error state
140
- &.mw-field-has-error {
141
- .mw-input,
142
- .mw-select,
143
- .mw-textarea {
144
- border-color: var(--mw-danger-color);
145
- @include focus-halo('danger-text-color');
146
- }
179
+ .mw-field:has(> :user-invalid) > .mw-field-hint {
180
+ color: var(--mw-danger-text-color);
147
181
  }
148
182
  }
@@ -1,132 +1,128 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Input with prefix and/or suffix (icon, text, button)
4
- .mw-input-group {
5
- display: flex;
6
- align-items: stretch;
7
- width: 100%;
8
-
9
- // Shared styles for prefix and suffix
10
- .mw-input-group-prefix,
11
- .mw-input-group-suffix {
3
+ @layer mw.components {
4
+ .mw-input-group {
12
5
  display: flex;
13
- align-items: center;
14
- justify-content: center;
15
- padding: spacing('2') spacing('3');
16
- background: var(--mw-gray-background);
17
- border: 2px solid var(--mw-border);
18
- color: var(--mw-text-muted-color);
19
- font-size: font-size('xs');
20
- white-space: nowrap;
21
- flex-shrink: 0;
22
- transition: var(--mw-transition);
23
- line-height: 1;
24
- cursor: default;
25
- }
26
-
27
- .mw-input-group-prefix {
28
- border-right: none;
29
- border-radius: radius('sm') 0 0 radius('sm');
30
- }
31
-
32
- .mw-input-group-suffix {
33
- border-left: none;
34
- border-radius: 0 radius('sm') radius('sm') 0;
35
- }
6
+ align-items: stretch;
7
+ width: 100%;
36
8
 
37
- // The input loses its outer rounded corners
38
- .mw-input {
39
- flex: 1;
40
- min-width: 0;
41
- border-radius: 0;
9
+ .mw-input-group-prefix,
10
+ .mw-input-group-suffix {
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ padding: spacing('2') spacing('3');
15
+ background: var(--mw-gray-background);
16
+ border: 2px solid var(--mw-border);
17
+ color: var(--mw-text-muted-color);
18
+ font-size: font-size('xs');
19
+ white-space: nowrap;
20
+ flex-shrink: 0;
21
+ transition: var(--mw-transition);
22
+ line-height: 1;
23
+ cursor: default;
24
+ }
42
25
 
43
- &:first-child {
26
+ .mw-input-group-prefix {
27
+ border-right: none;
44
28
  border-radius: radius('sm') 0 0 radius('sm');
45
29
  }
46
30
 
47
- &:last-child {
31
+ .mw-input-group-suffix {
32
+ border-left: none;
48
33
  border-radius: 0 radius('sm') radius('sm') 0;
49
34
  }
50
35
 
51
- // When input is focused, also highlight adjacent prefix/suffix
52
- &:focus + .mw-input-group-suffix,
53
- &:focus-within ~ .mw-input-group-suffix {
54
- border-color: var(--mw-primary-color);
55
- }
56
- }
57
-
58
- // Highlight prefix/suffix when inner input is focused
59
- &:focus-within {
60
- .mw-input-group-prefix,
61
- .mw-input-group-suffix {
62
- border-color: var(--mw-primary-color);
63
- }
64
- }
36
+ .mw-input {
37
+ flex: 1;
38
+ min-width: 0;
39
+ border-radius: 0;
65
40
 
66
- // The field inside gives its halo up - three boxes each drawing their own
67
- // ring around themselves is not a focused control, it is three focused
68
- // controls - and the group draws one around the whole thing instead. Without
69
- // this the group was the one field on the page whose focus was a border
70
- // colour and nothing else.
71
- .mw-input:focus {
72
- box-shadow: none;
73
- }
41
+ &:first-child {
42
+ border-radius: radius('sm') 0 0 radius('sm');
43
+ }
74
44
 
75
- &:focus-within {
76
- border-radius: radius('sm');
77
- @include focus-halo;
78
- }
45
+ &:last-child {
46
+ border-radius: 0 radius('sm') radius('sm') 0;
47
+ }
79
48
 
80
- // Button as suffix/prefix (e.g. search button, copy button)
81
- .mw-btn {
82
- border-radius: 0;
83
- border: 2px solid var(--mw-border);
84
- flex-shrink: 0;
49
+ &:focus + .mw-input-group-suffix,
50
+ &:focus-within ~ .mw-input-group-suffix {
51
+ border-color: var(--mw-primary-color);
52
+ }
53
+ }
85
54
 
86
- &:first-child {
87
- border-right: none;
88
- border-radius: radius('sm') 0 0 radius('sm');
55
+ &:focus-within {
56
+ .mw-input-group-prefix,
57
+ .mw-input-group-suffix {
58
+ border-color: var(--mw-primary-color);
59
+ }
89
60
  }
90
61
 
91
- &:last-child {
92
- border-left: none;
93
- border-radius: 0 radius('sm') radius('sm') 0;
62
+ // The field inside gives its halo up - three boxes each drawing their own
63
+ // ring around themselves is not a focused control, it is three focused
64
+ // controls - and the group draws one around the whole thing instead. Without
65
+ // this the group was the one field on the page whose focus was a border
66
+ // colour and nothing else.
67
+ .mw-input:focus {
68
+ box-shadow: none;
94
69
  }
95
- }
96
70
 
97
- // Size variants - put on the group, and they reach the field too. They used
98
- // to style only the prefix and suffix, so `mw-input-group-sm` around a plain
99
- // `mw-input` gave a small frame around a full-size field and the modifier
100
- // looked broken unless you also knew to write `mw-input-sm` inside it.
101
- &-sm {
102
- .mw-input-group-prefix,
103
- .mw-input-group-suffix {
104
- padding: spacing('1') spacing('2');
105
- font-size: font-size('xs');
71
+ &:focus-within {
72
+ border-radius: radius('sm');
73
+ @include focus-halo;
106
74
  }
107
75
 
108
- .mw-input,
109
76
  .mw-btn {
110
- min-height: var(--mw-control-height-sm);
111
- font-size: var(--mw-control-font-sm);
112
- padding-block: spacing('1');
77
+ border-radius: 0;
78
+ border: 2px solid var(--mw-border);
79
+ flex-shrink: 0;
80
+
81
+ &:first-child {
82
+ border-right: none;
83
+ border-radius: radius('sm') 0 0 radius('sm');
84
+ }
85
+
86
+ &:last-child {
87
+ border-left: none;
88
+ border-radius: 0 radius('sm') radius('sm') 0;
89
+ }
113
90
  }
114
- }
115
91
 
116
- &-lg {
117
- .mw-input-group-prefix,
118
- .mw-input-group-suffix {
119
- padding: spacing('3') spacing('4');
120
- font-size: font-size('sm');
92
+ // Size variants - put on the group, and they reach the field too. They used
93
+ // to style only the prefix and suffix, so `mw-input-group-sm` around a plain
94
+ // `mw-input` gave a small frame around a full-size field and the modifier
95
+ // looked broken unless you also knew to write `mw-input-sm` inside it.
96
+ &-sm {
97
+ .mw-input-group-prefix,
98
+ .mw-input-group-suffix {
99
+ padding: spacing('1') spacing('2');
100
+ font-size: font-size('xs');
101
+ }
102
+
103
+ .mw-input,
104
+ .mw-btn {
105
+ min-height: var(--mw-control-height-sm);
106
+ font-size: var(--mw-control-font-sm);
107
+ padding-block: spacing('1');
108
+ }
121
109
  }
122
110
 
123
- .mw-input,
124
- .mw-btn {
125
- min-height: var(--mw-control-height-lg);
126
- font-size: var(--mw-control-font-lg);
127
- // A step under the minimum, or the padding wins and the group grows past
128
- // the size step it was asked for - same trap as on the standalone field
129
- padding-block: spacing('2');
111
+ &-lg {
112
+ .mw-input-group-prefix,
113
+ .mw-input-group-suffix {
114
+ padding: spacing('3') spacing('4');
115
+ font-size: font-size('sm');
116
+ }
117
+
118
+ .mw-input,
119
+ .mw-btn {
120
+ min-height: var(--mw-control-height-lg);
121
+ font-size: var(--mw-control-font-lg);
122
+ // A step under the minimum, or the padding wins and the group grows past
123
+ // the size step it was asked for - same trap as on the standalone field
124
+ padding-block: spacing('2');
125
+ }
130
126
  }
131
127
  }
132
128
  }