Skip to content

Commit 6fbc452

Browse files
lazdGarthDB
authored andcommitted
feat: migrate Picker from FieldButton to Picker... button
BREAKING CHANGE: Picker markup changed completely
1 parent 3e57a52 commit 6fbc452

3 files changed

Lines changed: 296 additions & 272 deletions

File tree

components/picker/index.css

Lines changed: 224 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -11,73 +11,99 @@ governing permissions and limitations under the License.
1111
*/
1212

1313
@import "../commons/index.css";
14+
@import "../commons/basebutton.css";
1415
@import "../vars/css/components/spectrum-picker.css";
1516

16-
:root {
17-
--spectrum-picker-popover-max-width: var(
18-
--spectrum-global-dimension-size-3000
19-
);
20-
--spectrum-picker-width: var(--spectrum-global-dimension-size-2400);
21-
22-
/* This needs to be a variable so it overrides when using multiStops */
23-
--spectrum-picker-quiet-width: auto;
24-
}
25-
2617
.spectrum-Picker {
27-
/* todo: remove when fixed in DNA */
28-
--spectrum-picker-min-width: var(--spectrum-global-dimension-size-400);
29-
3018
@remapvars {
3119
find: /--spectrum-picker-m(.*)/;
3220
filter: color;
3321
replace: --spectrum-picker$1;
3422
}
35-
@remapvars {
36-
find: /--spectrum-picker-quiet-m(.*)/;
37-
filter: color;
38-
replace: --spectrum-picker-quiet$1;
39-
}
23+
24+
/* todo: remove when fixed in DNA */
25+
--spectrum-picker-min-width: var(--spectrum-global-dimension-size-400);
26+
27+
/* Todo: fix in DNA, should have been zero */
28+
--spectrum-picker-disabled-border-size: 0;
29+
30+
--spectrum-picker-popover-max-width: var(--spectrum-global-dimension-size-3000);
31+
--spectrum-picker-width: var(--spectrum-global-dimension-size-2400);
32+
33+
/* todo: use real DNA var */
34+
--spectrum-picker-border-size-increase-focus: 1px;
4035
}
4136

