|
1 | 1 | .ds-input {
|
2 |
| - --dsc-input-border-color--checked: var(--ds-color-accent-base-default); |
3 |
| - --dsc-input-border-color--invalid: var(--ds-color-danger-border-default); |
4 |
| - --dsc-input-border-color--readonly: var(--ds-color-neutral-border-subtle); |
5 |
| - --dsc-input-border-color: var(--ds-color-neutral-border-default); |
6 | 2 | --dsc-input-background--checked: var(--dsc-input-border-color--checked);
|
7 | 3 | --dsc-input-background--invalid: var(--dsc-input-border-color--invalid);
|
8 | 4 | --dsc-input-background--readonly: var(--ds-color-neutral-background-subtle);
|
9 | 5 | --dsc-input-background--switch: var(--ds-color-neutral-border-default);
|
10 | 6 | --dsc-input-background: var(--ds-color-neutral-background-default);
|
| 7 | + --dsc-input-border-color--checked: var(--ds-color-accent-base-default); |
| 8 | + --dsc-input-border-color--invalid: var(--ds-color-danger-border-default); |
| 9 | + --dsc-input-border-color--readonly: var(--ds-color-neutral-border-subtle); |
| 10 | + --dsc-input-border-color: var(--ds-color-neutral-border-default); |
11 | 11 | --dsc-input-border-width--toggle: 2px;
|
12 | 12 | --dsc-input-border-width: 1px;
|
13 | 13 | --dsc-input-color--checked: var(--ds-color-accent-contrast-default);
|
14 | 14 | --dsc-input-color--invalid: var(--ds-color-danger-contrast-default);
|
15 | 15 | --dsc-input-color--readonly: var(--ds-color-neutral-border-default);
|
16 | 16 | --dsc-input-color: var(--ds-color-neutral-text-default);
|
17 |
| - --dsc-input-stroke: 0.05em; |
18 | 17 | --dsc-input-padding: var(--ds-spacing-2) var(--ds-spacing-3);
|
19 | 18 | --dsc-input-size--switch: var(--ds-sizing-7);
|
20 | 19 | --dsc-input-size--toggle: var(--ds-sizing-6);
|
21 | 20 | --dsc-input-size: var(--ds-sizing-12);
|
| 21 | + --dsc-input-stroke: 0.05em; |
22 | 22 |
|
23 | 23 | /* Checkmark with antialiasing is achieved by percentages 48% / 50% / 52% */
|
| 24 | + --diagonal-1: transparent calc(50% - var(--dsc-input-stroke)); |
| 25 | + --diagonal-2: currentcolor calc(48% - var(--dsc-input-stroke)); |
| 26 | + --diagonal-3: currentcolor calc(50% + var(--dsc-input-stroke)); |
| 27 | + --diagonal-4: transparent calc(52% + var(--dsc-input-stroke)); |
24 | 28 | --check-left: calc(var(--dsc-input-stroke) / 2) calc(66.66% + var(--dsc-input-stroke) / 2) / 33.33% 33.33% no-repeat content-box
|
25 |
| - linear-gradient( |
26 |
| - 45deg, |
27 |
| - transparent calc(50% - var(--dsc-input-stroke)), |
28 |
| - currentcolor calc(48% - var(--dsc-input-stroke)), |
29 |
| - currentcolor calc(50% + var(--dsc-input-stroke)), |
30 |
| - transparent calc(52% + var(--dsc-input-stroke)) |
31 |
| - ); |
| 29 | + linear-gradient(45deg, var(--diagonal-1), var(--diagonal-2), var(--diagonal-3), var(--diagonal-4)); |
32 | 30 | --check-right: calc(100% - var(--dsc-input-stroke) / 2) / 66.66% 66.66% no-repeat content-box
|
33 |
| - linear-gradient( |
34 |
| - -45deg, |
35 |
| - transparent calc(50% - var(--dsc-input-stroke)), |
36 |
| - currentcolor calc(48% - var(--dsc-input-stroke)), |
37 |
| - currentcolor calc(50% + var(--dsc-input-stroke)), |
38 |
| - transparent calc(52% + var(--dsc-input-stroke)) |
39 |
| - ); |
| 31 | + linear-gradient(-45deg, var(--diagonal-1), var(--diagonal-2), var(--diagonal-3), var(--diagonal-4)); |
40 | 32 |
|
41 | 33 | appearance: none;
|
42 | 34 | background: var(--dsc-input-background);
|
|
46 | 38 | box-sizing: border-box;
|
47 | 39 | color: var(--dsc-input-color);
|
48 | 40 | font-family: inherit;
|
| 41 | + height: var(--dsc-input-size); |
49 | 42 | margin: 0; /* Reset native margin on checkbox and radio */
|
| 43 | + max-width: 100%; /* Ensure input does not grow outside bounds even with a high value in size="" or cols="" */ |
50 | 44 | padding: var(--dsc-input-padding);
|
51 | 45 | position: relative; /* Ensure foucs outline renders on top */
|
52 | 46 |
|
|
58 | 52 | --dsc-input-background: var(--dsc-input-background--switch);
|
59 | 53 | }
|
60 | 54 |
|
61 |
| - &:not(textarea) { |
62 |
| - height: var(--dsc-input-size); |
| 55 | + &:is(select) { |
| 56 | + padding-right: 2.4em; |
| 57 | + background: linear-gradient(45deg, var(--diagonal-1), var(--diagonal-2), var(--diagonal-3), var(--diagonal-4)) calc(100% - 1.2em + var(--dsc-input-stroke)) |
| 58 | + / 0.4em 0.4em no-repeat, linear-gradient(-45deg, var(--diagonal-1), var(--diagonal-2), var(--diagonal-3), var(--diagonal-4)) calc(100% - 0.8em) / 0.4em |
| 59 | + 0.4em no-repeat, var(--dsc-input-background); |
63 | 60 | }
|
64 | 61 |
|
65 |
| - &:not([size]) { |
| 62 | + &:is(textarea) { |
| 63 | + height: auto; /* Allow rows="" to set height */ |
| 64 | + min-height: calc(var(--dsc-input-size) * 1.5); /* Set a min-height to indicate this is a <textarea> and not an <input> */ |
| 65 | + resize: vertical; /* Allow resizing vertically only */ |
| 66 | + |
| 67 | + &:not([rows]) { |
| 68 | + field-sizing: content; |
| 69 | + } |
| 70 | + } |
| 71 | + |
| 72 | + &:not([size], [cols], select) { |
66 | 73 | width: 100%;
|
67 | 74 | }
|
68 | 75 |
|
69 | 76 | /**
|
70 | 77 | * States
|
71 | 78 | */
|
72 | 79 | &:checked,
|
73 |
| - &:indeterminate { |
74 |
| - --dsc-input-border-color: var(--dsc-input-border-color--checked); |
| 80 | + &:indeterminate:where([type='checkbox']) { |
75 | 81 | --dsc-input-background: var(--dsc-input-background--checked);
|
| 82 | + --dsc-input-border-color: var(--dsc-input-border-color--checked); |
76 | 83 | --dsc-input-color: var(--dsc-input-color--checked);
|
77 | 84 | }
|
78 | 85 |
|
|
83 | 90 | }
|
84 | 91 |
|
85 | 92 | &[aria-invalid='true'] {
|
86 |
| - --dsc-input-border-color: var(--dsc-input-border-color--invalid); |
87 | 93 | --dsc-input-background--checked: var(--dsc-input-background--invalid);
|
| 94 | + --dsc-input-border-color: var(--dsc-input-border-color--invalid); |
88 | 95 | --dsc-input-color--checked: var(--dsc-input-color--invalid);
|
89 | 96 | }
|
90 | 97 |
|
91 | 98 | /* Using attribute [readonly] since pseudo selector :read-only is always true for checkbox, radio and select */
|
92 | 99 | &[readonly] {
|
93 |
| - --dsc-input-border-color: var(--dsc-input-border-color--readonly); |
94 | 100 | --dsc-input-background: var(--dsc-input-background--readonly);
|
| 101 | + --dsc-input-border-color: var(--dsc-input-border-color--readonly); |
95 | 102 | --dsc-input-color: var(--dsc-input-color--readonly);
|
96 | 103 | }
|
97 | 104 |
|
@@ -192,13 +199,12 @@ label:has(input:is([type='checkbox'], [type='radio']):not(:disabled, [aria-disab
|
192 | 199 | * Affix
|
193 | 200 | */
|
194 | 201 | .ds-input-affix {
|
195 |
| - --dsc-input-affix-border-radius: var(--ds-border-radius-md); |
196 | 202 | --dsc-input-affix-border: 1px solid var(--ds-color-neutral-border-default);
|
197 | 203 | --dsc-input-affix-padding-inline: var(--ds-spacing-4);
|
198 | 204 |
|
199 | 205 | align-items: center;
|
200 | 206 | background: var(--ds-color-neutral-background-subtle);
|
201 |
| - border-radius: var(--dsc-input-affix-border-radius); |
| 207 | + border-radius: var(--ds-border-radius-md); |
202 | 208 | box-sizing: border-box;
|
203 | 209 | color: var(--ds-color-neutral-text-subtle);
|
204 | 210 | display: inline-flex; /* Using inline-flex to match native inline-block behaviour of <input> */
|
|
0 commit comments