@cfpb/cfpb-design-system 3.11.0 → 3.12.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 (60) hide show
  1. package/CHANGELOG.md +75 -52
  2. package/dist/base/index.css +1 -1
  3. package/dist/base/index.css.map +2 -2
  4. package/dist/base/index.js +1 -1
  5. package/dist/base/index.js.map +1 -1
  6. package/dist/components/cfpb-buttons/index.css +1 -1
  7. package/dist/components/cfpb-buttons/index.css.map +2 -2
  8. package/dist/components/cfpb-buttons/index.js +1 -1
  9. package/dist/components/cfpb-buttons/index.js.map +1 -1
  10. package/dist/components/cfpb-expandables/index.css +1 -1
  11. package/dist/components/cfpb-expandables/index.css.map +2 -2
  12. package/dist/components/cfpb-expandables/index.js +1 -1
  13. package/dist/components/cfpb-expandables/index.js.map +1 -1
  14. package/dist/components/cfpb-forms/index.css +1 -1
  15. package/dist/components/cfpb-forms/index.css.map +2 -2
  16. package/dist/components/cfpb-forms/index.js +1 -1
  17. package/dist/components/cfpb-forms/index.js.map +1 -1
  18. package/dist/components/cfpb-icons/index.css +1 -1
  19. package/dist/components/cfpb-icons/index.css.map +2 -2
  20. package/dist/components/cfpb-icons/index.js +1 -1
  21. package/dist/components/cfpb-icons/index.js.map +1 -1
  22. package/dist/components/cfpb-layout/index.css +1 -1
  23. package/dist/components/cfpb-layout/index.css.map +2 -2
  24. package/dist/components/cfpb-layout/index.js +1 -1
  25. package/dist/components/cfpb-layout/index.js.map +1 -1
  26. package/dist/components/cfpb-notifications/index.css +1 -1
  27. package/dist/components/cfpb-notifications/index.css.map +2 -2
  28. package/dist/components/cfpb-notifications/index.js +1 -1
  29. package/dist/components/cfpb-notifications/index.js.map +1 -1
  30. package/dist/components/cfpb-pagination/index.css +1 -1
  31. package/dist/components/cfpb-pagination/index.css.map +2 -2
  32. package/dist/components/cfpb-pagination/index.js +1 -1
  33. package/dist/components/cfpb-pagination/index.js.map +1 -1
  34. package/dist/components/cfpb-tables/index.css +1 -1
  35. package/dist/components/cfpb-tables/index.css.map +2 -2
  36. package/dist/components/cfpb-tables/index.js +1 -1
  37. package/dist/components/cfpb-tables/index.js.map +1 -1
  38. package/dist/components/cfpb-tooltips/index.css +1 -1
  39. package/dist/components/cfpb-tooltips/index.css.map +2 -2
  40. package/dist/components/cfpb-tooltips/index.js +1 -1
  41. package/dist/components/cfpb-tooltips/index.js.map +1 -1
  42. package/dist/components/cfpb-typography/index.css +1 -1
  43. package/dist/components/cfpb-typography/index.css.map +2 -2
  44. package/dist/components/cfpb-typography/index.js +1 -1
  45. package/dist/components/cfpb-typography/index.js.map +1 -1
  46. package/dist/index.css +1 -1
  47. package/dist/index.css.map +2 -2
  48. package/dist/index.js +1 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/utilities/index.css +1 -1
  51. package/dist/utilities/index.css.map +2 -2
  52. package/dist/utilities/index.js +1 -1
  53. package/dist/utilities/index.js.map +1 -1
  54. package/package.json +1 -1
  55. package/src/abstracts/vars.scss +40 -37
  56. package/src/components/cfpb-forms/form-alert.scss +8 -6
  57. package/src/components/cfpb-forms/form-field.scss +70 -154
  58. package/src/components/cfpb-forms/multiselect.scss +1 -1
  59. package/src/components/cfpb-forms/text-input.scss +34 -98
  60. package/src/utilities/utilities.scss +15 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cfpb/cfpb-design-system",
3
- "version": "3.11.0",
3
+ "version": "3.12.0",
4
4
  "description": "CFPB's UI framework",
