@oscarpalmer/oui 0.37.0 → 0.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/css/a11y.css +1 -0
  2. package/dist/css/badge.css +12 -8
  3. package/dist/css/button.css +111 -14
  4. package/dist/css/color-picker.css +859 -0
  5. package/dist/css/color.css +86 -87
  6. package/dist/css/combobox.css +105 -4
  7. package/dist/css/content.css +8 -6
  8. package/dist/css/floatable.css +3 -3
  9. package/dist/css/form.css +106 -6
  10. package/dist/css/icon.css +99 -0
  11. package/dist/css/listbox.css +5 -0
  12. package/dist/css/message.css +6 -3
  13. package/dist/css/mixins/badge.mixins.css +2 -0
  14. package/dist/css/mixins/button.mixins.css +3 -0
  15. package/dist/css/mixins/message.mixins.css +1 -0
  16. package/dist/css/mixins/misc.mixins.css +2 -0
  17. package/dist/css/mixins/shadow.mixins.css +1 -0
  18. package/dist/css/reset.css +3 -3
  19. package/dist/css/splitter.css +1 -1
  20. package/dist/css/tabs.css +115 -23
  21. package/dist/css/typography.css +90 -0
  22. package/dist/js/color-picker/constants.color-picker.d.mts +2 -0
  23. package/dist/js/color-picker/constants.color-picker.mjs +59 -0
  24. package/dist/js/color-picker/dom.color-picker.d.mts +8 -0
  25. package/dist/js/color-picker/dom.color-picker.mjs +191 -0
  26. package/dist/js/color-picker/event.color-picker.d.mts +9 -0
  27. package/dist/js/color-picker/event.color-picker.mjs +2 -0
  28. package/dist/js/color-picker/form.color-picker.d.mts +5 -0
  29. package/dist/js/color-picker/form.color-picker.mjs +24 -0
  30. package/dist/js/color-picker/index.d.mts +2 -0
  31. package/dist/js/color-picker/index.mjs +303 -0
  32. package/dist/js/color-picker/misc.color-picker.d.mts +2 -0
  33. package/dist/js/color-picker/misc.color-picker.mjs +2 -0
  34. package/dist/js/color-picker/models.color-picker.d.mts +2 -0
  35. package/dist/js/color-picker/models.color-picker.mjs +24 -0
  36. package/dist/js/color-picker/output.color-picker.d.mts +8 -0
  37. package/dist/js/color-picker/output.color-picker.mjs +233 -0
  38. package/dist/js/color-picker/state.color-picker.d.mts +8 -0
  39. package/dist/js/color-picker/state.color-picker.mjs +2 -0
  40. package/dist/js/combobox/constants.combobox.d.mts +1 -1
  41. package/dist/js/combobox/dom.combobox.d.mts +12 -13
  42. package/dist/js/combobox/dom.combobox.mjs +12 -5
  43. package/dist/js/combobox/event.combobox.d.mts +20 -21
  44. package/dist/js/combobox/event.combobox.mjs +1 -1
  45. package/dist/js/combobox/index.d.mts +1 -1
  46. package/dist/js/combobox/index.mjs +56 -2
  47. package/dist/js/combobox/misc.combobox.d.mts +1 -1
  48. package/dist/js/combobox/misc.combobox.mjs +1 -1
  49. package/dist/js/combobox/models.combobox.d.mts +12 -13
  50. package/dist/js/combobox/state.combobox.d.mts +8 -9
  51. package/dist/js/combobox/state.combobox.mjs +1 -1
  52. package/dist/js/constants.color-picker-B-gFjL8m.d.mts +364 -0
  53. package/dist/js/constants.combobox-8EMRmv09.d.mts +18 -0
  54. package/dist/js/constants.listbox-DGnX32kv.d.mts +8 -0
  55. package/dist/js/dialog.d.mts +2 -2
  56. package/dist/js/dialog.mjs +1 -1
  57. package/dist/js/{draggable-a6w0J1OD.d.mts → draggable-B5-70SZm.d.mts} +5 -4
  58. package/dist/js/event.color-picker-BEpq0Adu.mjs +485 -0
  59. package/dist/js/floatable/floatable.embedded.d.mts +1 -1
  60. package/dist/js/floatable/floatable.embedded.mjs +11 -8
  61. package/dist/js/floatable/floatable.standalone.d.mts +1 -1
  62. package/dist/js/{floatable.embedded-Bct4U5Dm.d.mts → floatable.embedded-DQYkXt8X.d.mts} +1 -1
  63. package/dist/js/focus-trap/focus-trap.embedded.d.mts +1 -1
  64. package/dist/js/focus-trap/focus-trap.standalone.d.mts +1 -1
  65. package/dist/js/{focus-trap.embedded-DR8NpZfr.d.mts → focus-trap.embedded-CjyFQYow.d.mts} +2 -2
  66. package/dist/js/{index-EfkUSals.d.mts → index-C5D3-oiI.d.mts} +41 -3
  67. package/dist/js/index.d.mts +8 -7
  68. package/dist/js/index.mjs +6 -3
  69. package/dist/js/internal/attributable.d.mts +2 -3
  70. package/dist/js/internal/draggable.d.mts +1 -1
  71. package/dist/js/internal/draggable.mjs +1 -1
  72. package/dist/js/internal/listbox/listbox.constants.d.mts +7 -10
  73. package/dist/js/internal/listbox/listbox.constants.mjs +15 -16
  74. package/dist/js/internal/listbox/listbox.data.d.mts +9 -10
  75. package/dist/js/internal/listbox/listbox.data.mjs +1 -1
  76. package/dist/js/internal/listbox/listbox.dom.d.mts +19 -20
  77. package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
  78. package/dist/js/internal/listbox/listbox.event.d.mts +3 -4
  79. package/dist/js/internal/listbox/listbox.event.mjs +4 -4
  80. package/dist/js/internal/listbox/listbox.form.d.mts +4 -5
  81. package/dist/js/internal/listbox/listbox.form.mjs +16 -15
  82. package/dist/js/internal/listbox/listbox.misc.d.mts +10 -11
  83. package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
  84. package/dist/js/internal/listbox/listbox.model.d.mts +1 -1
  85. package/dist/js/internal/listbox/listbox.state.d.mts +5 -6
  86. package/dist/js/internal/listbox/listbox.state.mjs +3 -3
  87. package/dist/js/internal/misc.d.mts +4 -4
  88. package/dist/js/internal/misc.mjs +9 -1
  89. package/dist/js/internal/navigable.d.mts +9 -10
  90. package/dist/js/internal/navigable.mjs +1 -0
  91. package/dist/js/listbox/constants.listbox.d.mts +1 -1
  92. package/dist/js/listbox/event.listbox.d.mts +6 -7
  93. package/dist/js/listbox/event.listbox.mjs +1 -1
  94. package/dist/js/listbox/index.d.mts +43 -5
  95. package/dist/js/listbox/index.mjs +56 -2
  96. package/dist/js/listbox/misc.listbox.d.mts +1 -1
  97. package/dist/js/listbox/misc.listbox.mjs +1 -1
  98. package/dist/js/listbox/state.listbox.d.mts +7 -8
  99. package/dist/js/listbox/state.listbox.mjs +1 -1
  100. package/dist/js/{listbox.data-BWd0PCy7.mjs → listbox.data-DQ7-x2uY.mjs} +8 -7
  101. package/dist/js/{listbox.model-CRReGOmu.d.mts → listbox.model-BHPA7GM4.d.mts} +3 -3
  102. package/dist/js/menu.mjs +1 -1
  103. package/dist/js/{misc.listbox-BI-XsTOf.mjs → misc.listbox-DKB-j0UK.mjs} +4 -5
  104. package/dist/js/{misc.listbox-gnoJhrTr.d.mts → misc.listbox-mZMuYOxg.d.mts} +1 -1
  105. package/dist/js/movable/movable.embedded.d.mts +1 -1
  106. package/dist/js/movable/movable.standalone.d.mts +1 -1
  107. package/dist/js/popover.d.mts +2 -2
  108. package/dist/js/popover.mjs +1 -1
  109. package/dist/js/resizable/resizable.embedded.d.mts +1 -1
  110. package/dist/js/resizable/resizable.embedded.mjs +1 -1
  111. package/dist/js/resizable/resizable.standalone.d.mts +1 -1
  112. package/dist/js/{resizable.embedded-3qoR0Bjm.d.mts → resizable.embedded-dvhdfQgt.d.mts} +1 -1
  113. package/dist/js/sortable/sortable.embedded.d.mts +1 -1
  114. package/dist/js/sortable/sortable.standalone.d.mts +1 -1
  115. package/dist/js/splitter.d.mts +2 -3
  116. package/dist/js/splitter.mjs +2 -2
  117. package/dist/js/{state.combobox-4xq0FPCF.mjs → state.combobox-BWDFHwoi.mjs} +9 -9
  118. package/dist/js/tabs.d.mts +4 -5
  119. package/dist/js/tabs.mjs +4 -7
  120. package/dist/js/tooltip.d.mts +1 -1
  121. package/package.json +24 -22
  122. package/dist/js/constants.combobox-DmRAMC64.d.mts +0 -26
  123. package/dist/js/constants.listbox-DRsXUxd3.d.mts +0 -14
  124. package/src/css/a11y.scss +0 -13
  125. package/src/css/badge.scss +0 -62
  126. package/src/css/button.scss +0 -50
  127. package/src/css/color.scss +0 -115
  128. package/src/css/combobox.scss +0 -252
  129. package/src/css/content.scss +0 -180
  130. package/src/css/flex.scss +0 -107
  131. package/src/css/floatable.scss +0 -152
  132. package/src/css/form.scss +0 -573
  133. package/src/css/listbox.scss +0 -120
  134. package/src/css/message.scss +0 -73
  135. package/src/css/mixins.scss +0 -419
  136. package/src/css/reset.scss +0 -392
  137. package/src/css/splitter.scss +0 -89
  138. package/src/css/table.scss +0 -107
  139. package/src/css/tabs.scss +0 -85
  140. package/src/js/combobox/constants.combobox.ts +0 -83
  141. package/src/js/combobox/dom.combobox.ts +0 -407
  142. package/src/js/combobox/event.combobox.ts +0 -365
  143. package/src/js/combobox/index.ts +0 -320
  144. package/src/js/combobox/misc.combobox.ts +0 -104
  145. package/src/js/combobox/models.combobox.ts +0 -54
  146. package/src/js/combobox/state.combobox.ts +0 -246
  147. package/src/js/dialog.ts +0 -255
  148. package/src/js/floatable/floatable.embedded.ts +0 -332
  149. package/src/js/floatable/floatable.standalone.ts +0 -6
  150. package/src/js/focus-trap/focus-trap.embedded.ts +0 -411
  151. package/src/js/focus-trap/focus-trap.standalone.ts +0 -1
  152. package/src/js/index.ts +0 -15
  153. package/src/js/internal/attributable.ts +0 -73
  154. package/src/js/internal/draggable.ts +0 -657
  155. package/src/js/internal/listbox/listbox.constants.ts +0 -25
  156. package/src/js/internal/listbox/listbox.data.ts +0 -287
  157. package/src/js/internal/listbox/listbox.dom.ts +0 -445
  158. package/src/js/internal/listbox/listbox.event.ts +0 -129
  159. package/src/js/internal/listbox/listbox.form.ts +0 -115
  160. package/src/js/internal/listbox/listbox.misc.ts +0 -135
  161. package/src/js/internal/listbox/listbox.model.ts +0 -169
  162. package/src/js/internal/listbox/listbox.state.ts +0 -82
  163. package/src/js/internal/misc.ts +0 -27
  164. package/src/js/internal/navigable.ts +0 -315
  165. package/src/js/l10n.ts +0 -192
  166. package/src/js/listbox/constants.listbox.ts +0 -61
  167. package/src/js/listbox/event.listbox.ts +0 -106
  168. package/src/js/listbox/index.ts +0 -302
  169. package/src/js/listbox/misc.listbox.ts +0 -70
  170. package/src/js/listbox/state.listbox.ts +0 -196
  171. package/src/js/menu.ts +0 -348
  172. package/src/js/movable/movable.embedded.ts +0 -318
  173. package/src/js/movable/movable.standalone.ts +0 -2
  174. package/src/js/popover.ts +0 -229
  175. package/src/js/resizable/resizable.embedded.ts +0 -413
  176. package/src/js/resizable/resizable.standalone.ts +0 -5
  177. package/src/js/sortable/sortable.embedded.ts +0 -527
  178. package/src/js/sortable/sortable.standalone.ts +0 -2
  179. package/src/js/splitter.ts +0 -583
  180. package/src/js/tabs.ts +0 -447
  181. package/src/js/toolbar.ts +0 -63
  182. package/src/js/tooltip.ts +0 -367
  183. /package/dist/css/{mixins.css → mixins/input.mixins.css} +0 -0
