@cfpb/cfpb-design-system 3.10.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 (61) hide show
  1. package/CHANGELOG.md +94 -51
  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 +51 -40
  56. package/src/components/cfpb-forms/form-alert.scss +8 -6
  57. package/src/components/cfpb-forms/form-field.scss +76 -156
  58. package/src/components/cfpb-forms/multiselect.scss +4 -5
  59. package/src/components/cfpb-forms/select.scss +25 -11
  60. package/src/components/cfpb-forms/text-input.scss +34 -98
  61. package/src/utilities/utilities.scss +18 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cfpb/cfpb-design-system",
3
- "version": "3.10.0",
3
+ "version": "3.12.0",
4
4
  "description": "CFPB's UI framework",
5
5
  "exports": {
6
6
  ".": "./src/index.js",
@@ -45,7 +45,7 @@ $size-i: 34px; // h1-size
45
45
  $size-ii: 26px; // h2-size
46
46
  $size-iii: 22px; // h3-size
47
47
  $size-iv: 18px; // h4-size
48
- $size-v: 14px; // h5-site
48
+ $size-v: 14px; // h5-size
49
49
  $size-vi: 12px; // h6-size
50
50
  $size-code: 13px; // Custom size only for Mono code blocks
51
51
 
@@ -82,45 +82,56 @@ $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
- $select-border: $input-border;
117
- $select-icon-bg: var(--gray-10);
118
- $select-text-disabled: $input-text-disabled;
119
-
120
- // .m-form-field
121
- $form-field-input-border: $input-border;
122
- $form-field-input-border-disabled: var(--gray-60);
123
- $form-field-inset: var(--white);
85
+ :root {
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
110
+ --select-border-width-default: 1px;
111
+ --select-border-error: var(--red);
112
+ --select-border-width-error: 2px;
113
+ --select-border-hover-default: var(--pacific); // $input-border-hover
114
+ --select-border-focus-default: var(--pacific); // $input-border-focused
115
+ --select-bg-disabled-default: var(--gray-10); // $input-bg-disabled
116
+ --select-icon-bg-default: var(--gray-10);
117
+ --select-text-disabled-default: var(--gray-dark); // $input-text-disabled
118
+
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
+ }
124
135
 
125
136
  // .m-form-field--lg-target
126
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,36 +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;
91
+ outline: none;
94
92
  }
95
93
  }
96
94
  }
97
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
+ }
98
121
  }
99
122
 
100
123
  &--checkbox {
101
124
  .a-checkbox {
102
125
  &:focus + .a-label::before,
103
126
  &.focus + .a-label::before {
104
- border-color: $input-border-focused;
105
- 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);
106
130
  }
107
131
 
108
132
  &:hover + .a-label::before,
109
133
  &.hover + .a-label::before {
110
- border-color: $input-border-hover;
111
- 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);
112
137
  }
113
138
 
114
139
  &:checked + .a-label::before {
@@ -124,114 +149,6 @@
124
149
  --cfpb-background-icon-svg: 'approved rgb(90,93,97)';
125
150
  }
126
151
  }
127
-
128
- &-error {
129
- .a-label {
130
- &::before {
131
- border-color: $input-border-error;
132
- outline: 1px solid $input-border-error;
133
- }
134
-
135
- &:hover::before,
136
- &.hover::before {
137
- border-color: $input-border-hover;
138
- outline-color: $input-border-hover;
139
- }
140
- }
141
-
142
- .a-checkbox {
143
- &:hover + .a-label::before,
144
- &.hover + .a-label::before {
145
- border-color: $input-border-hover;
146
- outline-color: $input-border-hover;
147
- }
148
-
149
- &:focus + .a-label::before,
150
- &.focus + .a-label::before {
151
- border-color: $input-border-error;
152
- box-shadow: 0 0 0 1px $input-border-error;
153
- outline-color: $input-border-error;
154
- }
155
-
156
- &:focus + .a-label,
157
- &.focus + .a-label {
158
- outline: 1px dotted $input-border-error;
159
- outline-offset: 1px;
160
- }
161
- }
162
- }
163
-
164
- &-warning {
165
- .a-label {
166
- &::before {
167
- border-color: $input-border-warning;
168
- outline: 1px solid $input-border-warning;
169
- }
170
-
171
- &:hover::before,
172
- &.hover::before {
173
- border-color: $input-border-hover;
174
- outline-color: $input-border-hover;
175
- }
176
- }
177
-
178
- .a-checkbox {
179
- &:hover + .a-label::before,
180
- &.hover + .a-label::before {
181
- border-color: $input-border-hover;
182
- outline-color: $input-border-hover;
183
- }
184
-
185
- &:focus + .a-label::before,
186
- &.focus + .a-label::before {
187
- border-color: $input-border-warning;
188
- box-shadow: 0 0 0 1px $input-border-warning;
189
- outline-color: $input-border-warning;
190
- }
191
-
192
- &:focus + .a-label,
193
- &.focus + .a-label {
194
- outline: 1px dotted $input-border-warning;
195
- outline-offset: 1px;
196
- }
197
- }
198
- }
199
-
200
- &-success {
201
- .a-label {
202
- &::before {
203
- border-color: $input-border-success;
204
- outline: 1px solid $input-border-success;
205
- }
206
-
207
- &:hover::before,
208
- &.hover::before {
209
- border-color: $input-border-hover;
210
- outline-color: $input-border-hover;
211
- }
212
- }
213
-
214
- .a-checkbox {
215
- &:hover + .a-label::before,
216
- &.hover + .a-label::before {
217
- border-color: $input-border-hover;
218
- outline-color: $input-border-hover;
219
- }
220
-
221
- &:focus + .a-label::before,
222
- &.focus + .a-label::before {
223
- border-color: $input-border-success;
224
- box-shadow: 0 0 0 1px $input-border-success;
225
- outline-color: $input-border-success;
226
- }
227
-
228
- &:focus + .a-label,
229
- &.focus + .a-label {
230
- outline: 1px dotted $input-border-success;
231
- outline-offset: 1px;
232
- }
233
- }
234
- }
235
152
  }