5
5
  "exports": {
6
6
  ".": "./src/index.js",
@@ -82,39 +82,31 @@ $block-border-left: $block-border;
82
82
  // .content__main
83
83
  $content-main-border: var(--gray-40);
84
84
 
85
- // Form variables
86
-
87
- // .a-text-input borders
88
- $input-border: var(--gray-60);
89
- $input-border-hover: var(--pacific);
90
- $input-border-focused: var(--pacific);
91
- $input-border-error: var(--red);
92
- $input-border-error-hover: var(--red-dark);
93
- $input-border-warning: var(--gold);
94
- $input-border-warning-hover: var(--gold-dark);
95
- $input-border-success: var(--green);
96
- $input-border-success-hover: var(--green-dark);
97
-
98
- // .a-text-input backgrounds
99
- $input-bg: var(--white);
100
- $input-bg-selected: var(--pacific);
101
- $input-bg-disabled: var(--gray-10);
102
- $input-bg-disabled-selected: var(--gray-40);
103
-
104
- // .a-text-input text
105
- $input-text: var(--black);
106
- $input-text-disabled: var(--gray-dark);
107
- $input-text-placeholder: var(--gray-dark);
108
-
109
- // .a-text-input icons
110
- $input-icon: var(--gray);
111
- $input-icon-success: var(--green);
112
- $input-icon-warning: var(--gold);
113
- $input-icon-error: var(--red);
114
-
115
- // .a-select
116
85
  :root {
117
- --select-border-default: var(--gray-60); // $input-text
86
+ // Form variables
87
+
88
+ // .a-text-input
89
+ --input-text-default: var(--black);
90
+ --input-text-disabled-default: var(--gray-dark);
91
+ --input-text-placeholder-default: var(--gray-dark);
92
+ --input-border-default: var(--gray-60); // $input-border
93
+ --input-border-disabled: var(--gray-60);
94
+ --input-border-success: var(--green);
95
+ --input-border-warning: var(--gold);
96
+ --input-border-error: var(--red);
97
+ --input-border-hover-default: var(--pacific); // $input-border-hover
98
+ --input-border-focus-default: var(--pacific); // $input-border-focused
99
+ --input-bg-default: var(--white);
100
+ --input-bg-disabled-default: var(--gray-10);
101
+
102
+ // .a-form-alert icons
103
+ --form-alert-icon-color-default: var(--gray);
104
+ --form-alert-icon-color-success: var(--green);
105
+ --form-alert-icon-color-warning: var(--gold);
106
+ --form-alert-icon-color-error: var(--red);
107
+
108
+ // .a-select
109
+ --select-border-default: var(--gray-60); // $input-border
118
110
  --select-border-width-default: 1px;
119
111
  --select-border-error: var(--red);
120
112
  --select-border-width-error: 2px;
@@ -123,12 +115,23 @@ $input-icon-error: var(--red);
123
115
  --select-bg-disabled-default: var(--gray-10); // $input-bg-disabled
124
116
  --select-icon-bg-default: var(--gray-10);
125
117
  --select-text-disabled-default: var(--gray-dark); // $input-text-disabled
126
- }
127
118
 
128
- // .m-form-field
129
- $form-field-input-border: $input-border;
130
- $form-field-input-border-disabled: var(--gray-60);
131
- $form-field-inset: var(--white);
119
+ // .m-form-field--checkbox .m-form-field--radio
120
+ --choice-border-default: var(--gray-60); // $input-border
121
+ --choice-border-disabled: var(--gray-60);
122
+ --choice-border-success: var(--green); // $input-border-success
123
+ --choice-border-warning: var(--gold); // $input-border-warning
124
+ --choice-border-error: var(--red); // $input-border-error
125
+ --choice-border-hover-default: var(--pacific); // $input-border-hover
126
+ --choice-border-focus-default: var(--pacific); // $input-border-focused
127
+ --choice-outline-focus-default: var(--pacific); // $input-border-focused
128
+ --choice-bg-default: var(--white); // $input-bg
129
+ --choice-bg-disabled: var(--gray-10); // $input-bg-disabled
130
+ --choice-bg-selected-default: var(--pacific); // $input-bg-selected
131
+ --choice-bg-selected-disabled: var(--gray-40);
132
+ --choice-bg-selected-focus-default: var(--pacific);
133
+ --choice-label-disabled-default: var(--gray-dark);
134
+ }
132
135
 
