@oscarpalmer/oui 0.9.0 → 0.11.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/dist/css/form.css CHANGED
@@ -1,68 +1,463 @@
1
1
  @charset "UTF-8";
2
+ /*! https://github.com/oscarpalmer/oui */
3
+
2
4
  :where(.oui-fieldset) {
3
5
  padding: 1em;
4
6
  border: 1px solid var(--oui-gray-3);
5
7
  border-radius: 0.25em;
6
8
  }
7
9
 
8
- :where(.oui-input) {
9
- padding: 0.5em 0.75em;
10
- outline: 3px solid transparent;
10
+ :where(.oui-input:not([type=range i])) {
11
+ --oui-background-value: var(--oui-absolute);
12
+ --oui-background-percentage: 0%;
13
+ --oui-foreground-percentage: 0%;
14
+ --oui-outline-percentage: 100%;
15
+ --oui-outline-value: var(--oui-blue-6);
16
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
11
17
  outline-offset: 0;
12
- background-color: var(--oui-absolute);
13
- border-color: var(--oui-gray-3);
14
- border-radius: 0.25em;
15
- box-shadow: inset 0 1px 2px 0 color-mix(in oklab, var(--oui-gray-10), transparent 80%);
16
18
  transition: 0.125s ease-in-out;
19
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
20
+ border: 1px solid var(--oui-border-value, var(--oui-gray-3));
21
+ box-shadow: inset 0 1px 2px 0 color-mix(in oklab, var(--oui-gray-10), transparent 75%);
22
+ color: color-mix(in oklab, var(--oui-foreground-value, inherit), transparent var(--oui-foreground-percentage));
23
+ padding: 0.5em 0.75em;
24
+ border-radius: 0.25em;
17
25
  }
18
- :where(.oui-input:not(textarea)) {
26
+ :where(.oui-input:not([type=range i], select[multiple], textarea)) {
19
27
  overflow: hidden;
20
28
  white-space: nowrap;
21
29
  text-overflow: ellipsis;
22
30
  }
23
- :where(.oui-input:is([type=date],
24
- [type=datetime-local],
25
- [type=month],
26
- [type=number],
27
- [type=tel],
28
- [type=time],
29
- [type=url],
30
- [type=week])) {
31
+ :where(.oui-input:is([list]))::-webkit-calendar-picker-indicator {
32
+ display: none !important;
33
+ }
34
+ :where(.oui-input:is([type=color i])) {
35
+ padding: 0;
36
+ }
37
+ :where(.oui-input:is([type=date i],
38
+ [type=datetime-local i],
39
+ [type=month i],
40
+ [type=number i],
41
+ [type=tel i],
42
+ [type=time i],
43
+ [type=url i],
44
+ [type=week i])) {
31
45
  font-variant-numeric: tabular-nums;
32
46
  }
33
- :where(.oui-input.oui-validateable:not([disabled], [aria-disabled=true]):is(:user-invalid,
34
- [aria-invalid=true])) {
35
- outline-color: color-mix(in oklab, var(--oui-red-6), transparent 60%);
36
- border-color: var(--oui-red-6);
47
+ :where(.oui-input:is([type=file i])) {
48
+ padding-left: 0.5em;
49
+ }
50
+ :where(.oui-input:is([type=file i]))::file-selector-button {
51
+ --oui-background-percentage: 25%;
52
+ --oui-foreground-percentage: 0%;
53
+ --oui-outline-percentage: 100%;
54
+ --oui-shadow-percentage: 85%;
55
+ --oui-shadow-value: color-mix(
56
+ in oklch,
57
+ var(--oui-outline-value, var(--oui-gray-6)),
58
+ transparent var(--oui-shadow-percentage)
59
+ );
60
+ padding: 0.5em 0.75em;
61
+ display: inline-flex;
62
+ flex-flow: row wrap;
63
+ gap: 0.75em;
64
+ align-items: center;
65
+ border-radius: 0.25em;
66
+ background-color: color-mix(in oklab, var(--oui-background-value, var(--oui-gray-2)), transparent var(--oui-background-percentage));
67
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value, var(--oui-gray-6)), transparent var(--oui-outline-percentage));
68
+ border: none;
69
+ box-shadow: 0 0 0 1px var(--oui-shadow-value), 0 1px 2px 0 var(--oui-shadow-value), 0 2px 4px 0 var(--oui-shadow-value);
70
+ color: color-mix(in oklab, var(--oui-foreground-value, var(--oui-gray-8)), transparent var(--oui-foreground-percentage));
71
+ line-height: 1.25;
72
+ transition: 0.125s ease-in-out;
73
+ --oui-outline-value: var(--oui-grey-6);
74
+ margin: 0 0.75em 0 0;
75
+ font-size: 0.75em;
76
+ cursor: pointer;
37
77
  }
38
- :where(.oui-input.oui-validateable:not([disabled], [aria-disabled=true]):is(:user-valid,
39
- [aria-invalid=false])) {
40
- outline-color: color-mix(in oklab, var(--oui-green-6), transparent 60%);
41
- border-color: var(--oui-green-6);
78
+ :where(.oui-input:is([type=range i])) {
79
+ -webkit-appearance: none;
80
+ -moz-appearance: none;
81
+ appearance: none;
82
+ outline: none;
83
+ }
84
+ :where(.oui-input:is([type=range i]))::-moz-range-track {
85
+ --oui-background-percentage: 0%;
86
+ --oui-foreground-percentage: 0%;
87
+ --oui-outline-percentage: 100%;
88
+ --oui-outline-value: var(--oui-blue-6);
89
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
90
+ outline-offset: 0;
91
+ transition: 0.125s ease-in-out;
92
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
93
+ border: 1px solid var(--oui-border-value, var(--oui-gray-3));
94
+ box-shadow: inset 0 1px 2px 0 color-mix(in oklab, var(--oui-gray-10), transparent 75%);
95
+ color: color-mix(in oklab, var(--oui-foreground-value, inherit), transparent var(--oui-foreground-percentage));
96
+ -moz-appearance: none;
97
+ appearance: none;
98
+ width: 100%;
99
+ height: 0.75em;
100
+ border-radius: 0.75em;
101
+ position: relative;
42
102
  }
43
- :where(.oui-input:not([disabled], [aria-disabled=true]):focus) {
44
- outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 60%);
45
- border-color: var(--oui-blue-6);
103
+ :where(.oui-input:is([type=range i]))::-ms-track {
104
+ --oui-background-percentage: 0%;
105
+ --oui-foreground-percentage: 0%;
106
+ --oui-outline-percentage: 100%;
107
+ --oui-outline-value: var(--oui-blue-6);
108
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
109
+ outline-offset: 0;
110
+ transition: 0.125s ease-in-out;
111
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
112
+ border: 1px solid var(--oui-border-value, var(--oui-gray-3));
113
+ box-shadow: inset 0 1px 2px 0 color-mix(in oklab, var(--oui-gray-10), transparent 75%);
114
+ color: color-mix(in oklab, var(--oui-foreground-value, inherit), transparent var(--oui-foreground-percentage));
115
+ appearance: none;
116
+ width: 100%;
117
+ height: 0.75em;
118
+ border-radius: 0.75em;
119
+ position: relative;
120
+ }
121
+ :where(.oui-input:is([type=range i]))::-webkit-slider-runnable-track {
122
+ --oui-background-percentage: 0%;
123
+ --oui-foreground-percentage: 0%;
124
+ --oui-outline-percentage: 100%;
125
+ --oui-outline-value: var(--oui-blue-6);
126
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
127
+ outline-offset: 0;
128
+ transition: 0.125s ease-in-out;
129
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
130
+ border: 1px solid var(--oui-border-value, var(--oui-gray-3));
131
+ box-shadow: inset 0 1px 2px 0 color-mix(in oklab, var(--oui-gray-10), transparent 75%);
132
+ color: color-mix(in oklab, var(--oui-foreground-value, inherit), transparent var(--oui-foreground-percentage));
133
+ -webkit-appearance: none;
134
+ appearance: none;
135
+ width: 100%;
136
+ height: 0.75em;
137
+ border-radius: 0.75em;
138
+ position: relative;
139
+ }
140
+ :where(.oui-input:is([type=range i]))::-moz-range-thumb {
141
+ --oui-background-percentage: 0%;
142
+ --oui-background-value: var(--oui-blue-6);
143
+ --oui-outline-percentage: 100%;
144
+ --oui-outline-value: var(--oui-blue-6);
145
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
146
+ outline-offset: 0;
147
+ transition: 0.125s ease-in-out;
148
+ -moz-appearance: none;
149
+ appearance: none;
150
+ width: 1.25em;
151
+ height: 1.25em;
152
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
153
+ border: 2px solid var(--oui-absolute);
154
+ border-radius: 1.25em;
155
+ box-shadow: 0 1px 2px 2px rgba(0, 0, 0, 0.125);
156
+ cursor: pointer;
157
+ }
158
+ :where(.oui-input:is([type=range i]))::-ms-thumb {
159
+ --oui-background-percentage: 0%;
160
+ --oui-background-value: var(--oui-blue-6);
161
+ --oui-outline-percentage: 100%;
162
+ --oui-outline-value: var(--oui-blue-6);
163
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
164
+ outline-offset: 0;
165
+ transition: 0.125s ease-in-out;
166
+ appearance: none;
167
+ width: 1.25em;
168
+ height: 1.25em;
169
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
170
+ border: 2px solid var(--oui-absolute);
171
+ border-radius: 1.25em;
172
+ box-shadow: 0 1px 2px 2px rgba(0, 0, 0, 0.125);
173
+ cursor: pointer;
174
+ }
175
+ :where(.oui-input:is([type=range i]))::-webkit-slider-thumb {
176
+ --oui-background-percentage: 0%;
177
+ --oui-background-value: var(--oui-blue-6);
178
+ --oui-outline-percentage: 100%;
179
+ --oui-outline-value: var(--oui-blue-6);
180
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
181
+ outline-offset: 0;
182
+ transition: 0.125s ease-in-out;
183
+ -webkit-appearance: none;
184
+ appearance: none;
185
+ width: 1.25em;
186
+ height: 1.25em;
187
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
188
+ border: 2px solid var(--oui-absolute);
189
+ border-radius: 1.25em;
190
+ box-shadow: 0 1px 2px 2px rgba(0, 0, 0, 0.125);
191
+ cursor: pointer;
192
+ }
193
+ :where(.oui-input:is([type=range i]))::-webkit-slider-thumb {
194
+ position: relative;
195
+ top: 50%;
196
+ transform: translateY(-50%);
197
+ }
198
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i])) {
199
+ --oui-border-value: var(--oui-red-6);
200
+ --oui-foreground-value: var(--oui-red-9);
201
+ --oui-outline-percentage: 75%;
202
+ --oui-outline-value: var(--oui-red-6);
203
+ }
204
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i]))::file-selector-button {
205
+ --oui-background-value: var(--oui-red-1);
206
+ --oui-foreground-value: var(--oui-red-8);
207
+ --oui-outline-value: var(--oui-red-6);
208
+ }
209
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i]))::-moz-range-thumb {
210
+ --oui-background-value: var(--oui-red-6);
211
+ }
212
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i]))::-ms-thumb {
213
+ --oui-background-value: var(--oui-red-6);
214
+ }
215
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i]))::-webkit-slider-thumb {
216
+ --oui-background-value: var(--oui-red-6);
217
+ }
218
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i]))::-moz-range-track {
219
+ --oui-border-value: var(--oui-red-6);
220
+ --oui-foreground-value: var(--oui-red-9);
221
+ --oui-outline-percentage: 75%;
222
+ --oui-outline-value: var(--oui-red-6);
223
+ }
224
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i]))::-ms-track {
225
+ --oui-border-value: var(--oui-red-6);
226
+ --oui-foreground-value: var(--oui-red-9);
227
+ --oui-outline-percentage: 75%;
228
+ --oui-outline-value: var(--oui-red-6);
229
+ }
230
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid, [aria-invalid=true i]))::-webkit-slider-runnable-track {
231
+ --oui-border-value: var(--oui-red-6);
232
+ --oui-foreground-value: var(--oui-red-9);
233
+ --oui-outline-percentage: 75%;
234
+ --oui-outline-value: var(--oui-red-6);
235
+ }
236
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i])) {
237
+ --oui-border-value: var(--oui-green-6);
238
+ --oui-foreground-value: var(--oui-green-9);
239
+ --oui-outline-percentage: 75%;
240
+ --oui-outline-value: var(--oui-green-6);
241
+ }
242
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i]))::file-selector-button {
243
+ --oui-background-value: var(--oui-green-1);
244
+ --oui-foreground-value: var(--oui-green-8);
245
+ --oui-outline-value: var(--oui-green-6);
246
+ }
247
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i]))::-moz-range-track {
248
+ --oui-border-value: var(--oui-green-6);
249
+ --oui-foreground-value: var(--oui-green-9);
250
+ --oui-outline-percentage: 75%;
251
+ --oui-outline-value: var(--oui-green-6);
252
+ }
253
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i]))::-ms-track {
254
+ --oui-border-value: var(--oui-green-6);
255
+ --oui-foreground-value: var(--oui-green-9);
256
+ --oui-outline-percentage: 75%;
257
+ --oui-outline-value: var(--oui-green-6);
258
+ }
259
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i]))::-webkit-slider-runnable-track {
260
+ --oui-border-value: var(--oui-green-6);
261
+ --oui-foreground-value: var(--oui-green-9);
262
+ --oui-outline-percentage: 75%;
263
+ --oui-outline-value: var(--oui-green-6);
264
+ }
265
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i]))::-moz-range-thumb {
266
+ --oui-background-value: var(--oui-green-6);
267
+ }
268
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i]))::-ms-thumb {
269
+ --oui-background-value: var(--oui-green-6);
270
+ }
271
+ :where(.oui-input.oui-validatable:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid, [aria-invalid=false i]))::-webkit-slider-thumb {
272
+ --oui-background-value: var(--oui-green-6);
273
+ }
274
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]))::-webkit-calendar-picker-indicator {
275
+ outline: 4px solid transparent;
276
+ outline-offset: 2px;
277
+ border-radius: 2em;
278
+ -webkit-transition: 0.125s ease-in-out;
279
+ transition: 0.125s ease-in-out;
280
+ cursor: pointer;
46
281
  }