4237
.spectrum-Picker {
43-
position: relative;
44-
display: inline-block;
38+
@inherit: %spectrum-BaseButton;
39+
40+
display: flex;
41+
justify-content: space-between;
42+
align-items: center;
4543

4644
/* Truncate if menu options make us too wide */
4745
max-inline-size: 100%;
4846
inline-size: var(--spectrum-picker-width);
4947
min-inline-size: var(--spectrum-picker-min-width);
48+
block-size: var(--spectrum-picker-height);
5049

51-
/* Hack to enable select-powered Dropdowns */
52-
select {
53-
appearance: none;
54-
-ms-appearance: none; /* Edge */
50+
margin: 0;
51+
padding-block: 0;
52+
padding-inline: var(--spectrum-picker-textonly-padding-left) var(--spectrum-picker-textonly-padding-right);
5553

56-
&::-ms-expand {
57-
display: none;
58-
}
54+
border-width: var(--spectrum-picker-border-size);
55+
border-style: solid;
56+
border-radius: var(--spectrum-picker-border-radius);
5957

60-
&::-ms-value {
61-
background-color: transparent;
62-
}
58+
transition: background-color var(--spectrum-global-animation-duration-100),
59+
box-shadow var(--spectrum-global-animation-duration-100),
60+
border-color var(--spectrum-global-animation-duration-100);
6361

64-
& + .spectrum-Picker-icon {
65-
position: absolute;
66-
inset-inline-end: var(--spectrum-picker-icon-gap);
67-
inset-block-start: 50%;
68-
margin-block-start: calc(
69-
var(--spectrum-icon-chevron-down-medium-height) / -2
70-
);
71-
}
62+
&:disabled,
63+
&.is-disabled {
64+
border-width: var(--spectrum-picker-disabled-border-size);
65+
cursor: default;
66+
}
67+
68+
&.is-open {
69+
border-width: var(--spectrum-picker-border-size);
70+
}
71+
72+
.spectrum-Picker-icon {
73+
flex-shrink: 0;
74+
75+
margin-inline-start: calc(var(--spectrum-picker-padding-left) - var(--spectrum-picker-textonly-padding-left));
76+
margin-inline-end: var(--spectrum-picker-icon-gap);
77+
}
78+
79+
.spectrum-Picker-label + .spectrum-Picker-icon {
80+
margin-inline-start: var(--spectrum-picker-icon-gap);
7281
}
7382
}
7483

75-
.spectrum-Picker-trigger {
76-
position: relative;
77-
inline-size: 100%;
78-
display: flex;
79-
justify-content: space-between;
80-
align-items: center;
84+
.spectrum-Picker--quiet {
85+
@remapvars {
86+
find: /--spectrum-picker-quiet-m(.*)/;
87+
filter: color;
88+
replace: --spectrum-picker-$1;
89+
}
90+
91+
/* Todo: fix in DNA, should have been zero */
92+
--spectrum-picker-border-size: 0;
93+
--spectrum-picker-border-radius: 0;
94+
--spectrum-picker-textonly-padding-left: 0;
95+
--spectrum-picker-textonly-padding-right: 0;
96+
}
97+
98+
.spectrum-Picker--quiet {
99+
inline-size: auto;
100+
101+
&:disabled,
102+
&.is-disabled {
103+
&:focus-ring {
104+
box-shadow: none;
105+
}
106+
}
81107
}
82108

83109
.spectrum-Picker-label {
@@ -107,93 +133,183 @@ governing permissions and limitations under the License.
107133
}
108134

109135
/* Only apply margin to the icon if there's a label */
110-
.spectrum-Picker-label + .spectrum-Picker-icon {
111-
margin-inline-start: var(--spectrum-picker-icon-gap);
112-
}
113-
114-
.spectrum-Icon + .spectrum-Picker-label {
115-
/* todo not sure if this is right */
136+
.spectrum-Picker-label + .spectrum-Picker-validationIcon {
116137
margin-inline-start: var(--spectrum-picker-icon-gap);
117138
}
118139

119140
/* Only apply margin if there's a label */
120-
.spectrum-Picker-label ~ .spectrum-Picker-icon {
141+
.spectrum-Picker-label ~ .spectrum-Picker-menuIcon {
121142
margin-inline-start: var(--spectrum-picker-icon-gap);
122143
}
123144

124-
.spectrum-Picker-icon {
145+
/* The picker chevron */
146+
.spectrum-Picker-menuIcon {
125147
display: inline-block;
126148
position: relative;
127149
vertical-align: top;
128150
transition: color var(--spectrum-global-animation-duration-100) ease-out;
129151
flex-shrink: 0;
130-
131-
/* Fix Safari 10 bug where align-items is ignored inside of buttons */
132-
margin-block-start: calc(
133-
calc(
134-
var(--spectrum-picker-height) -
135-
calc(var(--spectrum-picker-border-size) * 2) -
136-
var(--spectrum-icon-chevron-down-medium-height)
137-
) / 2
138-
);
139-
margin-block-end: calc(
140-
calc(
141-
var(--spectrum-picker-height) -
142-
calc(var(--spectrum-picker-border-size) * 2) -
143-
var(--spectrum-icon-chevron-down-medium-height)
144-
) / 2
145-
);
146-
147-
opacity: 1;
148-
}
149-
150-
/* Error icons */
151-
.spectrum-Picker-trigger {
152-
.spectrum-Icon:not(.spectrum-Picker-icon) {
153-
flex-shrink: 0;
154-
/* Fix Safari 10 bug where align-items is ignored inside of buttons */
155-
margin-block-start: calc(
156-
calc(
157-
var(--spectrum-picker-height) -
158-
calc(var(--spectrum-picker-border-size) * 2) -
159-
var(--spectrum-picker-icon-size)
160-
) / 2
161-
);
162-
margin-block-end: calc(
163-
calc(
164-
var(--spectrum-picker-height) -
165-
calc(var(--spectrum-picker-border-size) * 2) -
166-
var(--spectrum-picker-icon-size)
167-
) / 2
168-
);
169-
}
170-
171-
.spectrum-Picker-label + .spectrum-Icon:not(.spectrum-Picker-icon) {
172-
margin-inline-start: var(--spectrum-picker-icon-gap);
173-
}
174152
}
175153

176-
.spectrum-Icon + .spectrum-Picker-icon {
154+
.spectrum-Picker-validationIcon + .spectrum-Picker-menuIcon {
177155
margin-inline-start: var(--spectrum-picker-icon-gap);
178156
}
179157

180-
.spectrum-Picker--quiet {
181-
@remapvars {
182-
find: /--spectrum-picker-quiet-m(.*)/;
183-
filter: color;
184-
replace: --spectrum-picker$1;
185-
}
186-
187-
inline-size: var(--spectrum-picker-quiet-width);
188-
}
189-
190158
.spectrum-Picker-popover {
191159
max-inline-size: var(--spectrum-picker-popover-max-width);
192160
}
193161

194162
.spectrum-Picker-popover--quiet {
195163
margin-inline-start: calc(
196-
-1 * calc(var(--spectrum-picker-quiet-popover-offset-x) +
164+
-1 * calc(var(--spectrum-picker-quiet-m-popover-offset-x) +
197165
var(--spectrum-popover-border-size))
198166
);
199167
}
168+
169+
.spectrum-Picker {
170+
color: var(--spectrum-picker-m-text-color);
171+
background-color: var(--spectrum-picker-m-background-color);
172+
border-color: var(--spectrum-picker-m-border-color);
173+
174+
&:hover {
175+
color: var(--spectrum-picker-m-text-color-hover);
176+
background-color: var(--spectrum-picker-m-background-color-hover);
177+
border-color: var(--spectrum-picker-m-border-color-hover);
178+
179+
.spectrum-Picker-menuIcon {
180+
color: var(--spectrum-picker-m-icon-color-hover);
181+
}
182+
}
183+
184+
&:active,
185+
&.is-selected {
186+
background-color: var(--spectrum-picker-m-background-color-down);
187+
border-color: var(--spectrum-picker-m-border-color-down);
188+
189+
&.is-placeholder {
190+
.spectrum-Picker-label {
191+
color: var(--spectrum-picker-m-placeholder-text-color-down);
192+
}
193+
}
194+
}
195+
196+
&:focus-ring,
197+
&.is-focused {
198+
background-color: var(--spectrum-picker-m-background-color-key-focus);
199+
border-color: var(--spectrum-picker-m-border-color-key-focus);
200+
box-shadow: 0 0 0 var(--spectrum-picker-border-size-increase-focus) var(--spectrum-picker-m-border-color-key-focus);
201+
color: var(--spectrum-picker-m-text-color-key-focus);
202+
203+
&.is-placeholder {
204+
color: var(--spectrum-picker-m-placeholder-text-color-key-focus);
205+
}
206+
}
207+
208+
&.is-invalid {
209+
border-color: var(--spectrum-picker-m-border-color-error);
210+
211+
.spectrum-Picker-validationIcon {
212+
color: var(--spectrum-picker-m-validation-icon-color-error);
213+
}
214+
215+
&:hover {
216+
border-color: var(--spectrum-picker-m-border-color-error-hover);
217+
}
218+
219+
&:active,
220+
&.is-selected {
221+
border-color: var(--spectrum-picker-m-border-color-error-down);
222+
}
223+
224+
&:focus-ring,
225+
&.is-focused {
226+
border-color: var(--spectrum-picker-m-border-color-error-key-focus);
227+
box-shadow: 0 0 0 var(--spectrum-picker-border-size-increase-focus) var(--spectrum-picker-m-border-color-error-key-focus);
228+
}
229+
}
230+
231+
&:disabled,
232+
&.is-disabled {
233+
background-color: var(--spectrum-picker-m-background-color-disabled);
234+
color: var(--spectrum-picker-m-text-color-disabled);
235+
236+
.spectrum-Picker-icon,
237+
.spectrum-Picker-menuIcon,
238+
.spectrum-Picker-validationIcon {
239+
color: var(--spectrum-picker-m-icon-color-disabled);
240+
}
241+
242+
.spectrum-Picker-label {
243+
&.is-placeholder {
244+
color: var(--spectrum-picker-m-placeholder-text-color-disabled);
245+
}
246+
}
247+
}
248+
}
249+
250+
.spectrum-Picker-menuIcon {
251+
color: var(--spectrum-picker-m-icon-color);
252+
}
253+
254+
.spectrum-Picker-label {
255+
&.is-placeholder {
256+
color: var(--spectrum-picker-m-placeholder-text-color);
257+
258+
&:hover {
259+
color: var(--spectrum-picker-m-placeholder-text-color-hover);
260+
}
261+
262+
&:active {
263+
color: var(--spectrum-picker-m-placeholder-text-color-mouse-focus);
264+
}
265+
}
266+
}
267+
268+
.spectrum-Picker--quiet {
269+
color: var(--spectrum-picker-m-text-color);
270+
border-color: var(--spectrum-picker-quiet-m-border-color);
271+
background-color: var(--spectrum-picker-quiet-m-background-color);
272+
273+
&:hover {
274+
background-color: var(--spectrum-picker-quiet-m-background-color-hover);
275+
color: var(--spectrum-picker-m-text-color-hover);
276+
}
277+
278+
&:focus-ring,
279+
&.is-focused {
280+
background-color: var(--spectrum-picker-quiet-m-background-color-key-focus);
281+
box-shadow: 0 2px 0 0 var(--spectrum-picker-m-border-color-key-focus);
282+
283+
&.is-placeholder {
284+
color: var(--spectrum-picker-quiet-m-placeholder-text-color-key-focus);
285+
}
286+
.spectrum-Picker-menuIcon {
287+
color: var(--spectrum-picker-m-icon-color-key-focus)
288+
}
289+
}
290+
291+
&:active,
292+
&.is-selected {
293+
background-color: var(--spectrum-picker-quiet-m-background-color-down);
294+
border-color: var(--spectrum-picker-quiet-m-border-color-down);
295+
296+
&:focus-ring,
297+
&.is-focused {
298+
background-color: var(--spectrum-picker-quiet-m-background-color-key-focus);
299+
box-shadow: 0 2px 0 0 var(--spectrum-picker-m-border-color-key-focus);
300+
}
301+
}
302+
303+
&.is-invalid {
304+
&:focus-ring,
305+
&.is-focused {
306+
box-shadow: 0 2px 0 0 var(--spectrum-picker-m-border-color-error-key-focus);
307+
}
308+
}
309+
310+
&:disabled,
311+
&.is-disabled {
312+
background-color: var(--spectrum-picker-quiet-m-background-color-disabled);
313+
color: var(--spectrum-picker-m-text-color-disabled);
314+
}
315+
}

0 commit comments

Comments
 (0)