133
136
  // .m-form-field--lg-target
134
137
  $form-field-input-lg-target-bg: var(--gray-10);
@@ -2,11 +2,13 @@
2
2
  @use '@cfpb/cfpb-design-system/src/abstracts' as *;
3
3
 
4
4
  .a-form-alert {
5
+ --form-alert-icon-color: var(--form-alert-icon-color-default);
6
+
5
7
  display: flex;
6
8
  gap: math.div(5px, $base-font-size-px) + rem;
7
9
 
8
10
  .cf-icon-svg {
9
- color: $input-icon;
11
+ color: var(--form-alert-icon-color);
10
12
  flex: none;
11
13
  margin-top: math.div(1px, $base-font-size-px) + rem;
12
14
  }
@@ -16,14 +18,14 @@
16
18
  }
17
19
 
18
20
  &--success .cf-icon-svg {
19
- color: $input-icon-success;
21
+ --form-alert-icon-color: var(--form-alert-icon-color-success);
20
22
  }
21
23
 
22
- &--error .cf-icon-svg {
23
- color: $input-icon-error;
24
+ &--warning .cf-icon-svg {
25
+ --form-alert-icon-color: var(--form-alert-icon-color-warning);
24
26
  }
25
27
 
26
- &--warning .cf-icon-svg {
27
- color: $input-icon-warning;
28
+ &--error .cf-icon-svg {
29
+ --form-alert-icon-color: var(--form-alert-icon-color-error);
28
30
  }
29
31
  }
@@ -3,6 +3,19 @@
3
3
  @use '@cfpb/cfpb-design-system/src/utilities' as *;
4
4
 
5
5
  .m-form-field {
6
+ // Theme variables.
7
+ --choice-border: var(--choice-border-default);
8
+ --choice-border-hover: var(--choice-border-hover-default);
9
+ --choice-border-focus: var(--choice-border-focus-default);
10
+ --choice-outline-focus: var(--choice-outline-focus-default);
11
+ --choice-bg: var(--choice-bg-default);
12
+ --choice-bg-selected: var(--choice-bg-selected-default);
13
+ --choice-bg-selected-focus: var(--choice-bg-selected-focus-default);
14
+ --choice-label-disabled: var(--choice-label-disabled-default);
15
+
16
+ // Private variables.
17
+ --choice-border-width-addendum: 0;
18
+
6
19
  .a-text-input--full {
7
20
  width: 100%;
8
21
  }
@@ -14,14 +27,6 @@
14
27
  &--checkbox,
15
28
  &--radio {
16
29
  .a-label {
17
- // We need to turn off autoprefixing for the inline-grid because
18
- // IE does not handle an inline-grid like other browsers,
19
- // leading to an extremely narrow column of text for the label
20
- // and the checkbox or radio widget covering the first part of it.
21
- // The Autoprefixer control comment below ensures that the following
22
- // property is only picked up by browsers with standard support.
23
-
24
- /* autoprefixer: ignore next */
25
30
  display: inline-grid;
26
31
 
27
32
  // 30px is width of checkbox/radio button plus the needed padding.
@@ -36,11 +41,12 @@
36
41
  display: inline-block;
37
42
  grid-row-start: 1;
38
43
  grid-row-end: 3;
39
- border: 1px solid $form-field-input-border;
44
+ border: 1px solid var(--choice-border);
45
+ outline: var(--choice-border-width-addendum) solid var(--choice-border);
40
46
  height: math.div(18px, $base-font-size-px) + em;
41
47
  width: math.div(18px, $base-font-size-px) + em;
42
48
  margin-right: 10px;
43
- background-color: $input-bg;
49
+ background-color: var(--choice-bg);
44
50
  content: '';
45
51
  vertical-align: top;
46
52
 
@@ -52,24 +58,17 @@
52
58
 
53
59
  &:hover::before,
54
60
  &.hover::before {
55
- border-color: $input-border-hover;
61
+ border-color: var(--choice-border-hover);
56
62
  }
57
63
  }
58
64
 
59
- // Ensure the helper text appears on its own line below the label.
60
- .a-label__helper {
61
- display: block;
62
- }
63
-
64
65
  .a-checkbox,
65
66
  .a-radio {
66
67
  @include u-visually-hidden;
67
68
 
68
69
  &:focus + .a-label,
69
70
  &.focus + .a-label {
70
- outline: 1px dotted $input-border-focused;
71
-
72
- // The outline-offset property is not supported in IE.
71
+ outline: 1px dotted var(--choice-outline-focus);
73
72
  outline-offset: 1px;
74
73
  }
75
74
 
@@ -79,37 +78,62 @@
79
78
  &.focus + .a-label::before,
80
79
  &:hover + .a-label::before,
81
80
  &.hover + .a-label::before {
82
- border-color: $input-border;
81
+ border-color: var(--choice-border);
83
82
  outline: none;
84
83
  box-shadow: none; // Applies only to radio buttons.
85
84
  }
86
85
 
87
86
  & + .a-label {
88
87
  cursor: not-allowed;
89
- color: $input-text-disabled;
88
+ color: var(--choice-label-disabled);
90
89
 
91
90
  &::before {
92
- background: $input-bg-disabled;
93
- border-color: $form-field-input-border-disabled;
94
91
  outline: none;
95
92
  }
96
93
  }
97
94
  }
98
95
  }
96
+
97
+ &:has(.a-checkbox:disabled),
98
+ &:has(.a-radio:disabled) {
99
+ --choice-border: var(--choice-border-disabled);
100
+ --choice-bg: var(--choice-bg-disabled);
101
+ --choice-bg-selected: var(--choice-bg-selected-disabled);
102
+ }
103
+
104
+ &-success,
105
+ &-warning,
106
+ &-error {
107
+ --choice-border-width-addendum: 1px;
108
+ }
109
+
110
+ &-success {
111
+ --choice-border: var(--choice-border-success);
112
+ }
113
+
114
+ &-warning {
115
+ --choice-border: var(--choice-border-warning);
116
+ }
117
+
118
+ &-error {
119
+ --choice-border: var(--choice-border-error);
120
+ }
99
121
  }
100
122
 
101
123
  &--checkbox {
102
124
  .a-checkbox {
103
125
  &:focus + .a-label::before,
104
126
  &.focus + .a-label::before {
105
- border-color: $input-border-focused;
106
- box-shadow: 0 0 0 1px $input-border-focused;
127
+ border-color: var(--choice-border-focus);
128
+ box-shadow: 0 0 0 1px var(--choice-border-focus);
129
+ outline-color: var(--choice-border-focus);
107
130
  }
108
131
 
109
132
  &:hover + .a-label::before,
110
133
  &.hover + .a-label::before {
111
- border-color: $input-border-hover;
112
- box-shadow: 0 0 0 1px $input-border-hover;
134
+ border-color: var(--choice-border-hover);
135
+ box-shadow: 0 0 0 1px var(--choice-border-hover);
136
+ outline-color: var(--choice-border-hover);
113
137
  }
114
138
 
115
139
  &:checked + .a-label::before {
@@ -125,114 +149,6 @@
125
149
  --cfpb-background-icon-svg: 'approved rgb(90,93,97)';
126
150
  }
127
151
  }
128
-
129
- &-error {
130
- .a-label {
131
- &::before {
132
- border-color: $input-border-error;
133
- outline: 1px solid $input-border-error;
134
- }
135
-
136
- &:hover::before,
137
- &.hover::before {
138
- border-color: $input-border-hover;
139
- outline-color: $input-border-hover;
140
- }
141
- }
142
-
143
- .a-checkbox {
144
- &:hover + .a-label::before,
145
- &.hover + .a-label::before {
146
- border-color: $input-border-hover;
147
- outline-color: $input-border-hover;
148
- }
149
-
150
- &:focus + .a-label::before,
151
- &.focus + .a-label::before {
152
- border-color: $input-border-error;
153
- box-shadow: 0 0 0 1px $input-border-error;
154
- outline-color: $input-border-error;
155
- }
156
-
157
- &:focus + .a-label,
158
- &.focus + .a-label {
159
- outline: 1px dotted $input-border-error;
160
- outline-offset: 1px;
161
- }
162
- }
163
- }
164
-
165
- &-warning {
166
- .a-label {
167
- &::before {
168
- border-color: $input-border-warning;
169
- outline: 1px solid $input-border-warning;
170
- }
171
-
172
- &:hover::before,
173
- &.hover::before {
174
- border-color: $input-border-hover;
175
- outline-color: $input-border-hover;
176
- }
177
- }
178
-
179
- .a-checkbox {
180
- &:hover + .a-label::before,
181
- &.hover + .a-label::before {
182
- border-color: $input-border-hover;
183
- outline-color: $input-border-hover;
184
- }
185
-
186
- &:focus + .a-label::before,
187
- &.focus + .a-label::before {
188
- border-color: $input-border-warning;
189
- box-shadow: 0 0 0 1px $input-border-warning;
190
- outline-color: $input-border-warning;
191
- }
192
-
193
- &:focus + .a-label,
194
- &.focus + .a-label {
195
- outline: 1px dotted $input-border-warning;
196
- outline-offset: 1px;
197
- }
198
- }
199
- }
200
-
201
- &-success {
202
- .a-label {
203
- &::before {
204
- border-color: $input-border-success;
205
- outline: 1px solid $input-border-success;
206
- }
207
-
208
- &:hover::before,
209
- &.hover::before {
210
- border-color: $input-border-hover;
211
- outline-color: $input-border-hover;
212
- }
213
- }
214
-
215
- .a-checkbox {
216
- &:hover + .a-label::before,
217
- &.hover + .a-label::before {
218
- border-color: $input-border-hover;
219
- outline-color: $input-border-hover;
220
- }
221
-
222
- &:focus + .a-label::before,
223
- &.focus + .a-label::before {
224
- border-color: $input-border-success;
225
- box-shadow: 0 0 0 1px $input-border-success;
226
- outline-color: $input-border-success;
227
- }
228
-
229
- &:focus + .a-label,
230
- &.focus + .a-label {
231
- outline: 1px dotted $input-border-success;
232
- outline-offset: 1px;
233
- }
234
- }
235
- }
236
152
  }
237
153
 
238
154
  &--radio {
@@ -241,7 +157,7 @@
241
157
  border-radius: 50%;
242
158
 
243
159
  /* The rotate is needed to fix a bug in Firefox where radio
244
- button was not centered. */
160
+ button was not centered. */
245
161
  transform: rotate(0deg);
246
162
  }
247
163
  }
