@typlog/ui 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.
Files changed (36) hide show
  1. package/dist/addons.css +113 -0
  2. package/dist/addons.d.ts +48 -0
  3. package/dist/addons.js +442 -0
  4. package/dist/components/accordion.css +149 -0
  5. package/dist/components/avatar.css +131 -0
  6. package/dist/components/badge.css +75 -0
  7. package/dist/{base.css → components/base.css} +726 -832
  8. package/dist/components/button.css +317 -0
  9. package/dist/components/card.css +86 -0
  10. package/dist/components/checkbox.css +90 -0
  11. package/dist/components/collapsible.css +27 -0
  12. package/dist/components/combobox.css +388 -0
  13. package/dist/components/dialog.css +488 -0
  14. package/dist/components/dropdown.css +204 -0
  15. package/dist/components/editable.css +34 -0
  16. package/dist/components/icon.css +109 -0
  17. package/dist/components/inputs.css +570 -0
  18. package/dist/components/inset.css +73 -0
  19. package/dist/components/pagination.css +299 -0
  20. package/dist/components/popover.css +69 -0
  21. package/dist/components/quota.css +14 -0
  22. package/dist/components/radio.css +211 -0
  23. package/dist/components/scrollarea.css +107 -0
  24. package/dist/components/select.css +308 -0
  25. package/dist/components/separator.css +26 -0
  26. package/dist/components/spinner.css +36 -0
  27. package/dist/components/switch.css +176 -0
  28. package/dist/components/table.css +198 -0
  29. package/dist/components/tabs.css +122 -0
  30. package/dist/components/toggle.css +188 -0
  31. package/dist/components/tooltip.css +37 -0
  32. package/dist/components.css +3548 -0
  33. package/dist/{index.d.ts → components.d.ts} +131 -107
  34. package/dist/{index.js → components.js} +323 -681
  35. package/package.json +28 -14
  36. package/dist/style.css +0 -10463