47
282
  @media (hover: hover) {
48
- :where(.oui-input:not([disabled], [aria-disabled=true]):hover) {
49
- outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 80%);
50
- border-color: var(--oui-blue-6);
283
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]))::-webkit-calendar-picker-indicator:hover {
284
+ outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 75%);
51
285
  }
52
286
  }
53
- :where(.oui-input[readonly]) {
54
- color: color-mix(in oklab, currentColor, transparent 12.5%);
287
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]))::-webkit-calendar-picker-indicator:focus {
288
+ outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 75%);
289
+ }
290
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus), :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within) {
291
+ --oui-border-value: var(--oui-blue-6);
292
+ --oui-foreground-value: inherit;
293
+ --oui-outline-percentage: 75%;
294
+ --oui-outline-value: var(--oui-blue-6);
295
+ }
296
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::file-selector-button, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::file-selector-button {
297
+ --oui-background-value: var(--oui-blue-1);
298
+ --oui-foreground-value: var(--oui-blue-8);
299
+ --oui-outline-value: var(--oui-blue-6);
300
+ }
301
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-moz-range-thumb, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-moz-range-thumb {
302
+ --oui-border-value: var(--oui-blue-6);
303
+ --oui-foreground-value: inherit;
304
+ --oui-outline-percentage: 75%;
305
+ --oui-outline-value: var(--oui-blue-6);
306
+ }
307
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-ms-thumb, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-ms-thumb {
308
+ --oui-border-value: var(--oui-blue-6);
309
+ --oui-foreground-value: inherit;
310
+ --oui-outline-percentage: 75%;
311
+ --oui-outline-value: var(--oui-blue-6);
312
+ }
313
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-webkit-slider-thumb, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-webkit-slider-thumb {
314
+ --oui-border-value: var(--oui-blue-6);
315
+ --oui-foreground-value: inherit;
316
+ --oui-outline-percentage: 75%;
317
+ --oui-outline-value: var(--oui-blue-6);
318
+ }
319
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-moz-range-track, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-moz-range-track {
320
+ --oui-border-value: var(--oui-blue-6);
321
+ --oui-foreground-value: inherit;
322
+ --oui-outline-percentage: 75%;
323
+ --oui-outline-value: var(--oui-blue-6);
324
+ }
325
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-ms-track, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-ms-track {
326
+ --oui-border-value: var(--oui-blue-6);
327
+ --oui-foreground-value: inherit;
328
+ --oui-outline-percentage: 75%;
329
+ --oui-outline-value: var(--oui-blue-6);
330
+ }
331
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-webkit-slider-runnable-track, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-webkit-slider-runnable-track {
332
+ --oui-border-value: var(--oui-blue-6);
333
+ --oui-foreground-value: inherit;
334
+ --oui-outline-percentage: 75%;
335
+ --oui-outline-value: var(--oui-blue-6);
336
+ }
337
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-moz-range-thumb, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-moz-range-thumb {
338
+ --oui-background-value: var(--oui-blue-6);
339
+ box-shadow: 0 1px 2px 2px rgba(0, 0, 0, 0.25);
340
+ }
341
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-ms-thumb, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-ms-thumb {
342
+ --oui-background-value: var(--oui-blue-6);
343
+ box-shadow: 0 1px 2px 2px rgba(0, 0, 0, 0.25);
344
+ }
345
+ :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus)::-webkit-slider-thumb, :where(.oui-input:not([disabled], [readonly], [aria-disabled=true i]):focus-within)::-webkit-slider-thumb {
346
+ --oui-background-value: var(--oui-blue-6);
347
+ box-shadow: 0 1px 2px 2px rgba(0, 0, 0, 0.25);
55
348
  }