@@ -250,44 +166,45 @@
250
166
  &:focus + .a-label::before,
251
167
  &.focus + .a-label::before {
252
168
  outline: none;
253
- border-color: $input-border-focused;
254
- box-shadow: 0 0 0 1px $input-border-focused;
169
+ border-color: var(--choice-border-focus);
170
+ box-shadow: 0 0 0 1px var(--choice-border-focus);
255
171
  }
256
172
 
257
173
  &:hover + .a-label::before,
258
174
  &.hover + .a-label::before {
259
175
  outline: none;
260
- border-color: $input-border-hover;
261
- box-shadow: 0 0 0 1px $input-border-hover;
176
+ border-color: var(--choice-border-hover);
177
+ box-shadow: 0 0 0 1px var(--choice-border-hover);
262
178
  }
263
179
 
264
180
  &:checked + .a-label::before {
265
- background-color: $input-bg-selected;
266
- box-shadow: inset 0 0 0 2px $form-field-inset;
181
+ background-color: var(--choice-bg-selected);
182
+ box-shadow: inset 0 0 0 2px var(--white); // The radio button ring.
267
183
  }
268
184
 
269
185
  &:focus:checked + .a-label::before,
270
186
  &.focus:checked + .a-label::before {
271
- border-color: $input-border-focused;
187
+ background-color: var(--choice-bg-selected-focus);
188
+ border-color: var(--choice-border-focus);
272
189
  box-shadow:
273
- 0 0 0 1px $input-border-focused,
274
- inset 0 0 0 2px $form-field-inset;
190
+ 0 0 0 1px var(--choice-border-focus),
191
+ inset 0 0 0 2px var(--white); // The radio button ring.
275
192
  }