package/src/css/form.scss DELETED
@@ -1,573 +0,0 @@
1
- /*! https://github.com/oscarpalmer/oui */
2
-
3
- @use 'mixins.scss' as mixins;
4
-
5
- :where(.oui-fieldset) {
6
- padding: 1em;
7
- border: 1px solid var(--oui-gray-3);
8
- border-radius: 0.25em;
9
- }
10
-
11
- .oui-input {
12
- :where(&) {
13
- --oui-background-value: var(--oui-absolute);
14
- }
15
-
16
- :where(&:not([type='range' i])) {
17
- @include mixins.input;
18
-
19
- padding: 0.5em 0.75em;
20
- border-radius: 0.25em;
21
- }
22
-
23
- :where(&:not([type='range' i], select[multiple], textarea)) {
24
- overflow: hidden;
25
- white-space: nowrap;
26
- text-overflow: ellipsis;
27
- }
28
-
29
- :where(&:is([list])) {
30
- &::-webkit-calendar-picker-indicator {
31
- display: none !important;
32
- }
33
- }
34
-
35
- :where(&:is([type='color' i])) {
36
- padding: 0;
37
- }
38
-
39
- :where(
40
- &:is(
41
- [type='date' i],
42
- [type='datetime-local' i],
43
- [type='month' i],
44
- [type='number' i],
45
- [type='tel' i],
46
- [type='time' i],
47
- [type='url' i],
48
- [type='week' i]
49
- )
50
- ) {
51
- font-variant-numeric: tabular-nums;
52
- }
53
-
54
- :where(&:is([type='date' i], [type='datetime-local' i], [type='month' i], [type='week' i])) {
55
- &::-webkit-calendar-picker-indicator {
56
- --oui-outline-percentage: 100%;
57
- --oui-outline-value: var(--oui-blue-6);
58
-
59
- outline: 4px solid
60
- color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
61
- outline-offset: 2px;
62
- border-radius: 1em;
63
- transition: outline 0.125s ease-in-out;
64
- cursor: pointer;
65
-
66
- &:focus-within {
67
- --oui-outline-percentage: 62.5%;
68
- }
69
-
70
- @media (hover: hover) {
71
- &:hover {
72
- --oui-outline-percentage: 85%;
73
- }
74
- }
75
- }
76
- }
77
-
78
- :where(&:is([type='file' i])) {
79
- padding-left: 0.5em;
80
-
81
- &::file-selector-button {
82
- @include mixins.button;
83
-
84
- --oui-background-value: var(--oui-grey-2);
85
- --oui-outline-value: var(--oui-grey-6);
86
-
87
- margin: 0 0.75em 0 0;
88
- outline: none;
89
- font-size: 0.75em;
90
- cursor: pointer;
91
- }
92
- }
93
-
94
- :where(&:is([type='range' i])) {
95
- appearance: none;
96
- outline: none;
97
-
98
- &::range-track {
99
- @include mixins.input;
100
-
101
- appearance: none;
102
- width: 100%;
103
- height: 0.75em;
104
- border-radius: 0.75em;
105
- position: relative;
106
- }
107
-
108
- &::range-thumb {
109
- --oui-background-percentage: 0%;
110
- --oui-background-value: var(--oui-blue-6);
111
-
112
- @include mixins.input-outlined;
113
-
114
- appearance: none;
115
- width: 1.25em;
116
- height: 1.25em;
117
- background-color: color-mix(
118
- in oklab,
119
- var(--oui-background-value),
120
- transparent var(--oui-background-percentage)
121
- );
122
- border: 1px solid var(--oui-absolute);
123
- border-radius: 1.25em;
124
- box-shadow: 0 1px 2px 2px rgb(0 0 0 / 12.5%);
125
- cursor: pointer;
126
- }
127
-
128
- &::-webkit-slider-thumb {
129
- position: relative;
130
- top: 50%;
131
- transform: translateY(-50%);
132
- }
133
- }
134
-
135
- :where(
136
- &.oui-validate:not(
137
- [disabled],
138
- [readonly],
139
- [aria-disabled='true' i],
140
- [aria-readonly='true' i],
141
- :focus-visible,
142
- :focus-within
143
- ):is(:user-invalid:not([aria-invalid='false' i]), [aria-invalid='true' i])
144
- ) {
145
- &::file-selector-button {
146
- --oui-background-value: var(--oui-red-2);
147
- --oui-foreground-value: var(--oui-red-8);
148
- --oui-outline-value: var(--oui-red-6);
149
- }
150
-
151
- &::range-thumb {
152
- --oui-background-value: var(--oui-red-6);
153
- }
154
-
155
- &::range-track {
156
- @include mixins.input-invalid;
157
- }
158
-
159
- & > option:checked {
160
- background-color: var(--oui-red-2);
161
- color: var(--oui-red-9);
162
- }
163
- }
164
-
165
- :where(
166
- &.oui-validate:not(
167
- [disabled],
168
- [readonly],
169
- [aria-disabled='true' i],
170
- [aria-readonly='true' i],
171
- :focus-visible,
172
- :focus-within
173
- ):is(:user-valid:not([aria-invalid='true' i]), [aria-invalid='false' i])
174
- ) {
175
- &::file-selector-button {
176
- --oui-background-value: var(--oui-green-2);
177
- --oui-foreground-value: var(--oui-green-8);
178
- --oui-outline-value: var(--oui-green-6);
179
- }
180
-
181
- &::range-track {
182
- @include mixins.input-valid;
183
- }
184
-
185
- &::range-thumb {
186
- --oui-background-value: var(--oui-green-6);
187
- }
188
-
189
- & > option:checked {
190
- background-color: var(--oui-green-2);
191
- color: var(--oui-green-9);
192
- }
193
- }
194
-
195
- &:not([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i]) {
196
- :where(&:focus-visible, &:focus-within) {
197
- &::file-selector-button {
198
- --oui-background-value: var(--oui-blue-2);
199
- --oui-foreground-value: var(--oui-blue-8);
200
- --oui-outline-value: var(--oui-blue-6);
201
- }
202
-
203
- &::range-thumb,
204
- &::range-track {
205
- @include mixins.input-focus;
206
- }
207
-
208
- &::range-thumb {
209
- --oui-background-value: var(--oui-blue-6);
210
-
211
- box-shadow: 0 1px 2px 2px rgb(0 0 0 / 25%);
212
- }
213
- }
214
-
215
- @media (hover: hover) {
216
- :where(&:hover) {
217
- &::file-selector-button {
218
- --oui-background-value: var(--oui-blue-2);
219
- --oui-foreground-value: var(--oui-blue-8);
220
- --oui-outline-value: var(--oui-blue-6);
221
- }
222
-
223
- &::range-thumb {
224
- --oui-background-value: var(--oui-blue-5);
225
- }
226
-
227
- &::range-track {
228
- @include mixins.input-hover;
229
- }
230
- }
231
- }
232
- }
233
-
234
- :where(&:is([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i])) {
235
- &::-webkit-calendar-picker-indicator {
236
- &:focus-within {
237
- --oui-outline-percentage: 0%;
238
- --oui-outline-value: var(--oui-gray-3);
239
- }
240
-
241
- @media (hover: hover) {
242
- &:hover {
243
- --oui-outline-percentage: 0%;
244
- --oui-outline-value: var(--oui-gray-3);
245
- }
246
- }
247
- }
248
-
249
- &::file-selector-button {
250
- --oui-background-value: var(--oui-gray-1);
251
-
252
- cursor: default;
253
- }
254
-
255
- &::range-thumb {
256
- --oui-background-value: var(--oui-gray-2);
257
-
258
- cursor: default;
259
- }
260
- }
261
-
262
- :where(&:is([disabled], [aria-disabled='true' i])) {
263
- &::-webkit-calendar-picker-indicator {
264
- opacity: 0.5;
265
- }
266
-
267
- &::range-thumb {
268
- --oui-background-value: var(--oui-gray-1);
269
-
270
- cursor: default;
271
- }
272
-
273
- &::range-track {
274
- --oui-background-percentage: 50%;
275
- --oui-background-value: var(--oui-gray-0);
276
- }
277
- }
278
- }
279
-
280
- :where(select.oui-input, .oui-input[list]) {
281
- padding-right: 2em;
282
- background-position: right 0.5em center;
283
- }
284
-
285
- select.oui-input:is([multiple]) {
286
- :where(&) {
287
- --oui-off: attr(oui-off);
288
- --oui-on: attr(oui-on, '\2713');
289
-
290
- padding: 0;
291
- }
292
-
293
- :where(& > option) {
294
- padding: 0.5em 0.75em;
295
- }
296
-
297
- :where(&[oui-off] > option) {
298
- &::before {
299
- content: var(--oui-off);
300
- margin: 0 0.75em 0 0;
301
- }
302
- }
303
-
304
- :where(& > option:nth-of-type(2n)) {
305
- background-color: color-mix(in oklab, var(--oui-blue-0), transparent 50%);
306
- }
307
-
308
- :where(& > option:checked) {
309
- background-color: var(--oui-blue-2);
310
- color: var(--oui-blue-9);
311
-
312
- &::before {
313
- content: var(--oui-on);
314
- margin: 0 0.75em 0 0;
315
- }
316
- }
317
- }
318
-
319
- :where(textarea.oui-input) {
320
- min-height: 4em;
321
- resize: vertical;
322
- transition:
323
- all 0.125s ease-in-out,
324
- height 0s;
325
- }
326
-
327
- :where(.oui-label, .oui-legend) {
328
- font-size: 0.875rem;
329
- font-weight: bold;
330
- align-self: flex-start;
331
- }
332
-
333
- .oui-label {
334
- :where(&) {
335
- cursor: pointer;
336
- transition: color 0.125s ease-in-out;
337
- }
338
-
339
- @media (hover: hover) {
340
- :where(&[for]:hover) {
341
- color: var(--oui-blue-8);
342
- }
343
- }
344
- }
345
-
346
- :where(.oui-legend) {
347
- padding: 0.5em;
348
- border: 1px solid var(--oui-gray-3);
349
- border-radius: 0.25em;
350
- }
351
-
352
- :where(.oui-switch, .oui-toggle) {
353
- --oui-background-percentage: 50%;
354
- --oui-background-value: var(--oui-gray-1);
355
- --oui-border-value: var(--oui-gray-3);
356
- --oui-foreground-percentage: 0%;
357
- --oui-foreground-value: var(--oui-gray-8);
358
- --oui-outline-percentage: 100%;
359
- --oui-outline-value: var(--oui-blue-6);
360
- --oui-shadow-percentage: 85%;
361
- --oui-shadow-value: var(--oui-gray-10);
362
-
363
- position: relative;
364
- cursor: pointer;
365
-
366
- &::before,
367
- &::after {
368
- display: inline-block;
369
- font-family: system-ui, sans-serif;
370
- position: absolute;
371
- transition: 0.125s ease-in-out;
372
- transition-property: background, outline, border, box-shadow, color;
373
- pointer-events: none;
374
- }
375
-
376
- &::before {
377
- background-color: color-mix(
378
- in oklab,
379
- var(--oui-background-value),
380
- transparent var(--oui-background-percentage)
381
- );
382
- outline: 4px solid
383
- color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
384
- outline-offset: 0;
385
- border: 1px solid var(--oui-border-value);
386
- box-shadow: inset 0 1px 2px 0
387
- color-mix(in oklab, var(--oui-shadow-value), transparent var(--oui-shadow-percentage));
388
- }
389
-
390
- &::after {
391
- color: color-mix(
392
- in oklab,
393
- var(--oui-foreground-value),
394
- transparent var(--oui-foreground-percentage)
395
- );
396
- }
397
- }
398
-
399
- .oui-switch {
400
- :where(&) {
401
- padding: 0 3em 0 0;
402
-
403
- &::before {
404
- content: '';
405
- width: 2.5em;
406
- height: 1.5em;
407
- border-radius: 3em;
408
- right: 0;
409
- }
410
-
411
- &::after {
412
- content: attr(oui-off, '\2715');
413
- width: 1.5em;
414
- height: 1.5em;
415
- background-color: var(--oui-absolute);
416
- border-radius: 1.5em;
417
- box-shadow: 0 1px 2px 1px rgb(0 0 0 / 12.5%);
418
- font-size: 0.75em;
419
- font-weight: bold;
420
- line-height: 1.5em;
421
- text-align: center;
422
- top: 0.25em;
423
- right: 1.5em;
424
- }
425
- }
426
-
427
- :where(&:has(input:checked)) {
428
- --oui-foreground-percentage: 0%;
429
- --oui-foreground-value: var(--oui-blue-8);
430
-
431
- &::after {
432
- content: attr(oui-on, '\2713');
433
- box-shadow: 0 1px 2px 1px rgb(0 0 0 / 25%);
434
- right: 0.25em;
435
- }
436
- }
437
- }
438
-
439
- .oui-toggle {
440
- :where(&) {
441
- --oui-background-percentage: 100%;
442
- --oui-border-value: var(--oui-gray-4);
443
-
444
- padding: 0 0 0 2em;
445
-
446
- &::before {
447
- content: '';
448
- width: 1.5em;
449
- height: 1.5em;
450
- inset: 0 auto auto 0;
451
- }
452
-
453
- &::after {
454
- opacity: 0;
455
- }
456
- }
457
-
458
- :where(&:has(input[type='checkbox' i])) {
459
- --oui-foreground-percentage: 0%;
460
- --oui-foreground-value: white;
461
-
462
- &::before {
463
- border-radius: 0.25em;
464
- }
465
-
466
- &::after {
467
- content: attr(oui-on, '\2713');
468
- width: 1.5em;
469
- height: 1.5em;
470
- text-shadow: 0 1px 2px rgb(0 0 0 / 50%);
471
- font-weight: bold;
472
- line-height: 1.5em;
473
- text-align: center;
474
- inset: 0 auto auto 0;
475
- }
476
- }
477
-
478
- :where(&:has(input[type='radio' i])) {
479
- position: relative;
480
-
481
- &::before,
482
- &::after {
483
- border-radius: 50%;
484
- }
485
-
486
- &::after {
487
- content: '';
488
- width: 0.75em;
489
- height: 0.75em;
490
- background-color: var(--oui-absolute);
491
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 50%);
492
- inset: 0.375em auto auto 0.375em;
493
- }
494
- }
495
-
496
- :where(&:has(input:checked)) {
497
- &::after {
498
- opacity: 1;
499
- }
500
- }
501
- }
502
-
503
- .oui-switch,
504
- .oui-toggle {
505
- :where(&:has(input:checked)) {
506
- --oui-background-percentage: 25%;
507
- --oui-background-value: var(--oui-blue-6);
508
- --oui-border-value: var(--oui-blue-6);
509
- --oui-shadow-percentage: 50%;
510
- --oui-shadow-value: var(--oui-blue-8);
511
- }
512
-
513
- :where(&:focus-within) {
514
- --oui-border-value: var(--oui-blue-6);
515
- --oui-outline-percentage: 75%;
516
-
517
- color: var(--oui-blue-8);
518
- }
519
-
520
- :where(&:has(input:not([disabled], [aria-disabled='true' i])):focus-within) {
521
- --oui-background-percentage: 50%;
522
- }
523
-
524
- @media (hover: hover) {
525
- :where(&:has(input:not([disabled], [aria-disabled='true' i])):hover) {
526
- --oui-border-value: var(--oui-blue-4);
527
- --oui-outline-percentage: 90%;
528
- --oui-outline-value: var(--oui-blue-6);
529
-
530
- color: var(--oui-blue-8);
531
- }
532
-
533
- :where(&:has(input:not([disabled], [aria-disabled='true' i]):is(:checked)):hover) {
534
- --oui-background-percentage: 50%;
535
- --oui-background-value: var(--oui-blue-6);
536
- }
537
- }
538
-
539
- :where(&:has(input[disabled], input[aria-disabled='true' i])) {
540
- --oui-background-percentage: 50%;
541
- --oui-background-value: var(--oui-gray-0);
542
- --oui-border-value: var(--oui-gray-3);
543
- --oui-foreground-percentage: 25%;
544
- --oui-foreground-value: currentcolor;
545
-
546
- color: color-mix(
547
- in oklab,
548
- var(--oui-foreground-value),
549
- transparent var(--oui-foreground-percentage)
550
- );
551
- font-style: italic;
552
- cursor: default;
553
-
554
- &::after,
555
- &::before {
556
- font-style: normal;
557
- }
558
-
559
- &::after {
560
- box-shadow: 0 0 0 1px var(--oui-gray-3);
561
- text-shadow: none;
562
- }
563
- }
564
- }
565
-
566
- :where(label.oui-switch, label.oui-toggle) {
567
- display: inline-block;
568
- line-height: 1.5;
569
- }
570
-
571
- :where(.oui-switch input, .oui-toggle input) {
572
- @include mixins.visually-hidden;
573
- }
@@ -1,120 +0,0 @@
1
- /*! https://github.com/oscarpalmer/oui */
2
-
3
- @use './mixins.scss' as mixins;
4
-
5
- :where(oui-listbox, [oui-listbox-content]) {
6
- display: flex;
7
- flex-flow: column nowrap;
8
- }
9
-
10
- :where([oui-listbox-content]) {
11
- flex: 1;
12
- background-color: var(--oui-absolute);
13
- border: 1px solid var(--oui-gray-3);
14
- border-radius: 0.5em;
15
- }
16
-
17
- :where([oui-listbox-filter], [oui-listbox-header]) {
18
- &::after {
19
- content: '';
20
- width: 100%;
21
- height: 0.25em;
22
- background-image: linear-gradient(to bottom, rgb(0 0 0 / 12.5%), transparent);
23
- position: absolute;
24
- bottom: -0.25em;
25
- left: 0;
26
- }
27
- }
28
-
29
- :where([oui-listbox-filter]) {
30
- padding: 1em;
31
- background-color: var(--oui-yellow-0);
32
- border-radius: 0.5em 0.5em 0 0;
33
- position: relative;
34
- z-index: 2;
35
- }
36
-
37
- [oui-listbox-filter-input] {
38
- :where(&) {
39
- @include mixins.input;
40
-
41
- --oui-background-value: var(--oui-absolute);
42
-
43
- width: 100%;
44
- padding: 0.5em 0.75em;
45
- border-radius: 0.25em;
46
- position: relative;
47
- }
48
- }
49
-
50
- :where([oui-listbox-header]) {
51
- padding: 0.5em calc(0.75em / 0.75);
52
- background-color: var(--oui-gray-0);
53
- font-size: 0.75em;
54
- font-weight: bold;
55
- position: sticky;
56
- top: 0;
57
- z-index: 1;
58
- }
59
-
60
- :where([oui-listbox-hidden]) {
61
- @include mixins.visually-hidden;
62
-
63
- position: absolute;
64
- }
65
-
66
- :where([oui-listbox-list]) {
67
- height: fit-content;
68
- max-height: max(25vh, 32rem);
69
- flex: 1;
70
- overflow: auto;
71
- border-radius: 0 0 0.5em 0.5em;
72
- position: relative;
73
- }
74
-
75
- :where([oui-listbox-list-empty]) {
76
- display: none;
77
- }
78
-
79
- :where([oui-listbox-message]) {
80
- padding: 1em;
81
- flex: 1;
82
- align-content: center;
83
- text-align: center;
84
- font-style: italic;
85
- }
86
-
87
- [oui-listbox-option] {
88
- :where(&) {
89
- padding: 0.5em 0.75em;
90
- outline: 4px solid transparent;
91
- outline-offset: -4px;
92
- line-height: 1.25;
93
- cursor: pointer;
94
- }
95
-
96
- :where(&[aria-selected='true' i]) {
97
- background-color: var(--oui-blue-2);
98
- color: var(--oui-blue-9);
99
- }
100
-
101
- :where(oui-listbox[multiple] &[aria-selected='true' i])::before {
102
- content: '✓';
103
- margin: 0 0.75em 0 0;
104
- }
105
-
106
- oui-listbox:not([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i]) & {
107
- @media (hover: hover) {
108
- :where(&:hover) {
109
- background-color: var(--oui-blue-1);
110
- color: var(--oui-blue-8);
111
- }
112
- }
113
- }
114
- }
115
-
116
- :where(oui-listbox:focus-within [oui-listbox-option-active]) {
117
- background-color: var(--oui-blue-1);
118
- outline-color: var(--oui-blue-4);
119
- color: var(--oui-blue-8);
120
- }