56
- :where(.oui-input[disabled], .oui-input[aria-disabled=true]) {
57
- background-color: color-mix(in oklab, var(--oui-gray-0), transparent 50%);
58
- color: color-mix(in oklab, currentColor, transparent 25%);
349
+ @media (hover: hover) {
350
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover) {
351
+ --oui-border-value: var(--oui-blue-4);
352
+ --oui-foreground-percentage: 50%;
353
+ --oui-foreground-value: inherit;
354
+ --oui-outline-percentage: 90%;
355
+ --oui-outline-value: var(--oui-blue-6);
356
+ }
357
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover)::file-selector-button {
358
+ --oui-background-value: var(--oui-blue-1);
359
+ --oui-foreground-value: var(--oui-blue-8);
360
+ --oui-outline-value: var(--oui-blue-6);
361
+ }
362
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover)::-moz-range-thumb {
363
+ --oui-background-value: var(--oui-blue-5);
364
+ }
365
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover)::-ms-thumb {
366
+ --oui-background-value: var(--oui-blue-5);
367
+ }
368
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover)::-webkit-slider-thumb {
369
+ --oui-background-value: var(--oui-blue-5);
370
+ }
371
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover)::-moz-range-track {
372
+ --oui-border-value: var(--oui-blue-4);
373
+ --oui-foreground-percentage: 50%;
374
+ --oui-foreground-value: inherit;
375
+ --oui-outline-percentage: 90%;
376
+ --oui-outline-value: var(--oui-blue-6);
377
+ }
378
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover)::-ms-track {
379
+ --oui-border-value: var(--oui-blue-4);
380
+ --oui-foreground-percentage: 50%;
381
+ --oui-foreground-value: inherit;
382
+ --oui-outline-percentage: 90%;
383
+ --oui-outline-value: var(--oui-blue-6);
384
+ }
385
+ :where(.oui-input:not([disabled], [aria-disabled=true i]):hover)::-webkit-slider-runnable-track {
386
+ --oui-border-value: var(--oui-blue-4);
387
+ --oui-foreground-percentage: 50%;
388
+ --oui-foreground-value: inherit;
389
+ --oui-outline-percentage: 90%;
390
+ --oui-outline-value: var(--oui-blue-6);
391
+ }
392
+ }
393
+ :where(.oui-input[disabled], .oui-input[readonly], .oui-input[aria-disabled=true i]) {
394
+ --oui-foreground-percentage: 25%;
395
+ font-style: italic;
396
+ }
397
+ :where(.oui-input:is([disabled], [readonly], [aria-disabled=true i]):focus) {
398
+ --oui-outline-percentage: 75%;
399
+ }
400
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i]) {
401
+ --oui-background-percentage: 50%;
402
+ }
403
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i])::-moz-range-thumb {
404
+ --oui-background-value: var(--oui-gray-1);
405
+ cursor: default;
406
+ }
407
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i])::-ms-thumb {
408
+ --oui-background-value: var(--oui-gray-1);
409
+ cursor: default;
410
+ }
411
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i])::-webkit-slider-thumb {
412
+ --oui-background-value: var(--oui-gray-1);
413
+ cursor: default;
414
+ }
415
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i])::-moz-range-track {
416
+ --oui-background-percentage: 50%;
417
+ --oui-background-value: var(--oui-gray-0);
418
+ }
419
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i])::-ms-track {
420
+ --oui-background-percentage: 50%;
421
+ --oui-background-value: var(--oui-gray-0);
422
+ }
423
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i])::-webkit-slider-runnable-track {
424
+ --oui-background-percentage: 50%;
425
+ --oui-background-value: var(--oui-gray-0);
426
+ }
427
+ :where(.oui-input[disabled], .oui-input[aria-disabled=true i])::-webkit-calendar-picker-indicator {
428
+ color: red;
429
+ stroke: red;
59
430
  }