276
193
 
277
194
  &:hover:checked + .a-label::before,
278
195
  &.hover:checked + .a-label::before {
279
- border-color: $input-border-hover;
196
+ border-color: var(--choice-border-hover);
280
197
  box-shadow:
281
- 0 0 0 1px $input-border-hover,
282
- inset 0 0 0 2px $form-field-inset;
198
+ 0 0 0 1px var(--choice-border-hover),
199
+ inset 0 0 0 2px var(--white); // The radio button ring.
283
200
  }
284
201
 
285
202
  &:checked:disabled + .a-label::before,
286
203
  &:hover:checked:disabled + .a-label::before,
287
204
  &.hover:checked:disabled + .a-label::before {
288
- background-color: $input-bg-disabled-selected;
289
- box-shadow: inset 0 0 0 2px $input-bg-disabled;
290
- border-color: $form-field-input-border-disabled;
205
+ background-color: var(--choice-bg-selected);
206
+ box-shadow: inset 0 0 0 2px var(--gray-10); // The radio button ring.
207
+ border-color: var(--choice-border-disabled);
291
208
  }
292
209
  }
293
210
  }
@@ -319,14 +236,13 @@
319
236
  &:focus + .a-label,
320
237
  &.focus + .a-label,
321
238
  &:checked + .a-label {
322
- // The outline-offset property is not supported in IE.
323
239
  outline-offset: 1px;
324
240
  }