236
153
 
237
154
  &--radio {
@@ -240,7 +157,7 @@
240
157
  border-radius: 50%;
241
158
 
242
159
  /* The rotate is needed to fix a bug in Firefox where radio
243
- button was not centered. */
160
+ button was not centered. */
244
161
  transform: rotate(0deg);
245
162
  }
246
163
  }
@@ -249,41 +166,45 @@
249
166
  &:focus + .a-label::before,
250
167
  &.focus + .a-label::before {
251
168
  outline: none;
252
- border-color: $input-border-focused;
253
- 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);
254
171
  }
255
172
 
256
173
  &:hover + .a-label::before,
257
174
  &.hover + .a-label::before {
258
175
  outline: none;
259
- border-color: $input-border-hover;
260
- 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);
261
178
  }
262
179
 
263
180
  &:checked + .a-label::before {
264
- background-color: $input-bg-selected;
265
- box-shadow: inset 0 0 0 2px $form-field-inset;
266
- }
267
-
268
- &:checked:disabled + .a-label::before {
269
- background-color: $input-bg-disabled-selected;
270
- box-shadow: inset 0 0 0 2px $input-bg-disabled;
181
+ background-color: var(--choice-bg-selected);
182
+ box-shadow: inset 0 0 0 2px var(--white); // The radio button ring.
271
183
  }
272
184
 
273
185
  &:focus:checked + .a-label::before,
274
186
  &.focus:checked + .a-label::before {
275
- border-color: $input-border-focused;
187
+ background-color: var(--choice-bg-selected-focus);
188
+ border-color: var(--choice-border-focus);
276
189
  box-shadow:
277
- 0 0 0 1px $input-border-focused,
278
- 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.
279
192
  }
280
193
 
281
194
  &:hover:checked + .a-label::before,
282
195
  &.hover:checked + .a-label::before {
283
- border-color: $input-border-hover;
196
+ border-color: var(--choice-border-hover);
284
197
  box-shadow:
285
- 0 0 0 1px $input-border-hover,
286
- 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.
200
+ }
201
+
202
+ &:checked:disabled + .a-label::before,
203
+ &:hover:checked:disabled + .a-label::before,
204
+ &.hover:checked:disabled + .a-label::before {
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);
287
208
  }
288
209
  }
289
210
  }
@@ -315,14 +236,13 @@
315
236
  &:focus + .a-label,
316
237
  &.focus + .a-label,
317
238
  &:checked + .a-label {
318
- // The outline-offset property is not supported in IE.
319
239
  outline-offset: 1px;
320
240
  }
321
241
 
322
242
  &:disabled + .a-label,
323
243
  &:checked:disabled + .a-label,
324
244
  &:hover:disabled + .a-label {
325
- color: $input-text-disabled;
245
+ color: var(--choice-label-disabled);
326
246
  box-shadow: none;
327
247
  background-color: $form-field-input-lg-target-bg-disabled;
328
248
  }
@@ -330,7 +250,7 @@
330
250
  &:checked:disabled + .a-label {
331
251
  &,
332
252
  &::before {
333
- border: 1px solid $form-field-input-border-disabled;
253
+ border: 1px solid var(--form-field-border-disabled);
334
254
  }
335
255
  }
336
256
  }