60
431
 
61
- :where(select.oui-input) {
432
+ :where(select.oui-input, .oui-input[list]) {
62
433
  padding-right: 2em;
63
434
  background-position: right 0.5em center;
64
435
  }
65
436
 
437
+ :where(select.oui-input:is([multiple])) {
438
+ --oui-off: attr(oui-off);
439
+ --oui-on: attr(oui-on, "✓");
440
+ padding: 0;
441
+ }
442
+ :where(select.oui-input:is([multiple]) > option) {
443
+ padding: 0.5em 0.75em;
444
+ }
445
+ :where(select.oui-input:is([multiple])[oui-off] > option)::before {
446
+ content: var(--oui-off);
447
+ margin: 0 0.75em 0 0;
448
+ }
449
+ :where(select.oui-input:is([multiple]) > option:nth-of-type(2n)) {
450
+ background-color: color-mix(in oklab, var(--oui-blue-0), transparent 33%);
451
+ }
452
+ :where(select.oui-input:is([multiple]) > option:checked) {
453
+ background-color: var(--oui-blue-2);
454
+ color: var(--oui-blue-9);
455
+ }
456
+ :where(select.oui-input:is([multiple]) > option:checked)::before {
457
+ content: var(--oui-on);
458
+ margin: 0 0.75em 0 0;
459
+ }
460
+
66
461
  :where(textarea.oui-input) {
67
462
  min-height: 4em;
68
463
  resize: vertical;
@@ -76,6 +471,12 @@
76
471
 
77
472
  :where(.oui-label) {
78
473
  cursor: pointer;
474
+ transition: 0.125s ease-in-out;
475
+ }
476
+ @media (hover: hover) {
477
+ :where(:where(.oui-label)[for]:hover) {
478
+ color: var(--oui-blue-8);
479
+ }
79
480
  }
80
481
 
81
482
  :where(.oui-legend) {
@@ -85,18 +486,34 @@
85
486
  }
86
487
 
87
488
  :where(.oui-switch, .oui-toggle) {
489
+ --oui-background-percentage: 50%;
490
+ --oui-background-value: var(--oui-gray-1);
491
+ --oui-border-value: var(--oui-gray-3);
492
+ --oui-foreground-percentage: 0%;
493
+ --oui-foreground-value: var(--oui-gray-8);
494
+ --oui-outline-percentage: 100%;
495
+ --oui-outline-value: var(--oui-blue-6);
496
+ --oui-shadow-percentage: 85%;
497
+ --oui-shadow-value: var(--oui-gray-10);
88
498
  position: relative;
89
499
  cursor: pointer;
90
500
  }
91
501
  :where(.oui-switch, .oui-toggle)::before, :where(.oui-switch, .oui-toggle)::after {
502
+ display: inline-block;
92
503
  font-family: system-ui, sans-serif;
93
504
  position: absolute;
94
505
  transition: 0.125s ease-in-out;
95
506
  pointer-events: none;
96
507
  }
97
508
  :where(.oui-switch, .oui-toggle)::before {
98
- outline: 3px solid transparent;
509
+ background-color: color-mix(in oklab, var(--oui-background-value), transparent var(--oui-background-percentage));
510
+ box-shadow: inset 0 1px 2px 0 color-mix(in oklab, var(--oui-shadow-value), transparent var(--oui-shadow-percentage));
511
+ outline: 4px solid color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
99
512
  outline-offset: 0;
513
+ border: 1px solid var(--oui-border-value);
514
+ }
515
+ :where(.oui-switch, .oui-toggle)::after {
516
+ color: color-mix(in oklab, var(--oui-foreground-value), transparent var(--oui-foreground-percentage));
100
517
  }
101
518
 
102
519
  :where(.oui-switch) {
@@ -106,20 +523,16 @@
106
523
  content: "";
107
524
  width: 2.5em;
108
525
  height: 1.5em;
109
- display: inline-block;
110
- background-color: var(--oui-gray-0);
111
- border: 1px solid var(--oui-gray-3);
112
526
  border-radius: 3em;
113
527
  right: 0;
114
528
  }
115
529
  :where(.oui-switch)::after {
116
- content: "✕";
530
+ content: attr(oui-off, "✕");
117
531
  width: 1.5em;
118
532
  height: 1.5em;
119
533
  background-color: var(--oui-absolute);
120
534
  border-radius: 1.5em;
121
535
  box-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.125);
122
- color: var(--oui-gray-8);
123
536
  font-size: 0.75em;
124
537
  font-weight: bold;
125
538
  line-height: 1.5em;
@@ -127,46 +540,54 @@
127
540
  top: 0.25em;
128
541
  right: 1.5em;
129
542
  }
543
+ :where(.oui-switch:has(input:checked)) {
544
+ --oui-foreground-percentage: 0%;
545
+ --oui-foreground-value: var(--oui-blue-8);
546
+ }
130
547
  :where(.oui-switch:has(input:checked))::after {
131
- content: "✓";
548
+ content: attr(oui-on, "✓");
132
549
  box-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.25);
133
- color: var(--oui-blue-8);
134
550
  right: 0.25em;
135
551
  }