325
241
 
326
242
  &:disabled + .a-label,
327
243
  &:checked:disabled + .a-label,
328
244
  &:hover:disabled + .a-label {
329
- color: $input-text-disabled;
245
+ color: var(--choice-label-disabled);
330
246
  box-shadow: none;
331
247
  background-color: $form-field-input-lg-target-bg-disabled;
332
248
  }
@@ -334,7 +250,7 @@
334
250
  &:checked:disabled + .a-label {
335
251
  &,
336
252
  &::before {
337
- border: 1px solid $form-field-input-border-disabled;
253
+ border: 1px solid var(--form-field-border-disabled);
338
254
  }
339
255
  }
340
256
  }
@@ -57,7 +57,7 @@ select.o-multiselect {
57
57
 
58
58
  &__fieldset {
59
59
  // Resets
60
- border-color: $input-border;
60
+ border-color: var(--select-border-default);
61
61
  border-top: none;
62
62
  margin: 0;
63
63
  padding: 0;
@@ -1,138 +1,74 @@
1
1
  @use 'sass:math';
2
2
  @use '@cfpb/cfpb-design-system/src/abstracts' as *;
3
3
 
4
- // Border and Outline Status styling.
5
- @mixin u-border-outline-error {
6
- border-color: $input-border-error;
7
- outline: 1px solid $input-border-error;
8
- &:hover,
9
- &.hover {
10
- border-color: $input-border-error-hover;
11
- outline: 1px solid $input-border-error-hover;
12
- outline-offset: 0;
13
- }
14
- &:focus,
15
- &.focus {
16
- border-color: $input-border-error;
17
- box-shadow: 0 0 0 1px $input-border-error;
18
- outline: 1px dotted $input-border-error;
19
-
20
- // Both hover and focus simultaenously
21
- &:hover,
22
- &.hover {
23
- border-color: $input-border-error;
24
- box-shadow: 0 0 0 1px $input-border-error;
25
- outline: 1px dotted $input-border-error;
26
- outline-offset: 2px;
27
- }
28
- }
29
- }
30
-
31
- @mixin u-border-outline-warning {
32
- border-color: $input-border-warning;
33
- outline: 1px solid $input-border-warning;
34
- &:hover,
35
- &.hover {
36
- border-color: $input-border-warning-hover;
37
- outline: 1px solid $input-border-warning-hover;
38
- outline-offset: 0;
39
- }
40
- &:focus,
41
- &.focus {
42
- border-color: $input-border-warning;
43
- box-shadow: 0 0 0 1px $input-border-warning;
44
- outline: 1px dotted $input-border-warning;
45
-
46
- // Both hover and focus simultaenously
47
- &:hover,
48
- &.hover {
49
- border-color: $input-border-warning;
50
- box-shadow: 0 0 0 1px $input-border-warning;
51
- outline: 1px dotted $input-border-warning;
52
- outline-offset: 2px;
53
- }
54
- }
55
- }
56
-
57
- @mixin u-border-outline-success {
58
- border-color: $input-border-success;
59
- outline: 1px solid $input-border-success;
60
- &:hover,
61
- &.hover {
62
- border-color: $input-border-success-hover;
63
- outline: 1px solid $input-border-success-hover;
64
- outline-offset: 0;
65
- }
66
- &:focus,
67
- &.focus {
68
- border-color: $input-border-success;
69
- box-shadow: 0 0 0 1px $input-border-success;
70
- outline: 1px dotted $input-border-success;
71
-
72
- // Both hover and focus simultaenously
73
- &:hover,
74
- &.hover {
75
- border-color: $input-border-success;
76
- box-shadow: 0 0 0 1px $input-border-success;
77
- outline: 1px dotted $input-border-success;
78
- outline-offset: 2px;
79
- }
80
- }
81
- }
82
-
83
4
  .a-text-input {
5
+ // Theme variables.
6
+ --input-text: var(--input-text-default);
7
+ --input-text-disabled: var(--input-text-disabled-default);
8
+ --input-text-placeholder: var(--input-text-placeholder-default);
9
+ --input-border: var(--input-border-default);
10
+ --input-border-hover: var(--input-border-hover-default);
11
+ --input-border-focus: var(--input-border-focus-default);
12
+ --input-bg: var(--input-bg-default);
13
+ --input-bg-disabled: var(--input-bg-disabled-default);
14
+
84
15
  // Reset the browser's default styling.
85
16
  appearance: none;
86
17
  display: inline-block;
87
18
  padding: math.div(7px, $base-font-size-px) + em;
88
- border: 1px solid $input-border;
89
- background: $input-bg;
90
- color: $input-text;
19
+ border: 1px solid var(--input-border);
20
+ outline: 0 solid var(--input-border);
21
+ background: var(--input-bg);
22
+ color: var(--input-text);
91
23
  box-sizing: border-box;
92
24
 
93
25
  &:hover,
94
26
  &.hover {
95
- border-color: $input-border-hover;
96
- outline: 1px solid $input-border-hover;
27
+ border-color: var(--input-border-hover);
28
+ outline: 1px solid var(--input-border-hover);
97
29
  }
98
30
 
99
31
  &:focus,
100
32
  &.focus {
101
- border-color: $input-border-focused;
102
- box-shadow: 0 0 0 1px $input-border-focused;
103
- outline: 1px dotted $input-border-focused;
104
-
105
- // The outline-offset property is not supported everywhere (e.g. IE)
106
- // but it adds a nice touch in browsers where it is.
33
+ border-color: var(--input-border-focus);
34
+ box-shadow: 0 0 0 1px var(--input-border-focus);
35
+ outline: 1px dotted var(--input-border-focus);
107
36
  outline-offset: 2px;
108
37
  }
109
38
 
110
39
  &:disabled {
40
+ --input-border: var(--input-border-disabled);
111
41
  &,
112
42
  &:hover,
113
43
  &.hover,
114
44
  &:focus,
115
45
  &.focus {
116
- color: $input-text-disabled;
117
- background-color: $input-bg-disabled;
46
+ color: var(--input-text-disabled);
47
+ background-color: var(--input-bg-disabled);
118
48
  cursor: not-allowed;
119
49
 
120
50
  // Cancel the hover and focus states.
121
- border-color: $input-border;
51
+ border-color: var(--input-border);
122
52
  outline: none;
123
53
  }
124
54
  }
125
55
 
56
+ &--error,
57
+ &--warning,
58
+ &--success {
59
+ outline-width: 1px;
60
+ }
61
+
126
62
  &--error {
127
- @include u-border-outline-error;
63
+ --input-border: var(--input-border-error);
128
64
  }
129
65
 
130
66
  &--warning {
131
- @include u-border-outline-warning;
67
+ --input-border: var(--input-border-warning);
132
68
  }
133
69
 
134
70
  &--success {
135
- @include u-border-outline-success;
71
+ --input-border: var(--input-border-success);
136
72
  }
137
73
  }
138
74
 
@@ -144,10 +80,10 @@
144
80
 
145
81
  // Change place holder text to dark gray (#43484e).
146
82
  ::placeholder {
147
- color: $input-text-placeholder;
83
+ color: var(--input-text-placeholder);
148
84
  }
149
85
 
150
86
  // Force placeholder text color change for "date" field type.
151
87
  input[type='date']::-webkit-datetime-edit {
152
- color: $input-text-placeholder;
88
+ color: var(--input-text-placeholder);
153
89
  }