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.
- package/.claude/settings.local.json +29 -1
- package/.claude/skills/mw-maverick-wave/SKILL.md +42 -25
- package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
- package/.claude/skills/mw-maverick-wave/references/components.md +90 -5
- package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
- package/.claude/skills/mw-maverick-wave/references/javascript.md +18 -4
- package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
- package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
- package/.impeccable/config.local.json +5 -0
- package/.impeccable/hook.cache.json +1 -0
- package/CHANGELOG.md +17 -0
- package/CLAUDE.md +5 -5
- package/README.md +48 -4
- package/index.html +19 -38
- package/maverick-wave.min.css +14 -12
- package/maverick-wave.min.js +1 -1
- package/package.json +2 -2
- package/scripts/verify.js +27 -2
- package/src/js/main.js +266 -75
- package/src/partials/accordions-container.html +6 -10
- package/src/partials/alerts-container.html +6 -6
- package/src/partials/announcement-container.html +5 -5
- package/src/partials/avatars-container.html +85 -17
- package/src/partials/badges-container.html +6 -6
- package/src/partials/blog-posts-container.html +11 -12
- package/src/partials/buttons-container.html +3 -3
- package/src/partials/cards-container.html +26 -9
- package/src/partials/code-container.html +5 -5
- package/src/partials/content-slider-container.html +5 -4
- package/src/partials/divider-container.html +7 -7
- package/src/partials/dropdown-container.html +2 -2
- package/src/partials/empty-state-container.html +5 -5
- package/src/partials/footer-container.html +21 -18
- package/src/partials/form-elements-container.html +14 -14
- package/src/partials/gallery-container.html +16 -8
- package/src/partials/get-started-container.html +4 -8
- package/src/partials/header-container.html +18 -7
- package/src/partials/header-utilities-container.html +192 -5
- package/src/partials/home-container.html +10 -20
- package/src/partials/input-group-container.html +11 -2
- package/src/partials/kbd-container.html +1 -1
- package/src/partials/login-container.html +5 -1
- package/src/partials/media-container.html +2 -2
- package/src/partials/modals-container.html +22 -32
- package/src/partials/pricing-container.html +9 -9
- package/src/partials/skeleton-container.html +6 -6
- package/src/partials/stepper-container.html +2 -2
- package/src/partials/tables-container.html +12 -12
- package/src/partials/tabs-container.html +17 -27
- package/src/partials/tags-container.html +23 -17
- package/src/partials/techstack-bucket-container.html +13 -0
- package/src/partials/tiles-container.html +26 -9
- package/src/partials/typography-container.html +7 -6
- package/src/partials/utilities-container.html +35 -15
- package/src/scss/_layers.scss +10 -0
- package/src/scss/abstracts/_index.scss +6 -0
- package/src/scss/abstracts/_mixins.scss +61 -153
- package/src/scss/abstracts/_variables.scss +123 -319
- package/src/scss/base/_base.scss +170 -190
- package/src/scss/base/_reset.scss +106 -104
- package/src/scss/base/_typography.scss +153 -151
- package/src/scss/components/_accordions.scss +97 -97
- package/src/scss/components/_alerts.scss +71 -70
- package/src/scss/components/_announcement.scss +71 -70
- package/src/scss/components/_avatars.scss +130 -142
- package/src/scss/components/_badge.scss +131 -132
- package/src/scss/components/_blog-post.scss +223 -220
- package/src/scss/components/_breadcrumbs.scss +93 -92
- package/src/scss/components/_button-bar.scss +102 -110
- package/src/scss/components/_buttons.scss +319 -324
- package/src/scss/components/_calendar.scss +251 -252
- package/src/scss/components/_cards.scss +359 -386
- package/src/scss/components/_code.scss +190 -194
- package/src/scss/components/_coming-soon.scss +77 -75
- package/src/scss/components/_content-slider.scss +90 -89
- package/src/scss/components/_divider.scss +55 -53
- package/src/scss/components/_dropdown.scss +179 -185
- package/src/scss/components/_empty-state.scss +57 -57
- package/src/scss/components/_flag.scss +325 -0
- package/src/scss/components/_gallery.scss +131 -133
- package/src/scss/components/_index.scss +2 -0
- package/src/scss/components/_info.scss +151 -167
- package/src/scss/components/_kanban.scss +332 -341
- package/src/scss/components/_kbd.scss +40 -38
- package/src/scss/components/_lang-switch.scss +108 -0
- package/src/scss/components/_links.scss +21 -28
- package/src/scss/components/_lists.scss +510 -514
- package/src/scss/components/_localhost-indicator.scss +26 -24
- package/src/scss/components/_media.scss +22 -20
- package/src/scss/components/_meta-info.scss +35 -33
- package/src/scss/components/_modals.scss +277 -186
- package/src/scss/components/_pagination.scss +81 -87
- package/src/scss/components/_panels.scss +99 -97
- package/src/scss/components/_pricing.scss +183 -241
- package/src/scss/components/_progress.scss +112 -89
- package/src/scss/components/_prose.scss +35 -33
- package/src/scss/components/_ratings.scss +40 -38
- package/src/scss/components/_segmented.scss +82 -84
- package/src/scss/components/_skeleton.scss +66 -72
- package/src/scss/components/_spinners.scss +155 -159
- package/src/scss/components/_stepper.scss +116 -116
- package/src/scss/components/_tables.scss +155 -148
- package/src/scss/components/_tabs.scss +232 -141
- package/src/scss/components/_tags.scss +109 -107
- package/src/scss/components/_techstack-bucket.scss +123 -122
- package/src/scss/components/_testimonial.scss +72 -70
- package/src/scss/components/_theme-toggle.scss +53 -51
- package/src/scss/components/_tiles.scss +174 -174
- package/src/scss/components/_timelines.scss +282 -280
- package/src/scss/components/_toasts.scss +66 -72
- package/src/scss/form-elements/_checkbox.scss +117 -132
- package/src/scss/form-elements/_form.scss +149 -115
- package/src/scss/form-elements/_input-group.scss +99 -103
- package/src/scss/form-elements/_input.scss +74 -74
- package/src/scss/form-elements/_login.scss +48 -48
- package/src/scss/form-elements/_prefilled.scss +53 -51
- package/src/scss/form-elements/_radio.scss +95 -107
- package/src/scss/form-elements/_select.scss +42 -42
- package/src/scss/form-elements/_slider.scss +117 -132
- package/src/scss/form-elements/_textarea.scss +68 -54
- package/src/scss/form-elements/_toggle.scss +127 -140
- package/src/scss/layout/_footer.scss +172 -171
- package/src/scss/layout/_grid.scss +268 -302
- package/src/scss/layout/_header.scss +426 -427
- package/src/scss/layout/_home.scss +28 -27
- package/src/scss/layout/_main.scss +275 -238
- package/src/scss/layout/_page-header.scss +38 -36
- package/src/scss/layout/_section.scss +150 -124
- package/src/scss/main.scss +1 -1
- package/src/scss/utilities/_accessibility.scss +46 -45
- package/src/scss/utilities/_aspect.scss +22 -20
- package/src/scss/utilities/_corner.scss +23 -5
- package/src/scss/utilities/_display.scss +76 -70
- package/src/scss/utilities/_elevation.scss +13 -11
- package/src/scss/utilities/_flex.scss +83 -85
- package/src/scss/utilities/_reveal.scss +40 -63
- package/src/scss/utilities/_spacing.scss +63 -64
- package/src/scss/utilities/_text.scss +139 -141
- package/src/scss/utilities/_touch-targets.scss +130 -147
|
@@ -1,148 +1,182 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
.
|
|
4
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
10
|
+
&-inline {
|
|
11
|
+
flex-direction: row;
|
|
12
|
+
align-items: center;
|
|
13
|
+
gap: spacing('4');
|
|
37
14
|
}
|
|
38
|
-
}
|
|
39
15
|
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
33
|
+
label {
|
|
34
|
+
font-size: font-size('base');
|
|
35
|
+
span {
|
|
36
|
+
margin-bottom: spacing('1');
|
|
60
37
|
}
|
|
38
|
+
}
|
|
61
39
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
&-left {
|
|
83
|
+
justify-content: flex-start;
|
|
84
|
+
text-align: left;
|
|
76
85
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
86
|
+
.mw-actions-note,
|
|
87
|
+
.mw-form-actions-hint {
|
|
88
|
+
text-align: left;
|
|
89
|
+
}
|
|
80
90
|
}
|
|
81
91
|
}
|
|
82
92
|
|
|
83
|
-
&-
|
|
84
|
-
|
|
85
|
-
text-align: left;
|
|
93
|
+
&-element-error {
|
|
94
|
+
border: 3px solid var(--mw-danger-color);
|
|
86
95
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
95
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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
|
-
|
|
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:
|
|
14
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
26
|
+
.mw-input-group-prefix {
|
|
27
|
+
border-right: none;
|
|
44
28
|
border-radius: radius('sm') 0 0 radius('sm');
|
|
45
29
|
}
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
.mw-input-group-suffix {
|
|
32
|
+
border-left: none;
|
|
48
33
|
border-radius: 0 radius('sm') radius('sm') 0;
|
|
49
34
|
}
|
|
50
35
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
border-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
45
|
+
&:last-child {
|
|
46
|
+
border-radius: 0 radius('sm') radius('sm') 0;
|
|
47
|
+
}
|
|
79
48
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
&:
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
}
|