@@ -0,0 +1,107 @@
1
+
2
+ .ui-root {
3
+ --scrollarea-scrollbar-horizontal-margin-top: var(--space-1);
4
+ --scrollarea-scrollbar-horizontal-margin-bottom: var(--space-1);
5
+ --scrollarea-scrollbar-horizontal-margin-left: var(--space-1);
6
+ --scrollarea-scrollbar-horizontal-margin-right: var(--space-1);
7
+ --scrollarea-scrollbar-vertical-margin-top: var(--space-1);
8
+ --scrollarea-scrollbar-vertical-margin-bottom: var(--space-1);
9
+ --scrollarea-scrollbar-vertical-margin-left: var(--space-1);
10
+ --scrollarea-scrollbar-vertical-margin-right: var(--space-1);
11
+ }
12
+ .ui-ScrollArea {
13
+ display: flex;
14
+ flex-direction: column;
15
+ overflow: hidden;
16
+ width: 100%;
17
+ height: 100%;
18
+ }
19
+ .ui-ScrollAreaViewport {
20
+ display: flex;
21
+ flex-direction: column;
22
+ width: 100%;
23
+ height: 100%;
24
+ }
25
+ .ui-ScrollAreaViewport:where(:focus-visible) + :where(.ui-ScrollAreaViewportFocusRing) {
26
+ position: absolute;
27
+ inset: 0;
28
+ pointer-events: none;
29
+ outline: 2px solid var(--focus-8);
30
+ outline-offset: -2px;
31
+ }
32
+ .ui-ScrollAreaViewport:where(:has(.ui-ScrollAreaScrollbar[data-orientation='horizontal'])) {
33
+ overscroll-behavior-x: contain;
34
+ }
35
+ .ui-ScrollAreaScrollbar {
36
+ display: flex;
37
+ -webkit-user-select: none;
38
+ -moz-user-select: none;
39
+ user-select: none;
40
+ touch-action: none;
41
+ }
42
+ .ui-ScrollAreaScrollbar:where([data-orientation='vertical']) {
43
+ flex-direction: column;
44
+ width: var(--scrollarea-scrollbar-size);
45
+ }
46
+ .ui-ScrollAreaScrollbar:where([data-orientation='horizontal']) {
47
+ flex-direction: row;
48
+ height: var(--scrollarea-scrollbar-size);
49
+ }
50
+ .ui-ScrollAreaThumb {
51
+ position: relative;
52
+ }
53
+ .ui-ScrollAreaThumb::before {
54
+ content: '';
55
+ position: absolute;
56
+ top: 50%;
57
+ left: 50%;
58
+ transform: translate(-50%, -50%);
59
+ width: 100%;
60
+ height: 100%;
61
+ min-width: var(--space-4);
62
+ min-height: var(--space-4);
63
+ }
64
+ .ui-ScrollAreaScrollbar:where([data-size="1"]) {
65
+ --scrollarea-scrollbar-size: var(--space-1);
66
+ --scrollarea-scrollbar-border-radius: max(var(--radius-1), var(--radius-full));
67
+ }
68
+ .ui-ScrollAreaScrollbar:where([data-size="2"]) {
69
+ --scrollarea-scrollbar-size: var(--space-2);
70
+ --scrollarea-scrollbar-border-radius: max(var(--radius-1), var(--radius-full));
71
+ }
72
+ .ui-ScrollAreaScrollbar:where([data-size="3"]) {
73
+ --scrollarea-scrollbar-size: var(--space-3);
74
+ --scrollarea-scrollbar-border-radius: max(var(--radius-1), var(--radius-full));
75
+ }
76
+ .ui-ScrollAreaScrollbar {
77
+ background-color: var(--gray-a3);
78
+ border-radius: var(--scrollarea-scrollbar-border-radius);
79
+ animation-duration: 120ms;
80
+ animation-timing-function: ease-out;
81
+ }
82
+ .ui-ScrollAreaScrollbar:where([data-state='visible']) {
83
+ animation-name: ui-fade-in;
84
+ }
85
+ .ui-ScrollAreaScrollbar:where([data-state='hidden']) {
86
+ animation-name: ui-fade-out;
87
+ }
88
+ .ui-ScrollAreaScrollbar:where([data-orientation='horizontal']) {
89
+ margin-top: var(--scrollarea-scrollbar-horizontal-margin-top);
90
+ margin-bottom: var(--scrollarea-scrollbar-horizontal-margin-bottom);
91
+ margin-left: var(--scrollarea-scrollbar-horizontal-margin-left);
92
+ margin-right: var(--scrollarea-scrollbar-horizontal-margin-right);
93
+ }
94
+ .ui-ScrollAreaScrollbar:where([data-orientation='vertical']) {
95
+ margin-top: var(--scrollarea-scrollbar-vertical-margin-top);
96
+ margin-bottom: var(--scrollarea-scrollbar-vertical-margin-bottom);
97
+ margin-left: var(--scrollarea-scrollbar-vertical-margin-left);
98
+ margin-right: var(--scrollarea-scrollbar-vertical-margin-right);
99
+ }
100
+ .ui-ScrollAreaThumb {
101
+ background-color: var(--gray-a8);
102
+ border-radius: inherit;
103
+ transition: background-color 100ms;
104
+ }
105
+ .ui-ScrollAreaThumb:hover {
106
+ background-color: var(--gray-a9);
107
+ }
@@ -0,0 +1,308 @@
1
+
2
+ .ui-SelectContent {
3
+ --scrollarea-scrollbar-vertical-margin-top: var(--select-content-padding);
4
+ --scrollarea-scrollbar-vertical-margin-bottom: var(--select-content-padding);
5
+ --scrollarea-scrollbar-horizontal-margin-left: var(--select-content-padding);
6
+ --scrollarea-scrollbar-horizontal-margin-right: var(--select-content-padding);
7
+
8
+ overflow: hidden;
9
+ box-shadow: var(--shadow-5);
10
+ background-color: var(--color-panel-solid);
11
+ box-sizing: border-box;
12
+ }
13
+ .ui-SelectContent:where([data-side]) {
14
+ min-width: var(--reka-select-trigger-width);
15
+ max-width: var(--reka-select-content-available-width);
16
+ max-height: var(--reka-select-content-available-height);
17
+ transform-origin: var(--reka-select-content-transform-origin);
18
+ }
19
+ .ui-SelectViewport {
20
+ box-sizing: border-box;
21
+ padding: var(--select-content-padding);
22
+ }
23
+ .ui-SelectContent:has(.ui-ScrollAreaScrollbar[data-orientation='vertical']) .ui-SelectViewport {
24
+ padding-right: var(--space-3);
25
+ }
26
+ .ui-SelectContent:where(.r-size-1) {
27
+ --select-content-padding: var(--space-1);
28
+ --select-item-height: var(--space-5);
29
+ --select-item-indicator-width: calc(var(--space-5) / 1.2);
30
+ --select-separator-margin-right: var(--space-2);
31
+ border-radius: var(--radius-3);
32
+ }
33
+ .ui-SelectContent:where(.r-size-2),
34
+ .ui-SelectContent:where(.r-size-3) {
35
+ --select-content-padding: var(--space-2);
36
+ --select-item-height: var(--space-6);
37
+ --select-item-indicator-width: var(--space-5);
38
+ --select-separator-margin-right: var(--space-3);
39
+ border-radius: var(--radius-4);
40
+ }
41
+
42
+ .ui-SelectTrigger {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ justify-content: space-between;
46
+ flex-shrink: 0;
47
+ -webkit-user-select: none;
48
+ -moz-user-select: none;
49
+ user-select: none;
50
+ vertical-align: top;
51
+ font-weight: var(--font-weight-regular);
52
+ font-style: normal;
53
+ text-align: start;
54
+ color: var(--gray-12);
55
+ }
56
+ .ui-SelectTriggerInner {
57
+ overflow: hidden;
58
+ text-overflow: ellipsis;
59
+ white-space: nowrap;
60
+ }
61
+ .ui-SelectIcon {
62
+ flex-shrink: 0;
63
+ }
64
+ .ui-SelectTrigger:where(:not(.r-variant-ghost)).ui-SelectIcon {
65
+ opacity: 0.9;
66
+ }
67
+ .ui-SelectTrigger:where(:not(.r-variant-ghost)) {
68
+ box-sizing: border-box;
69
+ height: var(--select-trigger-height);
70
+ }
71
+ .ui-SelectTrigger:where(.r-variant-ghost) {
72
+ box-sizing: content-box;
73
+ height: -moz-fit-content;
74
+ height: fit-content;
75
+ padding: var(--select-trigger-ghost-padding-y) var(--select-trigger-ghost-padding-x);
76
+ margin: calc(0px - var(--select-trigger-ghost-padding-y)) calc(0px - var(--select-trigger-ghost-padding-x));
77
+ }
78
+ .ui-SelectTrigger:where(.r-size-1) {
79
+ --select-trigger-height: var(--space-5);
80
+ gap: var(--space-1);
81
+ font-size: var(--font-size-1);
82
+ line-height: var(--line-height-1);
83
+ letter-spacing: var(--letter-spacing-1);
84
+ border-radius: max(var(--radius-1), var(--radius-full));
85
+ }
86
+ .ui-SelectTrigger:where(.r-size-1):where(.r-variant-ghost) {
87
+ --select-trigger-ghost-padding-x: var(--space-2);
88
+ --select-trigger-ghost-padding-y: var(--space-1);
89
+ }
90
+ .ui-SelectTrigger:where(.r-size-1):where(:not(.r-variant-ghost)) {
91
+ padding-left: var(--space-2);
92
+ padding-right: var(--space-2);
93
+ }
94
+ .ui-SelectTrigger:where(.r-size-2) {
95
+ --select-trigger-height: var(--space-6);
96
+ gap: calc(var(--space-1) * 1.5);
97
+ font-size: var(--font-size-2);
98
+ line-height: var(--line-height-2);
99
+ letter-spacing: var(--letter-spacing-2);
100
+ border-radius: max(var(--radius-2), var(--radius-full));
101
+ }
102
+ .ui-SelectTrigger:where(.r-size-1):where(.r-variant-ghost) {
103
+ --select-trigger-ghost-padding-x: var(--space-2);
104
+ --select-trigger-ghost-padding-y: var(--space-1);
105
+ }
106
+ .ui-SelectTrigger:where(.r-size-2):where(:not(.r-variant-ghost)) {
107
+ padding-left: var(--space-3);
108
+ padding-right: var(--space-3);
109
+ }
110
+ .ui-SelectTrigger:where(.r-size-3) {
111
+ --select-trigger-height: var(--space-7);
112
+ gap: var(--space-2);
113
+ font-size: var(--font-size-3);
114
+ line-height: var(--line-height-3);
115
+ letter-spacing: var(--letter-spacing-3);
116
+ border-radius: max(var(--radius-3), var(--radius-full));
117
+ }
118
+ .ui-SelectTrigger:where(.r-size-3):where(.r-variant-ghost) {
119
+ --select-trigger-ghost-padding-x: var(--space-3);
120
+ --select-trigger-ghost-padding-y: calc(var(--space-1) * 1.5);
121
+ }
122
+ .ui-SelectTrigger:where(.r-size-3):where(:not(.r-variant-ghost)) {
123
+ padding-left: var(--space-4);
124
+ padding-right: var(--space-4);
125
+ }
126
+ .ui-SelectTrigger:where(.r-size-3) .ui-SelectIcon {
127
+ width: 11px;
128
+ height: 11px;
129
+ }
130
+ .ui-SelectTrigger:where(.r-variant-surface) {
131
+ --select-trigger-border-width: 1px;
132
+ --select-trigger-border-color: var(--gray-a7);
133
+ outline: 0;
134
+ color: var(--gray-12);
135
+ background-color: var(--color-surface);
136
+ border: var(--select-trigger-border-width) solid var(--select-trigger-border-color);
137
+ }
138
+ .ui-SelectTrigger:where(.r-variant-surface):where(:focus-visible) {
139
+ --select-trigger-border-color: var(--focus-a8);
140
+ box-shadow: 0 0 0 2px var(--accent-4), 0 1px 2px 0 rgb(0 0 0 / 0.05);
141
+ }
142
+ @media (hover: hover) {
143
+ .ui-SelectTrigger:where(.r-variant-surface):hover {
144
+ --select-trigger-border-color: var(--gray-a8);
145
+ }
146
+ }
147
+ .ui-SelectTrigger:where(.r-variant-surface):where([data-state='open']) {
148
+ --select-trigger-border-color: var(--gray-a8);
149
+ }
150
+ .ui-SelectTrigger:where(.r-variant-surface):where(:disabled) {
151
+ color: var(--gray-a11);
152
+ background-color: var(--gray-a2);
153
+ --select-trigger-border-color: var(--gray-a6);
154
+ }
155
+ .ui-SelectTrigger:where(.r-variant-surface):where([data-placeholder]) .ui-SelectTriggerInner {
156
+ color: var(--gray-a10);
157
+ }
158
+ .ui-SelectTrigger:where(.r-variant-soft),
159
+ .ui-SelectTrigger:where(.r-variant-ghost) {
160
+ color: var(--accent-12);
161
+ }
162
+ .ui-SelectTrigger:where(.r-variant-soft):where(:focus-visible),
163
+ .ui-SelectTrigger:where(.r-variant-ghost):where(:focus-visible) {
164
+ outline: 2px solid var(--focus-8);
165
+ outline-offset: -1px;
166
+ }
167
+ .ui-SelectTrigger:where(.r-variant-soft):where([data-placeholder]) .ui-SelectTriggerInner,
168
+ .ui-SelectTrigger:where(.r-variant-ghost):where([data-placeholder]) .ui-SelectTriggerInner {
169
+ color: var(--accent-12);
170
+ opacity: 0.6;
171
+ }
172
+ .ui-SelectTrigger:where(.r-variant-soft) {
173
+ background-color: var(--accent-a3);
174
+ }
175
+ @media (hover: hover) {
176
+ .ui-SelectTrigger:where(.r-variant-soft):hover {
177
+ background-color: var(--accent-a4);
178
+ }
179
+ }
180
+ .ui-SelectTrigger:where(.r-variant-soft):where([data-state='open']) {
181
+ background-color: var(--accent-a4);
182
+ }
183
+ .ui-SelectTrigger:where(.r-variant-soft):where(:focus-visible) {
184
+ outline-color: var(--accent-8);
185
+ }
186
+ .ui-SelectTrigger:where(.r-variant-soft):where(:disabled) {
187
+ color: var(--gray-a11);
188
+ background-color: var(--gray-a3);
189
+ }
190
+ @media (hover: hover) {
191
+ .ui-SelectTrigger:where(.r-variant-ghost):hover {
192
+ background-color: var(--accent-a3);
193
+ }
194
+ }
195
+ .ui-SelectTrigger:where(.r-variant-ghost):where([data-state='open']) {
196
+ background-color: var(--accent-a3);
197
+ }
198
+ .ui-SelectTrigger:where(.r-variant-ghost):where(:disabled) {
199
+ color: var(--gray-a11);
200
+ background-color: transparent;
201
+ }
202
+ .ui-SelectTrigger:where(:disabled) .ui-SelectIcon {
203
+ color: var(--gray-a9);
204
+ }
205
+
206
+ .ui-SelectItem {
207
+ display: flex;
208
+ align-items: center;
209
+ height: var(--select-item-height);
210
+ padding-left: var(--select-item-indicator-width);
211
+ padding-right: var(--select-item-indicator-width);
212
+ position: relative;
213
+ box-sizing: border-box;
214
+ outline: none;
215
+ scroll-margin: var(--select-content-padding) 0;
216
+ -webkit-user-select: none;
217
+ -moz-user-select: none;
218
+ user-select: none;
219
+ cursor: default;
220
+ }
221
+ .ui-SelectItem:where([data-disabled]) {
222
+ cursor: not-allowed;
223
+ }
224
+ .ui-SelectItemIndicator {
225
+ position: absolute;
226
+ left: 0;
227
+ width: var(--select-item-indicator-width);
228
+ display: inline-flex;
229
+ align-items: center;
230
+ justify-content: center;
231
+ }
232
+ .ui-SelectItem:where([data-disabled]) {
233
+ color: var(--gray-a8);
234
+ }
235
+ :where(.r-size-1) .ui-SelectItem {
236
+ font-size: var(--font-size-1);
237
+ line-height: var(--line-height-1);
238
+ letter-spacing: var(--letter-spacing-1);
239
+ border-radius: var(--radius-1);
240
+ }
241
+ :where(.r-size-1) .ui-SelectItemIndicatorIcon {
242
+ width: calc(8px * var(--scaling));
243
+ height: calc(8px * var(--scaling));
244
+ }
245
+ :where(.r-size-2) .ui-SelectItem {
246
+ line-height: var(--line-height-2);
247
+ border-radius: var(--radius-2);
248
+ font-size: var(--font-size-2);
249
+ letter-spacing: var(--letter-spacing-2);
250
+ }
251
+ :where(.r-size-2) .ui-SelectItemIndicatorIcon,
252
+ :where(.r-size-3) .ui-SelectItemIndicatorIcon {
253
+ width: calc(10px * var(--scaling));
254
+ height: calc(10px * var(--scaling));
255
+ }
256
+ :where(.r-size-3) .ui-SelectItem {
257
+ line-height: var(--line-height-2);
258
+ border-radius: var(--radius-2);
259
+ font-size: var(--font-size-3);
260
+ letter-spacing: var(--letter-spacing-3);
261
+ }
262
+ :where(.r-variant-solid) .ui-SelectItem[data-highlighted] {
263
+ background-color: var(--accent-9);
264
+ color: var(--accent-contrast);
265
+ }
266
+ :where(.r-variant-solid):where(.r-high-contrast) .ui-SelectItem[data-highlighted] {
267
+ background-color: var(--accent-12);
268
+ color: var(--accent-1);
269
+ }
270
+ :where(.r-variant-soft) .ui-SelectItem[data-highlighted] {
271
+ background-color: var(--accent-a4);
272
+ }
273
+
274
+ .ui-SelectLabel {
275
+ display: flex;
276
+ align-items: center;
277
+ height: var(--select-item-height);
278
+ padding-left: var(--select-item-indicator-width);
279
+ padding-right: var(--select-item-indicator-width);
280
+ color: var(--gray-a10);
281
+ -webkit-user-select: none;
282
+ -moz-user-select: none;
283
+ user-select: none;
284
+ cursor: default;
285
+ }
286
+ .ui-SelectItem + .ui-SelectLabel {
287
+ margin-top: var(--space-2);
288
+ }
289
+ :where(.r-size-1) .ui-SelectLabel {
290
+ font-size: var(--font-size-1);
291
+ letter-spacing: var(--letter-spacing-1);
292
+ line-height: var(--line-height-1);
293
+ }
294
+ :where(.r-size-2) .ui-SelectLabel,
295
+ :where(.r-size-3) .ui-SelectLabel {
296
+ font-size: var(--font-size-2);
297
+ letter-spacing: var(--letter-spacing-2);
298
+ line-height: var(--line-height-2);
299
+ }
300
+
301
+ .ui-SelectSeparator {
302
+ height: 1px;
303
+ margin-top: var(--space-2);
304
+ margin-bottom: var(--space-2);
305
+ margin-left: var(--select-item-indicator-width);
306
+ margin-right: var(--select-separator-margin-right);
307
+ background-color: var(--gray-a6);
308
+ }
@@ -0,0 +1,26 @@
1
+
2
+ .ui-Separator {
3
+ display: block;
4
+ box-sizing: border-box;
5
+ background-color: var(--accent-a6);
6
+ }
7
+ .ui-Separator[aria-orientation="horizontal"] {
8
+ width: var(--separator-size, auto);
9
+ height: 1px;
10
+ }
11
+ .ui-Separator[aria-orientation="vertical"] {
12
+ width: 1px;
13
+ height: var(--separator-size, auto);
14
+ }
15
+ .ui-Separator:where(.r-size-1) {
16
+ --separator-size: var(--space-4);
17
+ }
18
+ .ui-Separator:where(.r-size-2) {
19
+ --separator-size: var(--space-6);
20
+ }
21
+ .ui-Separator:where(.r-size-3) {
22
+ --separator-size: var(--space-9);
23
+ }
24
+ .ui-Separator:where(.r-size-4) {
25
+ --separator-size: 100%;
26
+ }
@@ -0,0 +1,36 @@
1
+
2
+ .ui-Spinner {
3
+ color: var(--gray-10);
4
+ }
5
+ .ui-Spinner:where(.r-size-1) {
6
+ font-size: var(--space-3);
7
+ }
8
+ .ui-Spinner:where(.r-size-2) {
9
+ font-size: var(--space-4);
10
+ }
11
+ .ui-Spinner:where(.r-size-3) {
12
+ font-size: calc(1.25 * var(--space-4));
13
+ }
14
+
15
+ .ui-SavingIndicator {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ }
19
+ .ui-SavingIndicator > svg {
20
+ vertical-align: middle;
21
+ }
22
+ .ui-SavingIndicator:where([data-status="saving"]) {
23
+ color: var(--gray-10);
24
+ }
25
+ .ui-SavingIndicator:where([data-status="saved"]) {
26
+ color: var(--green-10);
27
+ }
28
+ .ui-SavingIndicator:where(.r-size-1) {
29
+ font-size: var(--space-3);
30
+ }
31
+ .ui-SavingIndicator:where(.r-size-2) {
32
+ font-size: var(--space-4);
33
+ }
34
+ .ui-SavingIndicator:where(.r-size-3) {
35
+ font-size: calc(1.25 * var(--space-4));
36
+ }
@@ -0,0 +1,176 @@
1
+
2
+ .ui-root {
3
+ --switch-disabled-blend-mode: multiply;
4
+ --switch-high-contrast-checked-color-overlay: var(--black-a8);
5
+ --switch-high-contrast-checked-active-before-filter: contrast(0.82) saturate(1.2) brightness(1.16);
6
+ --switch-surface-checked-active-filter: brightness(0.92) saturate(1.1);
7
+ }
8
+ :is(.dark, .dark-theme) .ui-root {
9
+ --switch-disabled-blend-mode: screen;
10
+ --switch-high-contrast-checked-color-overlay: transparent;
11
+ --switch-high-contrast-checked-active-before-filter: brightness(1.08);
12
+ --switch-surface-checked-active-filter: brightness(1.08);
13
+ }
14
+ .ui-Switch {
15
+ position: relative;
16
+ display: inline-flex;
17
+ align-items: center;
18
+ vertical-align: top;
19
+ flex-shrink: 0;
20
+ outline: none;
21
+
22
+ height: var(--switch-height);
23
+ --switch-width: calc(var(--switch-height) * 1.75);
24
+ --switch-thumb-inset: 1px;
25
+ --switch-thumb-size: calc(var(--switch-height) - var(--switch-thumb-inset) * 2);
26
+ --switch-thumb-translate-x: calc(var(--switch-width) - var(--switch-height));
27
+ }
28
+ .ui-Switch::before {
29
+ content: '';
30
+ display: block;
31
+ width: var(--switch-width);
32
+ height: var(--switch-height);
33
+ border-radius: var(--switch-border-radius);
34
+ transition: background-position, background-color, box-shadow, filter;
35
+ transition-timing-function: linear, ease-in-out, ease-in-out, ease-in-out;
36
+ background-repeat: no-repeat;
37
+ background-size: calc(var(--switch-width) * 2 + var(--switch-height)) 100%;
38
+ }
39
+ .ui-Switch:where([data-state='unchecked'])::before {
40
+ transition-duration: 120ms, 140ms, 140ms, 140ms;
41
+ background-position-x: 100%;
42
+ }
43
+ .ui-Switch:where([data-state='checked'])::before {
44
+ transition-duration: 160ms, 140ms, 140ms, 140ms;
45
+ background-position: 0%;
46
+ }
47
+ .ui-Switch:where(:active)::before {
48
+ transition-duration: 30ms;
49
+ }
50
+ .ui-Switch:where(:focus-visible)::before {
51
+ outline: 2px solid var(--focus-8);
52
+ outline-offset: 2px;
53
+ }
54
+ .ui-Switch::before {
55
+ cursor: default;
56
+ }
57
+ .ui-Switch:where([data-disabled])::before {
58
+ cursor: not-allowed;
59
+ }
60
+ .ui-SwitchThumb {
61
+ background-color: white;
62
+ position: absolute;
63
+ left: var(--switch-thumb-inset);
64
+ width: var(--switch-thumb-size);
65
+ height: var(--switch-thumb-size);
66
+ border-radius: calc(var(--switch-border-radius) - var(--switch-thumb-inset));
67
+ transition: transform 140ms cubic-bezier(0.45, 0.05, 0.55, 0.95), box-shadow 140ms ease-in-out;
68
+ }
69
+ .ui-SwitchThumb:where([data-state='checked']) {
70
+ transform: translateX(var(--switch-thumb-translate-x));
71
+ }
72
+ .ui-Switch:where(.r-size-1) {
73
+ --switch-height: var(--space-4);
74
+ --switch-border-radius: max(var(--radius-1), var(--radius-thumb));
75
+ }
76
+ .ui-Switch:where(.r-size-2) {
77
+ --switch-height: calc(var(--space-5) * 5 / 6);
78
+ --switch-border-radius: max(var(--radius-2), var(--radius-thumb));
79
+ }
80
+ .ui-Switch:where(.r-size-3) {
81
+ --switch-height: var(--space-5);
82
+ --switch-border-radius: max(var(--radius-2), var(--radius-thumb));
83
+ }
84
+ .ui-Switch:where(.r-variant-surface)::before {
85
+ background-color: var(--gray-a3);
86
+ background-image: linear-gradient(to right, var(--accent-track) 40%, transparent 60%);
87
+ box-shadow: inset 0 0 0 1px var(--gray-a5);
88
+ }
89
+ .ui-Switch:where(.r-variant-surface):where(:active)::before {
90
+ background-color: var(--gray-a4);
91
+ }
92
+ .ui-Switch:where(.r-variant-surface):where([data-state='checked']:active)::before {
93
+ filter: var(--switch-surface-checked-active-filter);
94
+ }
95
+ .ui-Switch:where(.r-variant-surface):where(.r-high-contrast)::before {
96
+ background-image:
97
+ linear-gradient(to right, var(--switch-high-contrast-checked-color-overlay) 40%, transparent 60%),
98
+ linear-gradient(to right, var(--accent-track) 40%, transparent 60%);
99
+ }
100
+ .ui-Switch:where(.r-variant-surface):where(.r-high-contrast):where([data-state='checked']:active)::before {
101
+ filter: var(--switch-high-contrast-checked-active-before-filter);
102
+ }
103
+ .ui-Switch:where(.r-variant-surface):where([data-disabled]) {
104
+ mix-blend-mode: var(--switch-disabled-blend-mode);
105
+ }
106
+ .ui-Switch:where(.r-variant-surface):where([data-disabled])::before {
107
+ filter: none;
108
+ background-image: none;
109
+ background-color: var(--gray-a3);
110
+ box-shadow: inset 0 0 0 1px var(--gray-a3);
111
+ }
112
+ .ui-Switch:where(.r-variant-surface) .ui-SwitchThumb:where([data-state='unchecked']) {
113
+ box-shadow: 0 0 1px 1px var(--black-a2), 0 1px 1px var(--black-a1), 0 2px 4px -1px var(--black-a1);
114
+ }
115
+ .ui-Switch:where(.r-variant-surface) .ui-SwitchThumb:where([data-state='checked']) {
116
+ box-shadow: 0 1px 3px var(--black-a2), 0 2px 4px -1px var(--black-a1), 0 0 0 1px var(--black-a1),
117
+ 0 0 0 1px var(--accent-a4), -1px 0 1px var(--black-a2);
118
+ }
119
+ .ui-Switch:where(.r-variant-surface):where(.r-high-contrast) .ui-SwitchThumb:where([data-state='checked']) {
120
+ box-shadow: 0 1px 3px var(--black-a2), 0 2px 4px -1px var(--black-a1), 0 0 0 1px var(--black-a2),
121
+ -1px 0 1px var(--black-a2);
122
+ }
123
+ .ui-Switch:where(.r-variant-surface) .ui-SwitchThumb:where([data-disabled]) {
124
+ background-color: var(--gray-2);
125
+ box-shadow: 0 0 0 1px var(--gray-a2), 0 1px 3px var(--black-a1);
126
+ transition: none;
127
+ }
128
+ .ui-Switch:where(.r-variant-soft)::before {
129
+ background-image:
130
+ linear-gradient(to right, var(--accent-a4) 40%, transparent 60%),
131
+ linear-gradient(to right, var(--accent-a4) 40%, transparent 60%),
132
+ linear-gradient(to right, var(--accent-a4) 40%, var(--white-a1) 60%),
133
+ linear-gradient(to right, var(--gray-a2) 40%, var(--gray-a3) 60%);
134
+ }
135
+ .ui-Switch:where(.r-variant-soft):where([data-state='unchecked'])::before {
136
+ background-color: var(--gray-a3);
137
+ }
138
+ .ui-Switch:where(.r-variant-soft):where(:active)::before {
139
+ background-color: var(--gray-a4);
140
+ }
141
+ .ui-Switch:where(.r-variant-soft):where(.r-high-contrast)::before {
142
+ background-image:
143
+ linear-gradient(to right, var(--switch-high-contrast-checked-color-overlay) 40%, transparent 60%),
144
+ linear-gradient(to right, var(--accent-a6) 40%, transparent 60%),
145
+ linear-gradient(to right, var(--accent-a6) 40%, transparent 60%),
146
+ linear-gradient(to right, var(--accent-a6) 40%, var(--white-a1) 60%),
147
+ linear-gradient(to right, var(--accent-a3) 40%, var(--gray-a3) 60%);
148
+ }
149
+ .ui-Switch:where(.r-variant-soft):where(.r-high-contrast):where([data-state='checked']:active)::before {
150
+ filter: var(--switch-high-contrast-checked-active-before-filter);
151
+ }
152
+ .ui-Switch:where(.r-variant-soft):where([data-disabled]) {
153
+ mix-blend-mode: var(--switch-disabled-blend-mode);
154
+ }
155
+ .ui-Switch:where(.r-variant-soft):where([data-disabled])::before {
156
+ filter: none;
157
+ background-image: none;
158
+ background-color: var(--gray-a4);
159
+ }
160
+ .ui-Switch:where(.r-variant-soft) .ui-SwitchThumb {
161
+ filter: saturate(0.45);
162
+ }
163
+ .ui-Switch:where(.r-variant-soft) .ui-SwitchThumb:where([data-state='unchecked']) {
164
+ box-shadow: 0 0 0 1px var(--black-a1), 0 1px 3px var(--black-a1), 0 1px 3px var(--black-a1),
165
+ 0 2px 4px -1px var(--black-a1);
166
+ }
167
+ .ui-Switch:where(.r-variant-soft) .ui-SwitchThumb:where([data-state='checked']) {
168
+ box-shadow: 0 0 0 1px var(--black-a1), 0 1px 3px var(--black-a2), 0 1px 3px var(--accent-a3),
169
+ 0 2px 4px -1px var(--accent-a3);
170
+ }
171
+ .ui-Switch:where(.r-variant-soft) .ui-SwitchThumb:where([data-disabled]) {
172
+ filter: none;
173
+ background-color: var(--gray-2);
174
+ box-shadow: 0 0 0 1px var(--gray-a2), 0 1px 3px var(--black-a1);
175
+ transition: none;
176
+ }