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