136
552
 
137
553
  :where(.oui-toggle) {
554
+ --oui-background-percentage: 100%;
555
+ --oui-border-value: var(--oui-gray-4);
138
556
  padding: 0 0 0 2em;
139
557
  }
140
558
  :where(.oui-toggle)::before {
141
559
  content: "";
142
560
  width: 1.5em;
143
561
  height: 1.5em;
144
- display: inline-block;
145
- background-color: transparent;
146
- border: 1px solid var(--oui-gray-4);
147
562
  inset: 0 auto auto 0;
148
563
  }
149
564
  :where(.oui-toggle)::after {
150
565
  opacity: 0;
151
566
  }
152
- :where(.oui-toggle:has(input[type=checkbox]))::before {
567
+ :where(.oui-toggle:has(input[type=checkbox i])) {
568
+ --oui-foreground-percentage: 0%;
569
+ --oui-foreground-value: white;
570
+ }
571
+ :where(.oui-toggle:has(input[type=checkbox i]))::before {
153
572
  border-radius: 0.25em;
154
573
  }
155
- :where(.oui-toggle:has(input[type=checkbox]))::after {
156
- content: "✓";
574
+ :where(.oui-toggle:has(input[type=checkbox i]))::after {
575
+ content: attr(oui-on, "✓");
157
576
  width: 1.5em;
158
577
  height: 1.5em;
159
- color: white;
160
578
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
161
579
  font-weight: bold;
162
580
  line-height: 1.5em;
163
581
  text-align: center;
164
582
  inset: 0 auto auto 0;
165
583
  }
166
- :where(.oui-toggle:has(input[type=radio]))::before, :where(.oui-toggle:has(input[type=radio]))::after {
584
+ :where(.oui-toggle:has(input[type=radio i])) {
585
+ position: relative;
586
+ }
587
+ :where(.oui-toggle:has(input[type=radio i]))::before, :where(.oui-toggle:has(input[type=radio i]))::after {
167
588
  border-radius: 50%;
168
589
  }
169
- :where(.oui-toggle:has(input[type=radio]))::after {
590
+ :where(.oui-toggle:has(input[type=radio i]))::after {
170
591
  content: "";
171
592
  width: 0.75em;
172
593
  height: 0.75em;
@@ -179,53 +600,55 @@
179
600
  }
180
601
 
181
602
  :where(.oui-switch:has(input:checked),
182
- .oui-toggle:has(input:checked))::before {
183
- background-color: var(--oui-blue-6);
184
- border-color: transparent;
185
- }
186
- :where(.oui-switch:has(input:not([disabled], [aria-disabled=true])):focus-within,
187
- .oui-toggle:has(input:not([disabled], [aria-disabled=true])):focus-within) {
603
+ .oui-toggle:has(input:checked)) {
604
+ --oui-background-percentage: 25%;
605
+ --oui-background-value: var(--oui-blue-6);
606
+ --oui-border-value: var(--oui-blue-6);
607
+ --oui-shadow-percentage: 50%;
608
+ --oui-shadow-value: var(--oui-blue-8);
609
+ }
610
+ :where(.oui-switch:focus-within,
611
+ .oui-toggle:focus-within) {
612
+ --oui-border-value: var(--oui-blue-6);
613
+ --oui-outline-percentage: 75%;
188
614
  color: var(--oui-blue-8);
189
615
  }
190
- :where(.oui-switch:has(input:not([disabled], [aria-disabled=true])):focus-within,
191
- .oui-toggle:has(input:not([disabled], [aria-disabled=true])):focus-within)::before {
192
- outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 60%);
193
- border-color: var(--oui-absolute);
616
+ :where(.oui-switch:has(input:not([disabled], [aria-disabled=true i])):focus-within,
617
+ .oui-toggle:has(input:not([disabled], [aria-disabled=true i])):focus-within) {
618
+ --oui-background-percentage: 50%;
194
619
  }
195
620
  @media (hover: hover) {
196
- :where(.oui-switch:has(input:not([disabled], [aria-disabled=true])):hover,
197
- .oui-toggle:has(input:not([disabled], [aria-disabled=true])):hover) {
621
+ :where(.oui-switch:has(input:not([disabled], [aria-disabled=true i])):hover,
622
+ .oui-toggle:has(input:not([disabled], [aria-disabled=true i])):hover) {
623
+ --oui-border-value: var(--oui-blue-4);
624
+ --oui-outline-percentage: 90%;
625
+ --oui-outline-value: var(--oui-blue-6);
198
626
  color: var(--oui-blue-8);
199
627
  }
200
- :where(.oui-switch:has(input:not([disabled], [aria-disabled=true])):hover,
201
- .oui-toggle:has(input:not([disabled], [aria-disabled=true])):hover)::before {
202
- outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 80%);
203
- border-color: var(--oui-blue-6);
204
- }
205
- :where(.oui-switch:has(input:not([disabled], [aria-disabled=true]):is(:checked)):hover,
206
- .oui-toggle:has(input:not([disabled], [aria-disabled=true]):is(:checked)):hover)::before {
207
- background-color: color-mix(in oklab, var(--oui-blue-6), transparent 40%);
628
+ :where(.oui-switch:has(input:not([disabled], [aria-disabled=true i]):is(:checked)):hover,
629
+ .oui-toggle:has(input:not([disabled], [aria-disabled=true i]):is(:checked)):hover) {
630
+ --oui-background-percentage: 50%;
631
+ --oui-background-value: var(--oui-blue-6);
208
632
  }
209
633
  }
210
- :where(.oui-switch:has(input[disabled], input[aria-disabled=true]),
211
- .oui-toggle:has(input[disabled], input[aria-disabled=true])) {
634
+ :where(.oui-switch:has(input[disabled], input[aria-disabled=true i]),
635
+ .oui-toggle:has(input[disabled], input[aria-disabled=true i])) {
636
+ --oui-background-percentage: 50%;
637
+ --oui-background-value: var(--oui-gray-0);
638
+ --oui-border-value: var(--oui-gray-3);
639
+ --oui-foreground-percentage: 25%;
640
+ --oui-foreground-value: currentColor;
641
+ color: color-mix(in oklab, var(--oui-foreground-value), transparent var(--oui-foreground-percentage));
642
+ font-style: italic;
212
643
  cursor: default;
213
644
  }
214
- :where(.oui-switch:has(input[disabled], input[aria-disabled=true]),
215
- .oui-toggle:has(input[disabled], input[aria-disabled=true])) {
216
- color: color-mix(in oklab, currentColor, transparent 25%);
217
- }
218
- :where(.oui-switch:has(input[disabled], input[aria-disabled=true]),
219
- .oui-toggle:has(input[disabled], input[aria-disabled=true]))::after {
220
- color: color-mix(in oklab, currentColor, transparent);
221
- }
222
- :where(.oui-switch:has(input[disabled], input[aria-disabled=true]),
223
- .oui-toggle:has(input[disabled], input[aria-disabled=true]))::before {
224
- background-color: color-mix(in oklab, var(--oui-gray-0), transparent 50%);
225
- border-color: var(--oui-gray-3);
645
+ :where(.oui-switch:has(input[disabled], input[aria-disabled=true i]),
646
+ .oui-toggle:has(input[disabled], input[aria-disabled=true i]))::after, :where(.oui-switch:has(input[disabled], input[aria-disabled=true i]),
647
+ .oui-toggle:has(input[disabled], input[aria-disabled=true i]))::before {
648
+ font-style: normal;
226
649
  }
227
- :where(.oui-switch:has(input[disabled], input[aria-disabled=true]),
228
- .oui-toggle:has(input[disabled], input[aria-disabled=true]))::after {
650
+ :where(.oui-switch:has(input[disabled], input[aria-disabled=true i]),
651
+ .oui-toggle:has(input[disabled], input[aria-disabled=true i]))::after {
229
652
  box-shadow: 0 0 0 1px var(--oui-gray-3);
230
653
  text-shadow: none;
231
654
  }
@@ -245,3 +668,5 @@
245
668
  border: 0 !important;
246
669
  white-space: nowrap !important;
247
670
  }
671
+
672
+