@@ -13,7 +13,7 @@ select.o-multiselect {
13
13
  height: 5.5em;
14
14
  padding-top: math.div(4px, $base-font-size-px) + em;
15
15
  padding-bottom: math.div(4px, $base-font-size-px) + em;
16
- border: 1px solid $select-border;
16
+ border: 1px solid var(--select-border-default);
17
17
 
18
18
  option {
19
19
  padding: math.div(2px, $base-font-size-px) + em
@@ -31,19 +31,18 @@ select.o-multiselect {
31
31
  // Arrow box width must be odd size to properly center the bg image
32
32
  width: math.div($select-height, $base-font-size-px) + em;
33
33
  box-sizing: border-box;
34
- border-left: 1px solid $select-border;
34
+ border: 1px solid var(--select-border-default);
35
35
  position: absolute;
36
36
  top: 0;
37
37
  right: 0;
38
38
  bottom: 0;
39
- background-color: $select-icon-bg;
39
+ background-color: var(--select-icon-bg-default);
40
40
 
41
41
  --cfpb-background-icon-svg: 'down';
42
42
 
43
43
  background-size: auto $cf-icon-height;
44
44
  background-repeat: no-repeat;
45
45
  background-position: center center;
46
- border: 1px solid $input-border;
47
46
  content: '';
48
47
  pointer-events: none;
49
48
  }
@@ -58,7 +57,7 @@ select.o-multiselect {
58
57
 
59
58
  &__fieldset {
60
59
  // Resets
61
- border-color: $input-border;
60
+ border-color: var(--select-border-default);
62
61
  border-top: none;
63
62
  margin: 0;
64
63
  padding: 0;
@@ -2,8 +2,16 @@
2
2
  @use '@cfpb/cfpb-design-system/src/abstracts' as *;
3
3
 
4
4
  .a-select {
5
+ --select-border: var(--select-border-default);
6
+ --select-border-width: var(--select-border-width-default);
7
+
5
8
  position: relative;
6
- border: 1px solid $select-border;
9
+ border: var(--select-border-width) solid var(--select-border);
10
+
11
+ &:has(select[disabled]) {
12
+ border: var(--select-border-width-default) solid
13
+ var(--select-border-default);
14
+ }
7
15
 
8
16
  select {
9
17
  width: 100%;
@@ -13,21 +21,22 @@
13
21
  em;
14
22
  border: 0;
15
23
  appearance: none;
16
- background-color: $input-bg;
24
+ background-color: var(--white);
17
25
  border-radius: 0;
18
- color: $text;
26
+ color: var(--black);
19
27
 
20
28
  &:hover,
21
29
  &.hover {
22
- outline: 2px solid $input-border-hover;
30
+ outline: 2px solid var(--select-border-hover-default);
23
31
  outline-offset: 0;
32
+ cursor: pointer;
24
33
  }
25
34
 
26
35
  &:active,
27
36
  &:focus,
28
37
  &.focus {
29
- box-shadow: 0 0 0 2px $input-border-focused;
30
- outline: 1px dotted $input-border-focused;
38
+ box-shadow: 0 0 0 2px var(--select-border-focus-default);
39
+ outline: 1px dotted var(--select-border-focus-default);
31
40
 
32
41
  // The outline-offset property is not supported everywhere (e.g. IE)
33
42
  // but it adds a nice touch in browsers where it is.
@@ -36,8 +45,7 @@
36
45
  }
37
46
 
38
47
  select[disabled] {
39
- color: $select-text-disabled;
40
- background-color: $input-bg-disabled;
48
+ background-color: var(--select-bg-disabled-default);
41
49
  cursor: not-allowed;
42
50
 
43
51
  &:hover,
@@ -48,22 +56,23 @@
48
56
  }
49
57
  }
50
58
 
59
+ select[disabled],
51
60
  select[disabled] option,
52
61
  select[disabled] option:disabled,
53
62
  select option:disabled {
54
- color: $select-text-disabled;
63
+ color: var(--select-text-disabled-default);
55
64
  }
56
65
 
57
66
  &::after {
58
67
  // Arrow box width must be odd size to properly center the bg image
59
68
  width: math.div($select-height, $base-font-size-px) + em;
60
69
  box-sizing: border-box;
61
- border-left: 1px solid $select-border;
70
+ border-left: 1px solid var(--select-border-default);
62
71
  position: absolute;
63
72
  top: 0;
64
73
  right: 0;
65
74
  bottom: 0;
66
- background-color: $select-icon-bg;
75
+ background-color: var(--select-icon-bg-default);
67
76
 
68
77
  --cfpb-background-icon-svg: 'down';
69
78
 
@@ -80,4 +89,9 @@
80
89
  &--disabled::after {
81
90
  --cfpb-background-icon-svg: 'down rgb(90,93,97)';
82
91
  }
92
+
93
+ &--error {
94
+ --select-border: var(--select-border-error);
95
+ --select-border-width: var(--select-border-width-error);
96
+ }
83
97
  }