@yarcl/react 0.1.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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/dist/color.d.ts +12 -0
  4. package/dist/color.js +41 -0
  5. package/dist/css.d.ts +10 -0
  6. package/dist/css.js +175 -0
  7. package/dist/define.d.ts +383 -0
  8. package/dist/define.js +29 -0
  9. package/dist/plugin.d.ts +33 -0
  10. package/dist/plugin.js +80 -0
  11. package/package.json +66 -0
  12. package/src/apply.ts +46 -0
  13. package/src/classes.ts +23 -0
  14. package/src/color.ts +48 -0
  15. package/src/components/Accordion.tsx +274 -0
  16. package/src/components/Alert.tsx +85 -0
  17. package/src/components/Badge.tsx +79 -0
  18. package/src/components/Breadcrumb.tsx +239 -0
  19. package/src/components/Button.tsx +58 -0
  20. package/src/components/ButtonGroup.tsx +61 -0
  21. package/src/components/Card.tsx +50 -0
  22. package/src/components/Checkbox.tsx +49 -0
  23. package/src/components/Combobox.tsx +522 -0
  24. package/src/components/CommandPalette.tsx +452 -0
  25. package/src/components/DatePicker.tsx +432 -0
  26. package/src/components/Dialog.tsx +39 -0
  27. package/src/components/Divider.tsx +34 -0
  28. package/src/components/Drawer.tsx +31 -0
  29. package/src/components/Field.tsx +61 -0
  30. package/src/components/Heading.tsx +40 -0
  31. package/src/components/HoverCard.tsx +108 -0
  32. package/src/components/IconButton.tsx +59 -0
  33. package/src/components/Inline.tsx +42 -0
  34. package/src/components/Input.tsx +28 -0
  35. package/src/components/Label.tsx +58 -0
  36. package/src/components/Link.tsx +41 -0
  37. package/src/components/Menu.tsx +207 -0
  38. package/src/components/Modal.tsx +164 -0
  39. package/src/components/NumberInput.tsx +208 -0
  40. package/src/components/Pagination.tsx +227 -0
  41. package/src/components/Popover.tsx +140 -0
  42. package/src/components/Progress.tsx +122 -0
  43. package/src/components/Radio.tsx +59 -0
  44. package/src/components/RadioGroup.tsx +114 -0
  45. package/src/components/Select.tsx +197 -0
  46. package/src/components/Skeleton.tsx +95 -0
  47. package/src/components/Slider.tsx +315 -0
  48. package/src/components/Spinner.tsx +38 -0
  49. package/src/components/Stack.tsx +57 -0
  50. package/src/components/Switch.tsx +42 -0
  51. package/src/components/Table.tsx +99 -0
  52. package/src/components/Tabs.tsx +159 -0
  53. package/src/components/Text.tsx +67 -0
  54. package/src/components/Textarea.tsx +26 -0
  55. package/src/components/Toast.tsx +190 -0
  56. package/src/components/ToggleGroup.tsx +227 -0
  57. package/src/components/Tooltip.tsx +78 -0
  58. package/src/contrast.ts +82 -0
  59. package/src/css.ts +228 -0
  60. package/src/define.check.ts +259 -0
  61. package/src/define.ts +379 -0
  62. package/src/field-context.ts +31 -0
  63. package/src/floating.tsx +61 -0
  64. package/src/hooks.ts +19 -0
  65. package/src/index.ts +119 -0
  66. package/src/plugin.ts +94 -0
  67. package/src/reference/DesignReference.tsx +374 -0
  68. package/src/reference/index.ts +2 -0
  69. package/src/reference/reference.css +58 -0
  70. package/src/runtime.ts +38 -0
  71. package/src/styles.css +1971 -0
  72. package/src/themes/bloom.ts +72 -0
  73. package/src/themes/brutalist.ts +63 -0
  74. package/src/themes/compact.ts +63 -0
  75. package/src/themes/contract.ts +24 -0
  76. package/src/themes/editorial.ts +55 -0
  77. package/src/themes/index.ts +47 -0
  78. package/src/types.ts +69 -0
  79. package/src/yarcl.config.ts +104 -0
package/src/styles.css ADDED
@@ -0,0 +1,1971 @@
1
+ .yarcl-button,
2
+ .yarcl-input,
3
+ .yarcl-textarea {
4
+ box-sizing: border-box;
5
+ font: inherit;
6
+ font-size: var(--yarcl-fs);
7
+ border: var(--yarcl-border-width) solid transparent;
8
+ border-radius: var(--yarcl-r);
9
+ transition-property: background-color, border-color, color;
10
+ transition-duration: var(--yarcl-motion-fast);
11
+ transition-timing-function: var(--yarcl-motion-easing);
12
+ }
13
+
14
+ .yarcl-button,
15
+ .yarcl-input {
16
+ height: var(--yarcl-h);
17
+ padding: 0 var(--yarcl-px);
18
+ line-height: 1;
19
+ }
20
+
21
+ /* Focus ring: one rule for every focusable element, from focusRing in the config */
22
+
23
+ :where(
24
+ .yarcl-button,
25
+ .yarcl-input,
26
+ .yarcl-textarea,
27
+ .yarcl-checkbox-input,
28
+ .yarcl-radio-input,
29
+ .yarcl-switch-input,
30
+ .yarcl-slider-thumb,
31
+ .yarcl-link,
32
+ .yarcl-breadcrumb-ellipsis,
33
+ .yarcl-breadcrumb-text,
34
+ .yarcl-modal-close,
35
+ .yarcl-toast-close,
36
+ .yarcl-toast-action,
37
+ .yarcl-badge-remove,
38
+ .yarcl-alert-dismiss,
39
+ .yarcl-tabs-trigger,
40
+ .yarcl-tabs-panel,
41
+ .yarcl-date-picker-nav,
42
+ .yarcl-date-picker-day,
43
+ .yarcl-accordion-trigger
44
+ ):focus-visible {
45
+ outline: var(--yarcl-focus-width) var(--yarcl-focus-style) var(--yarcl-focus-color);
46
+ outline-offset: var(--yarcl-focus-offset);
47
+ }
48
+
49
+ .yarcl-combobox-control:has(> .yarcl-combobox-input:focus-visible) {
50
+ outline: var(--yarcl-focus-width) var(--yarcl-focus-style) var(--yarcl-focus-color);
51
+ outline-offset: var(--yarcl-focus-offset);
52
+ }
53
+
54
+ :where(.yarcl-tabs-trigger, .yarcl-tabs-panel, .yarcl-accordion-trigger):focus-visible {
55
+ outline-offset: calc(var(--yarcl-focus-width) * -1);
56
+ }
57
+
58
+ /* Button */
59
+
60
+ .yarcl-button {
61
+ display: inline-flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ gap: 0.5em;
65
+ white-space: nowrap;
66
+ color: var(--yarcl-v-fg);
67
+ background: var(--yarcl-v-bg);
68
+ border-color: var(--yarcl-v-border);
69
+ cursor: pointer;
70
+ }
71
+
72
+ .yarcl-button:hover:not(:disabled) {
73
+ background: var(--yarcl-v-bg-hover);
74
+ }
75
+
76
+ .yarcl-button:active:not(:disabled) {
77
+ background: var(--yarcl-v-bg-active);
78
+ }
79
+
80
+ .yarcl-button:disabled {
81
+ opacity: 0.5;
82
+ cursor: not-allowed;
83
+ }
84
+
85
+ .yarcl-button svg {
86
+ flex-shrink: 0;
87
+ width: var(--yarcl-icon);
88
+ height: var(--yarcl-icon);
89
+ }
90
+
91
+ .yarcl-icon-button {
92
+ width: var(--yarcl-h);
93
+ padding: 0;
94
+ }
95
+
96
+ /* Input & Textarea */
97
+
98
+ .yarcl-input,
99
+ .yarcl-textarea {
100
+ color: var(--yarcl-neutral-text);
101
+ background: var(--yarcl-neutral-surface);
102
+ border-color: var(--yarcl-neutral-border);
103
+ }
104
+
105
+ .yarcl-textarea {
106
+ display: block;
107
+ min-height: var(--yarcl-h);
108
+ padding: calc((var(--yarcl-h) - 1.5 * var(--yarcl-fs)) / 2 - var(--yarcl-border-width)) var(--yarcl-px);
109
+ line-height: 1.5;
110
+ resize: vertical;
111
+ }
112
+
113
+ .yarcl-input::placeholder,
114
+ .yarcl-textarea::placeholder {
115
+ color: var(--yarcl-neutral-muted);
116
+ }
117
+
118
+ .yarcl-input:focus-visible,
119
+ .yarcl-textarea:focus-visible {
120
+ border-color: var(--yarcl-c);
121
+ }
122
+
123
+ .yarcl-input[aria-invalid='true'],
124
+ .yarcl-textarea[aria-invalid='true'] {
125
+ border-color: var(--yarcl-error);
126
+ }
127
+
128
+ .yarcl-input:disabled,
129
+ .yarcl-textarea:disabled {
130
+ opacity: 0.5;
131
+ cursor: not-allowed;
132
+ }
133
+
134
+ /* NumberInput */
135
+
136
+ .yarcl-number-input {
137
+ position: relative;
138
+ display: inline-flex;
139
+ --yarcl-stepper-w: calc(var(--yarcl-icon) + var(--yarcl-px) / 2);
140
+ }
141
+
142
+ .yarcl-number-input-field {
143
+ flex: 1;
144
+ width: 100%;
145
+ min-width: 0;
146
+ padding-right: calc(var(--yarcl-px) + var(--yarcl-stepper-w));
147
+ font-variant-numeric: tabular-nums;
148
+ }
149
+
150
+ .yarcl-number-input-steppers {
151
+ position: absolute;
152
+ top: var(--yarcl-border-width);
153
+ right: var(--yarcl-border-width);
154
+ bottom: var(--yarcl-border-width);
155
+ display: flex;
156
+ flex-direction: column;
157
+ width: var(--yarcl-stepper-w);
158
+ overflow: hidden;
159
+ border-left: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
160
+ border-radius: 0 max(0px, var(--yarcl-r) - var(--yarcl-border-width)) max(0px, var(--yarcl-r) - var(--yarcl-border-width)) 0;
161
+ }
162
+
163
+ .yarcl-number-input-stepper {
164
+ display: flex;
165
+ flex: 1;
166
+ align-items: center;
167
+ justify-content: center;
168
+ min-height: 0;
169
+ margin: 0;
170
+ padding: 0;
171
+ color: var(--yarcl-neutral-muted);
172
+ background: none;
173
+ border: 0;
174
+ cursor: pointer;
175
+ transition-property: background-color, color;
176
+ transition-duration: var(--yarcl-motion-fast);
177
+ transition-timing-function: var(--yarcl-motion-easing);
178
+ }
179
+
180
+ .yarcl-number-input-stepper + .yarcl-number-input-stepper {
181
+ border-top: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
182
+ }
183
+
184
+ .yarcl-number-input-stepper:hover:not(:disabled) {
185
+ color: var(--yarcl-c-text);
186
+ background: var(--yarcl-neutral-bg);
187
+ }
188
+
189
+ .yarcl-number-input-stepper:disabled {
190
+ opacity: 0.5;
191
+ cursor: not-allowed;
192
+ }
193
+
194
+ .yarcl-number-input-stepper svg {
195
+ width: calc(var(--yarcl-icon) * 0.75);
196
+ height: calc(var(--yarcl-icon) * 0.75);
197
+ }
198
+
199
+ .yarcl-number-input-increment svg {
200
+ transform: rotate(180deg);
201
+ }
202
+
203
+ /* Checkbox, Radio, Switch */
204
+
205
+ .yarcl-checkbox,
206
+ .yarcl-radio,
207
+ .yarcl-switch {
208
+ display: inline-flex;
209
+ align-items: center;
210
+ gap: 0.5em;
211
+ font-size: var(--yarcl-fs);
212
+ line-height: 1.25;
213
+ color: var(--yarcl-neutral-text);
214
+ cursor: pointer;
215
+ }
216
+
217
+ .yarcl-checkbox:has(:disabled),
218
+ .yarcl-radio:has(:disabled),
219
+ .yarcl-switch:has(:disabled) {
220
+ opacity: 0.5;
221
+ cursor: not-allowed;
222
+ }
223
+
224
+ .yarcl-checkbox-input,
225
+ .yarcl-radio-input,
226
+ .yarcl-switch-input {
227
+ appearance: none;
228
+ position: relative;
229
+ flex-shrink: 0;
230
+ box-sizing: border-box;
231
+ margin: 0;
232
+ cursor: inherit;
233
+ transition-property: background-color, border-color;
234
+ transition-duration: var(--yarcl-motion-fast);
235
+ transition-timing-function: var(--yarcl-motion-easing);
236
+ }
237
+
238
+ .yarcl-checkbox-input,
239
+ .yarcl-radio-input {
240
+ width: var(--yarcl-icon);
241
+ height: var(--yarcl-icon);
242
+ background: var(--yarcl-neutral-surface);
243
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
244
+ }
245
+
246
+ .yarcl-checkbox-input {
247
+ border-radius: 0.25em;
248
+ }
249
+
250
+ .yarcl-radio-input {
251
+ border-radius: 50%;
252
+ }
253
+
254
+ .yarcl-checkbox-input:checked,
255
+ .yarcl-checkbox-input:indeterminate,
256
+ .yarcl-radio-input:checked {
257
+ background: var(--yarcl-c);
258
+ border-color: var(--yarcl-c);
259
+ }
260
+
261
+ .yarcl-checkbox-input::before,
262
+ .yarcl-radio-input::before {
263
+ content: '';
264
+ position: absolute;
265
+ inset: 15%;
266
+ background: var(--yarcl-c-on);
267
+ transform: scale(0);
268
+ transition: transform var(--yarcl-motion-fast) var(--yarcl-motion-easing);
269
+ }
270
+
271
+ .yarcl-checkbox-input::before {
272
+ clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
273
+ }
274
+
275
+ .yarcl-checkbox-input:indeterminate::before {
276
+ clip-path: inset(40% 5%);
277
+ }
278
+
279
+ .yarcl-radio-input::before {
280
+ inset: 25%;
281
+ border-radius: 50%;
282
+ }
283
+
284
+ .yarcl-checkbox-input:checked::before,
285
+ .yarcl-checkbox-input:indeterminate::before,
286
+ .yarcl-radio-input:checked::before {
287
+ transform: scale(1);
288
+ }
289
+
290
+ .yarcl-checkbox-input[aria-invalid='true'] {
291
+ border-color: var(--yarcl-error);
292
+ }
293
+
294
+ .yarcl-switch-input {
295
+ --yarcl-track-h: calc(var(--yarcl-icon) * 1.25);
296
+ --yarcl-thumb: calc(var(--yarcl-track-h) - 4px);
297
+ width: calc(var(--yarcl-track-h) * 1.8);
298
+ height: var(--yarcl-track-h);
299
+ border-radius: 9999px;
300
+ background: color-mix(in oklab, var(--yarcl-neutral-muted) 60%, var(--yarcl-neutral-bg));
301
+ }
302
+
303
+ .yarcl-switch-input::before {
304
+ content: '';
305
+ position: absolute;
306
+ top: 2px;
307
+ left: 2px;
308
+ width: var(--yarcl-thumb);
309
+ height: var(--yarcl-thumb);
310
+ border-radius: 50%;
311
+ background: light-dark(#ffffff, var(--yarcl-neutral-text));
312
+ box-shadow: var(--yarcl-shadow-sm, none);
313
+ transition:
314
+ transform var(--yarcl-motion-fast) var(--yarcl-motion-easing),
315
+ background-color var(--yarcl-motion-fast) var(--yarcl-motion-easing);
316
+ }
317
+
318
+ .yarcl-switch-input:checked {
319
+ background: var(--yarcl-c);
320
+ }
321
+
322
+ .yarcl-switch-input:checked::before {
323
+ background: var(--yarcl-c-on);
324
+ transform: translateX(calc(var(--yarcl-track-h) * 1.8 - var(--yarcl-thumb) - 4px));
325
+ }
326
+
327
+ /* Slider */
328
+
329
+ .yarcl-slider {
330
+ --yarcl-slider-thumb: calc(var(--yarcl-icon) * 1.25);
331
+ --yarcl-slider-track: calc(var(--yarcl-icon) * 0.375);
332
+ position: relative;
333
+ display: flex;
334
+ align-items: center;
335
+ box-sizing: border-box;
336
+ width: 100%;
337
+ height: var(--yarcl-slider-thumb);
338
+ padding-inline: calc(var(--yarcl-slider-thumb) / 2);
339
+ touch-action: none;
340
+ user-select: none;
341
+ cursor: pointer;
342
+ }
343
+
344
+ .yarcl-slider:has([aria-invalid='true']) {
345
+ --yarcl-c: var(--yarcl-error);
346
+ }
347
+
348
+ .yarcl-slider[data-disabled] {
349
+ opacity: 0.5;
350
+ cursor: not-allowed;
351
+ }
352
+
353
+ .yarcl-slider-track {
354
+ position: relative;
355
+ flex: 1;
356
+ height: var(--yarcl-slider-track);
357
+ border-radius: var(--yarcl-r);
358
+ background: color-mix(in oklab, var(--yarcl-neutral-muted) 35%, var(--yarcl-neutral-bg));
359
+ }
360
+
361
+ .yarcl-slider-range {
362
+ position: absolute;
363
+ inset-block: 0;
364
+ inset-inline-start: var(--yarcl-slider-start);
365
+ inset-inline-end: calc(100% - var(--yarcl-slider-end));
366
+ border-radius: inherit;
367
+ background: var(--yarcl-c);
368
+ }
369
+
370
+ .yarcl-slider-thumb {
371
+ position: absolute;
372
+ top: 50%;
373
+ inset-inline-start: var(--yarcl-slider-position);
374
+ box-sizing: border-box;
375
+ width: var(--yarcl-slider-thumb);
376
+ height: var(--yarcl-slider-thumb);
377
+ margin-block-start: calc(var(--yarcl-slider-thumb) / -2);
378
+ margin-inline-start: calc(var(--yarcl-slider-thumb) / -2);
379
+ border: calc(var(--yarcl-border-width) * 2) solid var(--yarcl-c);
380
+ border-radius: var(--yarcl-r);
381
+ background: var(--yarcl-neutral-surface);
382
+ box-shadow: var(--yarcl-shadow-sm, none);
383
+ cursor: grab;
384
+ transition: box-shadow var(--yarcl-motion-fast) var(--yarcl-motion-easing);
385
+ }
386
+
387
+ .yarcl-slider:not([data-disabled]) .yarcl-slider-thumb:hover {
388
+ box-shadow: 0 0 0 calc(var(--yarcl-slider-thumb) / 4) color-mix(in oklab, var(--yarcl-c) 18%, transparent);
389
+ }
390
+
391
+ .yarcl-slider:not([data-disabled]) .yarcl-slider-thumb:active {
392
+ cursor: grabbing;
393
+ }
394
+
395
+ .yarcl-slider[data-disabled] .yarcl-slider-thumb {
396
+ cursor: inherit;
397
+ }
398
+
399
+ @media (prefers-reduced-motion: reduce) {
400
+ .yarcl-slider-thumb {
401
+ transition: none;
402
+ }
403
+ }
404
+
405
+ /* Label */
406
+
407
+ .yarcl-label {
408
+ color: var(--yarcl-neutral-text);
409
+ }
410
+
411
+ .yarcl-label-colored {
412
+ color: var(--yarcl-c-text);
413
+ }
414
+
415
+ .yarcl-label-disabled {
416
+ color: var(--yarcl-neutral-muted);
417
+ }
418
+
419
+ .yarcl-label-required {
420
+ color: var(--yarcl-error);
421
+ }
422
+
423
+ /* Field */
424
+
425
+ .yarcl-field {
426
+ display: grid;
427
+ gap: 0.375rem;
428
+ color: var(--yarcl-neutral-text);
429
+ }
430
+
431
+ .yarcl-field-label {
432
+ color: var(--yarcl-neutral-text);
433
+ }
434
+
435
+ .yarcl-field-description,
436
+ .yarcl-field-error {
437
+ margin: 0;
438
+ }
439
+
440
+ .yarcl-field-description {
441
+ color: var(--yarcl-neutral-muted);
442
+ }
443
+
444
+ .yarcl-field-error {
445
+ color: var(--yarcl-error);
446
+ }
447
+
448
+ @media (prefers-reduced-motion: reduce) {
449
+ .yarcl-button,
450
+ .yarcl-input,
451
+ .yarcl-textarea,
452
+ .yarcl-number-input-stepper,
453
+ .yarcl-checkbox-input,
454
+ .yarcl-radio-input,
455
+ .yarcl-switch-input,
456
+ .yarcl-checkbox-input::before,
457
+ .yarcl-radio-input::before,
458
+ .yarcl-switch-input::before {
459
+ transition: none;
460
+ }
461
+ }
462
+
463
+ /* Text & Heading */
464
+
465
+ .yarcl-heading {
466
+ margin: 0;
467
+ color: var(--yarcl-neutral-text);
468
+ }
469
+
470
+ p.yarcl-text {
471
+ margin: 0;
472
+ }
473
+
474
+ .yarcl-text-colored {
475
+ color: var(--yarcl-c-text);
476
+ }
477
+
478
+ .yarcl-text-muted {
479
+ color: var(--yarcl-neutral-muted);
480
+ }
481
+
482
+ .yarcl-text-truncate {
483
+ display: block;
484
+ overflow: hidden;
485
+ white-space: nowrap;
486
+ text-overflow: ellipsis;
487
+ }
488
+
489
+ .yarcl-text-clamp {
490
+ display: -webkit-box;
491
+ -webkit-box-orient: vertical;
492
+ -webkit-line-clamp: var(--yarcl-lines);
493
+ line-clamp: var(--yarcl-lines);
494
+ overflow: hidden;
495
+ }
496
+
497
+ /* Link */
498
+
499
+ .yarcl-link {
500
+ color: var(--yarcl-c-text);
501
+ text-decoration-thickness: from-font;
502
+ text-underline-offset: 0.2em;
503
+ border-radius: 0.125em;
504
+ }
505
+
506
+ .yarcl-link:hover {
507
+ color: color-mix(in oklab, var(--yarcl-c-text), var(--yarcl-neutral-text) 25%);
508
+ }
509
+
510
+ .yarcl-link-underline-always {
511
+ text-decoration-line: underline;
512
+ }
513
+
514
+ .yarcl-link-underline-hover,
515
+ .yarcl-link-underline-none {
516
+ text-decoration-line: none;
517
+ }
518
+
519
+ .yarcl-link-underline-hover:hover {
520
+ text-decoration-line: underline;
521
+ }
522
+
523
+ /* Breadcrumb */
524
+
525
+ .yarcl-breadcrumb-list {
526
+ display: flex;
527
+ flex-wrap: wrap;
528
+ align-items: center;
529
+ gap: 0.375em;
530
+ margin: 0;
531
+ padding: 0;
532
+ list-style: none;
533
+ }
534
+
535
+ .yarcl-breadcrumb-item {
536
+ display: inline-flex;
537
+ align-items: center;
538
+ gap: 0.375em;
539
+ min-width: 0;
540
+ }
541
+
542
+ .yarcl-breadcrumb .yarcl-breadcrumb-current {
543
+ color: var(--yarcl-neutral-text);
544
+ }
545
+
546
+ .yarcl-breadcrumb-separator {
547
+ display: inline-flex;
548
+ align-items: center;
549
+ color: var(--yarcl-neutral-muted);
550
+ }
551
+
552
+ .yarcl-breadcrumb-separator svg {
553
+ width: 1em;
554
+ height: 1em;
555
+ }
556
+
557
+ .yarcl-breadcrumb-ellipsis {
558
+ display: inline-flex;
559
+ align-items: center;
560
+ padding: 0 0.125em;
561
+ font: inherit;
562
+ line-height: inherit;
563
+ color: var(--yarcl-c-text);
564
+ background: none;
565
+ border: 0;
566
+ border-radius: 0.125em;
567
+ cursor: pointer;
568
+ }
569
+
570
+ .yarcl-breadcrumb-ellipsis:hover {
571
+ background: color-mix(in oklab, var(--yarcl-c) 12%, transparent);
572
+ }
573
+
574
+ /* Stack & Inline */
575
+
576
+ .yarcl-stack,
577
+ .yarcl-inline {
578
+ display: flex;
579
+ margin: 0;
580
+ padding: 0;
581
+ list-style: none;
582
+ }
583
+
584
+ .yarcl-stack {
585
+ flex-direction: column;
586
+ }
587
+
588
+ .yarcl-inline {
589
+ flex-direction: row;
590
+ flex-wrap: wrap;
591
+ }
592
+
593
+ .yarcl-inline-nowrap {
594
+ flex-wrap: nowrap;
595
+ }
596
+
597
+ .yarcl-align-start { align-items: flex-start; }
598
+ .yarcl-align-center { align-items: center; }
599
+ .yarcl-align-end { align-items: flex-end; }
600
+ .yarcl-align-stretch { align-items: stretch; }
601
+ .yarcl-align-baseline { align-items: baseline; }
602
+
603
+ .yarcl-justify-start { justify-content: flex-start; }
604
+ .yarcl-justify-center { justify-content: center; }
605
+ .yarcl-justify-end { justify-content: flex-end; }
606
+ .yarcl-justify-between { justify-content: space-between; }
607
+
608
+ /* Card */
609
+
610
+ .yarcl-card {
611
+ box-sizing: border-box;
612
+ color: var(--yarcl-neutral-text);
613
+ background: var(--yarcl-neutral-surface);
614
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
615
+ border-radius: var(--yarcl-r);
616
+ }
617
+
618
+ /* Divider */
619
+
620
+ .yarcl-divider {
621
+ flex-shrink: 0;
622
+ margin: 0;
623
+ border: 0;
624
+ background: var(--yarcl-neutral-border);
625
+ }
626
+
627
+ .yarcl-divider-horizontal {
628
+ align-self: stretch;
629
+ height: var(--yarcl-border-width);
630
+ }
631
+
632
+ .yarcl-divider-vertical {
633
+ align-self: stretch;
634
+ width: var(--yarcl-border-width);
635
+ height: auto;
636
+ min-height: 1em;
637
+ }
638
+
639
+ /* Floating */
640
+
641
+ @keyframes yarcl-pop {
642
+ from {
643
+ opacity: 0;
644
+ transform: scale(0.97);
645
+ }
646
+ }
647
+
648
+ .yarcl-floating {
649
+ z-index: var(--yarcl-z-dropdown);
650
+ animation: yarcl-pop var(--yarcl-motion-base) var(--yarcl-motion-easing);
651
+ }
652
+
653
+ .yarcl-panel {
654
+ box-sizing: border-box;
655
+ color: var(--yarcl-neutral-text);
656
+ background: var(--yarcl-neutral-surface);
657
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
658
+ border-radius: min(var(--yarcl-r, 0.5rem), 0.75rem);
659
+ box-shadow: var(--yarcl-floating-shadow);
660
+ outline: none;
661
+ }
662
+
663
+ .yarcl-popover,
664
+ .yarcl-hover-card {
665
+ max-width: min(24rem, calc(100vw - 1rem));
666
+ overflow: auto;
667
+ }
668
+
669
+ /* Tooltip */
670
+
671
+ .yarcl-tooltip {
672
+ z-index: var(--yarcl-z-tooltip);
673
+ max-width: 18rem;
674
+ padding: 0.375rem 0.5rem;
675
+ font-size: 0.8125rem;
676
+ line-height: 1.3;
677
+ color: var(--yarcl-neutral-bg);
678
+ background: var(--yarcl-neutral-text);
679
+ border-radius: 0.375rem;
680
+ pointer-events: none;
681
+ }
682
+
683
+ .yarcl-tooltip-arrow {
684
+ fill: var(--yarcl-neutral-text);
685
+ }
686
+
687
+ /* Listbox, Menu, Select, Combobox */
688
+
689
+ .yarcl-listbox {
690
+ display: flex;
691
+ flex-direction: column;
692
+ min-width: 10rem;
693
+ padding: 0.25rem;
694
+ overflow-y: auto;
695
+ font-size: var(--yarcl-fs);
696
+ }
697
+
698
+ .yarcl-option {
699
+ display: flex;
700
+ align-items: center;
701
+ justify-content: space-between;
702
+ gap: 0.5em;
703
+ box-sizing: border-box;
704
+ width: 100%;
705
+ min-height: calc(var(--yarcl-h) - 0.5rem);
706
+ padding: 0 calc(var(--yarcl-px) - 0.25rem);
707
+ font: inherit;
708
+ text-align: left;
709
+ color: inherit;
710
+ background: none;
711
+ border: 0;
712
+ border-radius: min(var(--yarcl-r, 0.375rem), 0.375rem);
713
+ cursor: pointer;
714
+ outline: none;
715
+ user-select: none;
716
+ }
717
+
718
+ .yarcl-option[data-active] {
719
+ color: var(--yarcl-c-on);
720
+ background: var(--yarcl-c);
721
+ }
722
+
723
+ .yarcl-option[data-active] svg {
724
+ color: inherit;
725
+ }
726
+
727
+ .yarcl-option-colored {
728
+ color: var(--yarcl-c-text);
729
+ }
730
+
731
+ .yarcl-option:disabled,
732
+ .yarcl-option[aria-disabled='true'] {
733
+ opacity: 0.5;
734
+ cursor: not-allowed;
735
+ }
736
+
737
+ .yarcl-option svg {
738
+ flex-shrink: 0;
739
+ width: var(--yarcl-icon);
740
+ height: var(--yarcl-icon);
741
+ color: var(--yarcl-c-text);
742
+ }
743
+
744
+ .yarcl-option-label {
745
+ overflow: hidden;
746
+ text-overflow: ellipsis;
747
+ white-space: nowrap;
748
+ }
749
+
750
+ .yarcl-listbox-separator {
751
+ height: var(--yarcl-border-width);
752
+ margin: 0.25rem -0.25rem;
753
+ background: var(--yarcl-neutral-border);
754
+ }
755
+
756
+ .yarcl-listbox-message {
757
+ padding: 0.5rem calc(var(--yarcl-px) - 0.25rem);
758
+ color: var(--yarcl-neutral-muted);
759
+ }
760
+
761
+ .yarcl-select {
762
+ display: inline-flex;
763
+ align-items: center;
764
+ justify-content: space-between;
765
+ gap: 0.5em;
766
+ min-width: 10rem;
767
+ text-align: left;
768
+ cursor: pointer;
769
+ }
770
+
771
+ .yarcl-select[aria-expanded='true'] {
772
+ border-color: var(--yarcl-c);
773
+ }
774
+
775
+ .yarcl-select-value {
776
+ overflow: hidden;
777
+ text-overflow: ellipsis;
778
+ white-space: nowrap;
779
+ }
780
+
781
+ .yarcl-select-placeholder {
782
+ color: var(--yarcl-neutral-muted);
783
+ }
784
+
785
+ .yarcl-select svg {
786
+ flex-shrink: 0;
787
+ width: var(--yarcl-icon);
788
+ height: var(--yarcl-icon);
789
+ color: var(--yarcl-neutral-muted);
790
+ }
791
+
792
+ .yarcl-combobox-control {
793
+ --yarcl-combobox-pad: calc(var(--yarcl-h) * 0.2);
794
+ --yarcl-combobox-row: calc(var(--yarcl-h) - 2 * var(--yarcl-border-width) - 2 * var(--yarcl-combobox-pad));
795
+ display: flex;
796
+ flex-wrap: wrap;
797
+ align-items: center;
798
+ gap: calc(var(--yarcl-combobox-pad) / 2);
799
+ min-width: 10rem;
800
+ height: auto;
801
+ min-height: var(--yarcl-h);
802
+ padding: var(--yarcl-combobox-pad) var(--yarcl-px);
803
+ cursor: text;
804
+ }
805
+
806
+ .yarcl-combobox-control:has(> .yarcl-combobox-chips) {
807
+ padding-inline-start: var(--yarcl-combobox-pad);
808
+ }
809
+
810
+ .yarcl-combobox-control:focus-within {
811
+ border-color: var(--yarcl-c);
812
+ }
813
+
814
+ .yarcl-combobox-control:has(> .yarcl-combobox-input[aria-invalid='true']) {
815
+ border-color: var(--yarcl-error);
816
+ }
817
+
818
+ .yarcl-combobox-control:has(> .yarcl-combobox-input:disabled) {
819
+ opacity: 0.5;
820
+ cursor: not-allowed;
821
+ }
822
+
823
+ .yarcl-combobox-chips {
824
+ display: contents;
825
+ }
826
+
827
+ .yarcl-combobox-chips > li {
828
+ display: flex;
829
+ min-width: 0;
830
+ max-width: 100%;
831
+ }
832
+
833
+ .yarcl-combobox-chips .yarcl-badge {
834
+ height: var(--yarcl-combobox-row);
835
+ padding-block: 0;
836
+ }
837
+
838
+ .yarcl-combobox-chip-label {
839
+ overflow: hidden;
840
+ text-overflow: ellipsis;
841
+ }
842
+
843
+ .yarcl-combobox-input {
844
+ flex: 1 1 4ch;
845
+ min-width: 4ch;
846
+ height: var(--yarcl-combobox-row);
847
+ margin: 0;
848
+ padding: 0;
849
+ font: inherit;
850
+ color: inherit;
851
+ background: none;
852
+ border: 0;
853
+ outline: none;
854
+ }
855
+
856
+ .yarcl-combobox-input::placeholder {
857
+ color: var(--yarcl-neutral-muted);
858
+ }
859
+
860
+ .yarcl-combobox-input:disabled {
861
+ cursor: not-allowed;
862
+ }
863
+
864
+ @media (prefers-reduced-motion: reduce) {
865
+ .yarcl-floating {
866
+ animation: none;
867
+ }
868
+ }
869
+
870
+ /* Dialog & Drawer */
871
+
872
+ @keyframes yarcl-fade {
873
+ from {
874
+ opacity: 0;
875
+ }
876
+ }
877
+
878
+ @keyframes yarcl-slide-right {
879
+ from {
880
+ transform: translateX(100%);
881
+ }
882
+ }
883
+
884
+ @keyframes yarcl-slide-left {
885
+ from {
886
+ transform: translateX(-100%);
887
+ }
888
+ }
889
+
890
+ html:has(.yarcl-modal[open]) {
891
+ overflow: hidden;
892
+ }
893
+
894
+ .yarcl-modal {
895
+ box-sizing: border-box;
896
+ padding: 0;
897
+ color: var(--yarcl-neutral-text);
898
+ background: var(--yarcl-neutral-surface);
899
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
900
+ box-shadow: var(--yarcl-floating-shadow);
901
+ overflow: hidden;
902
+ }
903
+
904
+ .yarcl-modal::backdrop {
905
+ background: rgb(0 0 0 / 0.45);
906
+ animation: yarcl-fade var(--yarcl-motion-base) var(--yarcl-motion-easing);
907
+ }
908
+
909
+ .yarcl-modal[data-yarcl-covered]::backdrop {
910
+ background: transparent;
911
+ }
912
+
913
+ .yarcl-dialog {
914
+ margin: auto;
915
+ width: min(var(--yarcl-modal-width, 32rem), calc(100vw - 2rem));
916
+ max-height: calc(100dvh - 2rem);
917
+ border-radius: min(var(--yarcl-r), 1rem);
918
+ }
919
+
920
+ .yarcl-dialog[open] {
921
+ animation: yarcl-pop var(--yarcl-motion-base) var(--yarcl-motion-easing);
922
+ }
923
+
924
+ .yarcl-drawer {
925
+ width: min(var(--yarcl-modal-width, 24rem), calc(100vw - 3rem));
926
+ max-width: none;
927
+ height: 100dvh;
928
+ max-height: none;
929
+ margin: 0;
930
+ border-radius: 0;
931
+ border-block: 0;
932
+ }
933
+
934
+ .yarcl-drawer-right {
935
+ margin-left: auto;
936
+ border-right: 0;
937
+ }
938
+
939
+ .yarcl-drawer-left {
940
+ margin-right: auto;
941
+ border-left: 0;
942
+ }
943
+
944
+ .yarcl-drawer-right[open] {
945
+ animation: yarcl-slide-right var(--yarcl-motion-base) var(--yarcl-motion-easing);
946
+ }
947
+
948
+ .yarcl-drawer-left[open] {
949
+ animation: yarcl-slide-left var(--yarcl-motion-base) var(--yarcl-motion-easing);
950
+ }
951
+
952
+ .yarcl-modal-content {
953
+ display: flex;
954
+ flex-direction: column;
955
+ max-height: inherit;
956
+ height: 100%;
957
+ }
958
+
959
+ .yarcl-modal-header,
960
+ .yarcl-modal-body,
961
+ .yarcl-modal-footer {
962
+ padding: 0 var(--yarcl-padding);
963
+ }
964
+
965
+ .yarcl-modal-header {
966
+ display: flex;
967
+ align-items: flex-start;
968
+ justify-content: space-between;
969
+ gap: var(--yarcl-gap);
970
+ padding-top: var(--yarcl-padding);
971
+ }
972
+
973
+ .yarcl-modal-heading {
974
+ display: grid;
975
+ gap: 0.25rem;
976
+ }
977
+
978
+ .yarcl-modal-title {
979
+ margin: 0;
980
+ }
981
+
982
+ .yarcl-modal-description {
983
+ margin: 0;
984
+ color: var(--yarcl-neutral-muted);
985
+ }
986
+
987
+ .yarcl-modal-body {
988
+ flex: 1;
989
+ min-height: 0;
990
+ margin-top: var(--yarcl-gap);
991
+ overflow-y: auto;
992
+ }
993
+
994
+ .yarcl-modal-content > :last-child {
995
+ padding-bottom: var(--yarcl-padding);
996
+ }
997
+
998
+ .yarcl-modal-footer {
999
+ display: flex;
1000
+ flex-wrap: wrap;
1001
+ justify-content: flex-end;
1002
+ gap: 0.5rem;
1003
+ margin-top: var(--yarcl-gap);
1004
+ }
1005
+
1006
+ .yarcl-modal-close,
1007
+ .yarcl-toast-close {
1008
+ display: inline-flex;
1009
+ flex-shrink: 0;
1010
+ align-items: center;
1011
+ justify-content: center;
1012
+ width: 2rem;
1013
+ height: 2rem;
1014
+ padding: 0;
1015
+ color: var(--yarcl-neutral-muted);
1016
+ background: none;
1017
+ border: 0;
1018
+ border-radius: 0.375rem;
1019
+ cursor: pointer;
1020
+ }
1021
+
1022
+ .yarcl-modal-close:hover,
1023
+ .yarcl-toast-close:hover {
1024
+ color: var(--yarcl-neutral-text);
1025
+ background: color-mix(in oklab, var(--yarcl-neutral-text) 8%, transparent);
1026
+ }
1027
+
1028
+ .yarcl-modal-close svg,
1029
+ .yarcl-toast-close svg {
1030
+ width: 1.125rem;
1031
+ height: 1.125rem;
1032
+ }
1033
+
1034
+ /* CommandPalette */
1035
+
1036
+ .yarcl-command-palette {
1037
+ margin-top: min(15dvh, 8rem);
1038
+ max-height: calc(100dvh - min(15dvh, 8rem) - 1rem);
1039
+ font-size: var(--yarcl-fs);
1040
+ }
1041
+
1042
+ .yarcl-command-palette-content {
1043
+ display: flex;
1044
+ flex-direction: column;
1045
+ max-height: inherit;
1046
+ }
1047
+
1048
+ .yarcl-command-palette-search {
1049
+ display: flex;
1050
+ flex-shrink: 0;
1051
+ align-items: center;
1052
+ gap: 0.5em;
1053
+ padding: 0 var(--yarcl-px);
1054
+ color: var(--yarcl-neutral-muted);
1055
+ border-bottom: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1056
+ transition: border-color var(--yarcl-motion-fast) var(--yarcl-motion-easing);
1057
+ }
1058
+
1059
+ .yarcl-command-palette-search:focus-within {
1060
+ border-bottom-color: var(--yarcl-c);
1061
+ }
1062
+
1063
+ .yarcl-command-palette-search svg {
1064
+ flex-shrink: 0;
1065
+ width: var(--yarcl-icon);
1066
+ height: var(--yarcl-icon);
1067
+ }
1068
+
1069
+ .yarcl-command-palette-input {
1070
+ flex: 1;
1071
+ min-width: 0;
1072
+ height: calc(var(--yarcl-h) + 0.5rem);
1073
+ padding: 0;
1074
+ font: inherit;
1075
+ color: var(--yarcl-neutral-text);
1076
+ background: none;
1077
+ border: 0;
1078
+ outline: none;
1079
+ }
1080
+
1081
+ .yarcl-command-palette-input::placeholder {
1082
+ color: var(--yarcl-neutral-muted);
1083
+ }
1084
+
1085
+ .yarcl-command-palette-list {
1086
+ gap: 0.25rem;
1087
+ max-height: min(24rem, 60dvh);
1088
+ overscroll-behavior: contain;
1089
+ }
1090
+
1091
+ .yarcl-command-palette-group {
1092
+ display: flex;
1093
+ flex-direction: column;
1094
+ }
1095
+
1096
+ .yarcl-command-palette-heading {
1097
+ padding: 0.375rem calc(var(--yarcl-px) - 0.25rem) 0.25rem;
1098
+ font-size: 0.8125em;
1099
+ font-weight: 600;
1100
+ color: var(--yarcl-neutral-muted);
1101
+ user-select: none;
1102
+ }
1103
+
1104
+ .yarcl-command-palette-item {
1105
+ display: flex;
1106
+ align-items: center;
1107
+ gap: 0.625em;
1108
+ min-width: 0;
1109
+ }
1110
+
1111
+ .yarcl-command-palette-shortcut {
1112
+ display: inline-flex;
1113
+ flex-shrink: 0;
1114
+ gap: 0.25em;
1115
+ font-size: 0.8125em;
1116
+ color: var(--yarcl-neutral-muted);
1117
+ }
1118
+
1119
+ .yarcl-command-palette-shortcut kbd {
1120
+ box-sizing: border-box;
1121
+ min-width: 1.75em;
1122
+ padding: 0.125em 0.375em;
1123
+ font: inherit;
1124
+ line-height: 1.2;
1125
+ text-align: center;
1126
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1127
+ border-radius: min(var(--yarcl-r), 0.25rem);
1128
+ }
1129
+
1130
+ .yarcl-option[data-active] .yarcl-command-palette-shortcut {
1131
+ color: inherit;
1132
+ }
1133
+
1134
+ .yarcl-option[data-active] .yarcl-command-palette-shortcut kbd {
1135
+ border-color: color-mix(in oklab, currentColor 45%, transparent);
1136
+ }
1137
+
1138
+ .yarcl-command-palette-empty {
1139
+ padding-block: 1.25rem;
1140
+ text-align: center;
1141
+ }
1142
+
1143
+ .yarcl-command-palette-empty:empty {
1144
+ display: none;
1145
+ }
1146
+
1147
+ /* Toast */
1148
+
1149
+ @keyframes yarcl-toast-in {
1150
+ from {
1151
+ opacity: 0;
1152
+ transform: translateY(0.5rem);
1153
+ }
1154
+ }
1155
+
1156
+ .yarcl-toaster {
1157
+ position: fixed;
1158
+ inset: auto;
1159
+ display: flex;
1160
+ flex-direction: column;
1161
+ gap: 0.5rem;
1162
+ width: min(22rem, calc(100vw - 2rem));
1163
+ margin: 0;
1164
+ padding: 0;
1165
+ overflow: visible;
1166
+ background: transparent;
1167
+ border: 0;
1168
+ }
1169
+
1170
+ .yarcl-toaster:not(:popover-open) {
1171
+ display: none;
1172
+ }
1173
+
1174
+ .yarcl-toaster-top-left,
1175
+ .yarcl-toaster-top-center,
1176
+ .yarcl-toaster-top-right {
1177
+ top: 1rem;
1178
+ }
1179
+
1180
+ .yarcl-toaster-bottom-left,
1181
+ .yarcl-toaster-bottom-center,
1182
+ .yarcl-toaster-bottom-right {
1183
+ bottom: 1rem;
1184
+ }
1185
+
1186
+ .yarcl-toaster-top-left,
1187
+ .yarcl-toaster-bottom-left {
1188
+ left: 1rem;
1189
+ }
1190
+
1191
+ .yarcl-toaster-top-right,
1192
+ .yarcl-toaster-bottom-right {
1193
+ right: 1rem;
1194
+ }
1195
+
1196
+ .yarcl-toaster-top-center,
1197
+ .yarcl-toaster-bottom-center {
1198
+ left: 50%;
1199
+ translate: -50% 0;
1200
+ }
1201
+
1202
+ .yarcl-toast {
1203
+ display: flex;
1204
+ align-items: flex-start;
1205
+ gap: 0.75rem;
1206
+ box-sizing: border-box;
1207
+ padding: 0.75rem 0.5rem 0.75rem 1rem;
1208
+ font-size: 0.875rem;
1209
+ line-height: 1.4;
1210
+ color: var(--yarcl-neutral-text);
1211
+ background: var(--yarcl-neutral-surface);
1212
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1213
+ border-left: 0.25rem solid var(--yarcl-c);
1214
+ border-radius: 0.5rem;
1215
+ box-shadow: var(--yarcl-floating-shadow);
1216
+ animation: yarcl-toast-in var(--yarcl-motion-base) var(--yarcl-motion-easing);
1217
+ }
1218
+
1219
+ .yarcl-toast-text {
1220
+ flex: 1;
1221
+ min-width: 0;
1222
+ padding-top: 0.25rem;
1223
+ }
1224
+
1225
+ .yarcl-toast-title {
1226
+ font-weight: 600;
1227
+ }
1228
+
1229
+ .yarcl-toast-description {
1230
+ color: var(--yarcl-neutral-muted);
1231
+ }
1232
+
1233
+ .yarcl-toast-action {
1234
+ flex-shrink: 0;
1235
+ align-self: center;
1236
+ padding: 0.375rem 0.625rem;
1237
+ font: inherit;
1238
+ font-weight: 600;
1239
+ color: var(--yarcl-c-text);
1240
+ background: color-mix(in oklab, var(--yarcl-c) 12%, transparent);
1241
+ border: 0;
1242
+ border-radius: 0.375rem;
1243
+ cursor: pointer;
1244
+ }
1245
+
1246
+ .yarcl-toast-action:hover {
1247
+ background: color-mix(in oklab, var(--yarcl-c) 20%, transparent);
1248
+ }
1249
+
1250
+ /* Tabs */
1251
+
1252
+ .yarcl-tabs-list {
1253
+ display: flex;
1254
+ gap: 0.25rem;
1255
+ overflow-x: auto;
1256
+ border-bottom: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1257
+ }
1258
+
1259
+ .yarcl-tabs-trigger {
1260
+ flex-shrink: 0;
1261
+ height: var(--yarcl-h);
1262
+ padding: 0 var(--yarcl-px);
1263
+ margin-bottom: calc(var(--yarcl-border-width) * -1);
1264
+ font: inherit;
1265
+ font-size: var(--yarcl-fs);
1266
+ font-weight: 500;
1267
+ color: var(--yarcl-neutral-muted);
1268
+ white-space: nowrap;
1269
+ background: none;
1270
+ border: 0;
1271
+ border-bottom: 2px solid transparent;
1272
+ cursor: pointer;
1273
+ transition: color var(--yarcl-motion-fast) var(--yarcl-motion-easing),
1274
+ border-color var(--yarcl-motion-fast) var(--yarcl-motion-easing);
1275
+ }
1276
+
1277
+ .yarcl-tabs-trigger:hover:not(:disabled) {
1278
+ color: var(--yarcl-neutral-text);
1279
+ }
1280
+
1281
+ .yarcl-tabs-trigger[aria-selected='true'] {
1282
+ color: var(--yarcl-neutral-text);
1283
+ border-bottom-color: var(--yarcl-c);
1284
+ }
1285
+
1286
+ .yarcl-tabs-trigger:disabled {
1287
+ opacity: 0.5;
1288
+ cursor: not-allowed;
1289
+ }
1290
+
1291
+ .yarcl-tabs-panel {
1292
+ padding-top: var(--yarcl-gap);
1293
+ }
1294
+
1295
+ /* Accordion */
1296
+
1297
+ .yarcl-accordion {
1298
+ overflow: hidden;
1299
+ color: var(--yarcl-neutral-text);
1300
+ background: var(--yarcl-neutral-surface);
1301
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1302
+ border-radius: var(--yarcl-r);
1303
+ }
1304
+
1305
+ .yarcl-accordion-item + .yarcl-accordion-item {
1306
+ border-top: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1307
+ }
1308
+
1309
+ .yarcl-accordion-heading {
1310
+ margin: 0;
1311
+ font: inherit;
1312
+ }
1313
+
1314
+ .yarcl-accordion-trigger {
1315
+ display: flex;
1316
+ align-items: center;
1317
+ gap: 0.5em;
1318
+ box-sizing: border-box;
1319
+ width: 100%;
1320
+ min-height: var(--yarcl-h);
1321
+ padding: 0 var(--yarcl-px);
1322
+ font: inherit;
1323
+ font-size: var(--yarcl-fs);
1324
+ font-weight: 500;
1325
+ text-align: start;
1326
+ color: inherit;
1327
+ background: none;
1328
+ border: 0;
1329
+ cursor: pointer;
1330
+ transition: background-color var(--yarcl-motion-fast) var(--yarcl-motion-easing);
1331
+ }
1332
+
1333
+ .yarcl-accordion-trigger:hover:not(:disabled) {
1334
+ background: color-mix(in oklab, var(--yarcl-neutral-text) 4%, transparent);
1335
+ }
1336
+
1337
+ .yarcl-accordion-trigger:disabled {
1338
+ opacity: 0.5;
1339
+ cursor: not-allowed;
1340
+ }
1341
+
1342
+ .yarcl-accordion-label {
1343
+ flex: 1;
1344
+ }
1345
+
1346
+ .yarcl-accordion-trigger svg {
1347
+ flex-shrink: 0;
1348
+ width: var(--yarcl-icon);
1349
+ height: var(--yarcl-icon);
1350
+ color: var(--yarcl-neutral-muted);
1351
+ transition: transform var(--yarcl-motion-base) var(--yarcl-motion-easing),
1352
+ color var(--yarcl-motion-fast) var(--yarcl-motion-easing);
1353
+ }
1354
+
1355
+ .yarcl-accordion-trigger[aria-expanded='true'] svg {
1356
+ color: var(--yarcl-c);
1357
+ transform: rotate(180deg);
1358
+ }
1359
+
1360
+ .yarcl-accordion-content {
1361
+ display: grid;
1362
+ grid-template-rows: 0fr;
1363
+ visibility: hidden;
1364
+ font-size: var(--yarcl-fs);
1365
+ transition: grid-template-rows var(--yarcl-motion-base) var(--yarcl-motion-easing),
1366
+ visibility var(--yarcl-motion-base) var(--yarcl-motion-easing);
1367
+ }
1368
+
1369
+ .yarcl-accordion-content[data-state='open'] {
1370
+ grid-template-rows: 1fr;
1371
+ visibility: visible;
1372
+ }
1373
+
1374
+ .yarcl-accordion-body {
1375
+ min-height: 0;
1376
+ padding: 0 var(--yarcl-px);
1377
+ overflow: hidden;
1378
+ }
1379
+
1380
+ .yarcl-accordion-body::before,
1381
+ .yarcl-accordion-body::after {
1382
+ content: '';
1383
+ display: block;
1384
+ height: calc(var(--yarcl-focus-width) + var(--yarcl-focus-offset));
1385
+ }
1386
+
1387
+ .yarcl-accordion-body::after {
1388
+ height: var(--yarcl-px);
1389
+ }
1390
+
1391
+ /* Table */
1392
+
1393
+ .yarcl-table-wrap {
1394
+ overflow-x: auto;
1395
+ border: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1396
+ border-radius: 0.5rem;
1397
+ }
1398
+
1399
+ .yarcl-table {
1400
+ width: 100%;
1401
+ border-collapse: separate;
1402
+ border-spacing: 0;
1403
+ font-size: var(--yarcl-cell-fs);
1404
+ color: var(--yarcl-neutral-text);
1405
+ background: var(--yarcl-neutral-surface);
1406
+ }
1407
+
1408
+ .yarcl-table-caption {
1409
+ padding: var(--yarcl-cell-py) var(--yarcl-cell-px);
1410
+ font-weight: 600;
1411
+ text-align: start;
1412
+ caption-side: top;
1413
+ border-bottom: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1414
+ }
1415
+
1416
+ .yarcl-table th,
1417
+ .yarcl-table td {
1418
+ padding: var(--yarcl-cell-py) var(--yarcl-cell-px);
1419
+ border-bottom: var(--yarcl-border-width) solid var(--yarcl-neutral-border);
1420
+ }
1421
+
1422
+ .yarcl-table tbody tr:last-child > * {
1423
+ border-bottom: 0;
1424
+ }
1425
+
1426
+ .yarcl-table th {
1427
+ font-weight: 600;
1428
+ color: var(--yarcl-neutral-muted);
1429
+ white-space: nowrap;
1430
+ background: color-mix(in oklab, var(--yarcl-neutral-text) 3%, var(--yarcl-neutral-surface));
1431
+ }
1432
+
1433
+ .yarcl-table-striped tbody tr:nth-child(even) {
1434
+ background: color-mix(in oklab, var(--yarcl-neutral-text) 3%, transparent);
1435
+ }
1436
+
1437
+ .yarcl-table-interactive tbody tr:hover {
1438
+ background: color-mix(in oklab, var(--yarcl-neutral-text) 6%, transparent);
1439
+ }
1440
+
1441
+ .yarcl-cell-start {
1442
+ text-align: start;
1443
+ }
1444
+
1445
+ .yarcl-cell-center {
1446
+ text-align: center;
1447
+ }
1448
+
1449
+ .yarcl-cell-end {
1450
+ text-align: end;
1451
+ font-variant-numeric: tabular-nums;
1452
+ }
1453
+
1454
+ @media (prefers-reduced-motion: reduce) {
1455
+ .yarcl-modal[open],
1456
+ .yarcl-modal::backdrop,
1457
+ .yarcl-toast,
1458
+ .yarcl-tabs-trigger,
1459
+ .yarcl-accordion-trigger,
1460
+ .yarcl-accordion-trigger svg,
1461
+ .yarcl-accordion-content {
1462
+ animation: none;
1463
+ transition: none;
1464
+ }
1465
+ }
1466
+
1467
+ /* Spinner */
1468
+
1469
+ @keyframes yarcl-spin {
1470
+ to {
1471
+ transform: rotate(360deg);
1472
+ }
1473
+ }
1474
+
1475
+ .yarcl-spinner {
1476
+ display: inline-block;
1477
+ flex-shrink: 0;
1478
+ box-sizing: border-box;
1479
+ width: var(--yarcl-icon, 1em);
1480
+ height: var(--yarcl-icon, 1em);
1481
+ border: max(2px, calc(var(--yarcl-icon, 1em) / 8)) solid currentColor;
1482
+ border-right-color: transparent;
1483
+ border-radius: 50%;
1484
+ vertical-align: middle;
1485
+ animation: yarcl-spin 0.7s linear infinite;
1486
+ }
1487
+
1488
+ .yarcl-spinner-colored {
1489
+ color: var(--yarcl-c);
1490
+ }
1491
+
1492
+ /* Badge */
1493
+
1494
+ .yarcl-badge {
1495
+ display: inline-flex;
1496
+ align-items: center;
1497
+ gap: 0.25em;
1498
+ box-sizing: border-box;
1499
+ max-width: 100%;
1500
+ padding: 0.125em 0.5em;
1501
+ font-size: calc(var(--yarcl-fs) * 0.85);
1502
+ font-weight: 500;
1503
+ line-height: 1.4;
1504
+ white-space: nowrap;
1505
+ vertical-align: middle;
1506
+ color: var(--yarcl-v-fg);
1507
+ background: var(--yarcl-v-bg);
1508
+ border: var(--yarcl-border-width) solid var(--yarcl-v-border);
1509
+ border-radius: var(--yarcl-r);
1510
+ }
1511
+
1512
+ .yarcl-badge-remove {
1513
+ display: inline-flex;
1514
+ align-items: center;
1515
+ justify-content: center;
1516
+ width: 1.1em;
1517
+ height: 1.1em;
1518
+ margin-right: -0.25em;
1519
+ padding: 0;
1520
+ color: inherit;
1521
+ background: none;
1522
+ border: 0;
1523
+ border-radius: 50%;
1524
+ cursor: pointer;
1525
+ opacity: 0.7;
1526
+ }
1527
+
1528
+ .yarcl-badge-remove:hover {
1529
+ opacity: 1;
1530
+ background: color-mix(in oklab, currentColor 15%, transparent);
1531
+ }
1532
+
1533
+ .yarcl-badge-remove:focus-visible {
1534
+ opacity: 1;
1535
+ }
1536
+
1537
+ .yarcl-badge-remove svg {
1538
+ width: 0.8em;
1539
+ height: 0.8em;
1540
+ }
1541
+
1542
+ /* Alert */
1543
+
1544
+ .yarcl-alert {
1545
+ display: flex;
1546
+ align-items: flex-start;
1547
+ gap: 0.75rem;
1548
+ box-sizing: border-box;
1549
+ padding: 0.875rem 1rem;
1550
+ font-size: 0.875rem;
1551
+ line-height: 1.5;
1552
+ color: var(--yarcl-v-fg);
1553
+ background: var(--yarcl-v-bg);
1554
+ border: var(--yarcl-border-width) solid var(--yarcl-v-border);
1555
+ border-radius: min(var(--yarcl-r), 0.75rem);
1556
+ }
1557
+
1558
+ .yarcl-alert-icon {
1559
+ display: inline-flex;
1560
+ flex-shrink: 0;
1561
+ margin-top: 0.125rem;
1562
+ }
1563
+
1564
+ .yarcl-alert-icon svg {
1565
+ width: 1.125rem;
1566
+ height: 1.125rem;
1567
+ }
1568
+
1569
+ .yarcl-alert-text {
1570
+ flex: 1;
1571
+ min-width: 0;
1572
+ }
1573
+
1574
+ .yarcl-alert-title {
1575
+ font-weight: 600;
1576
+ }
1577
+
1578
+ .yarcl-alert-action {
1579
+ flex-shrink: 0;
1580
+ align-self: center;
1581
+ }
1582
+
1583
+ .yarcl-alert-dismiss {
1584
+ display: inline-flex;
1585
+ flex-shrink: 0;
1586
+ align-items: center;
1587
+ justify-content: center;
1588
+ width: 1.75rem;
1589
+ height: 1.75rem;
1590
+ margin: -0.25rem -0.5rem -0.25rem 0;
1591
+ padding: 0;
1592
+ color: inherit;
1593
+ background: none;
1594
+ border: 0;
1595
+ border-radius: 0.375rem;
1596
+ cursor: pointer;
1597
+ opacity: 0.7;
1598
+ }
1599
+
1600
+ .yarcl-alert-dismiss:hover {
1601
+ opacity: 1;
1602
+ background: color-mix(in oklab, currentColor 12%, transparent);
1603
+ }
1604
+
1605
+ .yarcl-alert-dismiss:focus-visible {
1606
+ opacity: 1;
1607
+ }
1608
+
1609
+ .yarcl-alert-dismiss svg {
1610
+ width: 1rem;
1611
+ height: 1rem;
1612
+ }
1613
+
1614
+ /* Skeleton */
1615
+
1616
+ @keyframes yarcl-pulse {
1617
+ 50% {
1618
+ opacity: 0.45;
1619
+ }
1620
+ }
1621
+
1622
+ .yarcl-skeleton {
1623
+ display: block;
1624
+ background: color-mix(in oklab, var(--yarcl-neutral-text) 10%, transparent);
1625
+ animation: yarcl-pulse 1.6s ease-in-out infinite;
1626
+ }
1627
+
1628
+ .yarcl-skeleton-text {
1629
+ display: block;
1630
+ }
1631
+
1632
+ .yarcl-skeleton-line {
1633
+ height: 0.8em;
1634
+ margin: calc((1lh - 0.8em) / 2) 0;
1635
+ border-radius: 0.25em;
1636
+ }
1637
+
1638
+ .yarcl-skeleton-line:last-child:not(:first-child) {
1639
+ width: 60%;
1640
+ }
1641
+
1642
+ .yarcl-skeleton-control {
1643
+ height: var(--yarcl-h);
1644
+ border-radius: var(--yarcl-r);
1645
+ }
1646
+
1647
+ .yarcl-skeleton-circle {
1648
+ width: var(--yarcl-h);
1649
+ height: var(--yarcl-h);
1650
+ border-radius: 50%;
1651
+ }
1652
+
1653
+ .yarcl-skeleton-rect {
1654
+ border-radius: var(--yarcl-r);
1655
+ }
1656
+
1657
+ @media (prefers-reduced-motion: reduce) {
1658
+ .yarcl-spinner {
1659
+ animation-duration: 1.5s;
1660
+ }
1661
+
1662
+ .yarcl-skeleton {
1663
+ animation: none;
1664
+ }
1665
+ }
1666
+
1667
+ /* Progress */
1668
+
1669
+ @keyframes yarcl-progress-slide {
1670
+ from {
1671
+ inset-inline-start: -40%;
1672
+ }
1673
+ to {
1674
+ inset-inline-start: 100%;
1675
+ }
1676
+ }
1677
+
1678
+ .yarcl-progress {
1679
+ display: grid;
1680
+ gap: 0.375em;
1681
+ min-width: 0;
1682
+ font-size: var(--yarcl-fs);
1683
+ line-height: 1.25;
1684
+ color: var(--yarcl-neutral-text);
1685
+ }
1686
+
1687
+ .yarcl-progress-header {
1688
+ display: flex;
1689
+ align-items: baseline;
1690
+ justify-content: space-between;
1691
+ gap: 0.5em;
1692
+ }
1693
+
1694
+ .yarcl-progress-value {
1695
+ margin-inline-start: auto;
1696
+ font-variant-numeric: tabular-nums;
1697
+ }
1698
+
1699
+ .yarcl-progress-track {
1700
+ position: relative;
1701
+ overflow: hidden;
1702
+ height: calc(var(--yarcl-icon) / 2);
1703
+ border-radius: var(--yarcl-r, 0);
1704
+ background: color-mix(in oklab, var(--yarcl-neutral-text) 12%, transparent);
1705
+ }
1706
+
1707
+ .yarcl-progress-bar {
1708
+ position: absolute;
1709
+ inset-block: 0;
1710
+ inset-inline-start: 0;
1711
+ width: calc(var(--yarcl-progress, 0) * 100%);
1712
+ border-radius: inherit;
1713
+ background: var(--yarcl-c);
1714
+ transition: width var(--yarcl-motion-base) var(--yarcl-motion-easing);
1715
+ }
1716
+
1717
+ .yarcl-progress[data-indeterminate] .yarcl-progress-bar {
1718
+ width: 40%;
1719
+ transition: none;
1720
+ animation: yarcl-progress-slide 1.4s var(--yarcl-motion-easing) infinite;
1721
+ }
1722
+
1723
+ @media (prefers-reduced-motion: reduce) {
1724
+ .yarcl-progress-bar {
1725
+ transition: none;
1726
+ }
1727
+
1728
+ .yarcl-progress[data-indeterminate] .yarcl-progress-bar {
1729
+ inset-inline-start: 0;
1730
+ width: 100%;
1731
+ animation: yarcl-pulse 1.6s ease-in-out infinite;
1732
+ }
1733
+ }
1734
+
1735
+ /* RadioGroup */
1736
+
1737
+ .yarcl-radio-group {
1738
+ min-width: 0;
1739
+ margin: 0;
1740
+ padding: 0;
1741
+ border: 0;
1742
+ }
1743
+
1744
+ .yarcl-radio-group > legend {
1745
+ padding: 0;
1746
+ margin-bottom: 0.375rem;
1747
+ }
1748
+
1749
+ .yarcl-radio-group-options {
1750
+ display: flex;
1751
+ gap: 0.5rem 1rem;
1752
+ }
1753
+
1754
+ .yarcl-radio-group-vertical {
1755
+ flex-direction: column;
1756
+ align-items: flex-start;
1757
+ }
1758
+
1759
+ .yarcl-radio-group-horizontal {
1760
+ flex-wrap: wrap;
1761
+ }
1762
+
1763
+ .yarcl-radio-input[aria-invalid='true'] {
1764
+ border-color: var(--yarcl-error);
1765
+ }
1766
+
1767
+ /* ButtonGroup & ToggleGroup */
1768
+
1769
+ .yarcl-button-group {
1770
+ display: inline-flex;
1771
+ gap: 0.5rem;
1772
+ }
1773
+
1774
+ .yarcl-button-group-vertical {
1775
+ flex-direction: column;
1776
+ align-items: stretch;
1777
+ }
1778
+
1779
+ .yarcl-button-group:not(.yarcl-button-group-attached) {
1780
+ flex-wrap: wrap;
1781
+ }
1782
+
1783
+ .yarcl-button-group-attached {
1784
+ gap: 0;
1785
+ }
1786
+
1787
+ .yarcl-button-group-attached > .yarcl-button {
1788
+ position: relative;
1789
+ }
1790
+
1791
+ .yarcl-button-group-attached > .yarcl-button:hover,
1792
+ .yarcl-button-group-attached > .yarcl-button:focus-visible,
1793
+ .yarcl-button-group-attached > .yarcl-button[aria-pressed='true'] {
1794
+ z-index: 1;
1795
+ }
1796
+
1797
+ .yarcl-button-group-attached.yarcl-button-group-horizontal > .yarcl-button:not(:first-child) {
1798
+ margin-inline-start: calc(var(--yarcl-border-width) * -1);
1799
+ border-start-start-radius: 0;
1800
+ border-end-start-radius: 0;
1801
+ }
1802
+
1803
+ .yarcl-button-group-attached.yarcl-button-group-horizontal > .yarcl-button:not(:last-child) {
1804
+ border-start-end-radius: 0;
1805
+ border-end-end-radius: 0;
1806
+ }
1807
+
1808
+ .yarcl-button-group-attached.yarcl-button-group-vertical > .yarcl-button:not(:first-child) {
1809
+ margin-block-start: calc(var(--yarcl-border-width) * -1);
1810
+ border-start-start-radius: 0;
1811
+ border-start-end-radius: 0;
1812
+ }
1813
+
1814
+ .yarcl-button-group-attached.yarcl-button-group-vertical > .yarcl-button:not(:last-child) {
1815
+ border-end-start-radius: 0;
1816
+ border-end-end-radius: 0;
1817
+ }
1818
+
1819
+ .yarcl-button-group-attached.yarcl-button-group-horizontal > .yarcl-button:not(:first-child) {
1820
+ border-inline-start-color: color-mix(in oklab, var(--yarcl-v-border), var(--yarcl-v-fg) 30%);
1821
+ }
1822
+
1823
+ .yarcl-button-group-attached.yarcl-button-group-vertical > .yarcl-button:not(:first-child) {
1824
+ border-block-start-color: color-mix(in oklab, var(--yarcl-v-border), var(--yarcl-v-fg) 30%);
1825
+ }
1826
+
1827
+ /* Pagination */
1828
+
1829
+ .yarcl-pagination {
1830
+ display: flex;
1831
+ max-width: 100%;
1832
+ }
1833
+
1834
+ .yarcl-pagination-page {
1835
+ min-width: var(--yarcl-h);
1836
+ padding-inline: calc(var(--yarcl-px) / 2);
1837
+ font-variant-numeric: tabular-nums;
1838
+ }
1839
+
1840
+ .yarcl-pagination-ellipsis {
1841
+ width: var(--yarcl-h);
1842
+ padding: 0;
1843
+ cursor: default;
1844
+ user-select: none;
1845
+ }
1846
+
1847
+ .yarcl-button-group:not(.yarcl-button-group-attached) > .yarcl-pagination-ellipsis {
1848
+ color: var(--yarcl-neutral-muted);
1849
+ background: none;
1850
+ border-color: transparent;
1851
+ }
1852
+
1853
+ .yarcl-pagination .yarcl-button[aria-disabled='true'] {
1854
+ opacity: 0.5;
1855
+ cursor: not-allowed;
1856
+ }
1857
+
1858
+ .yarcl-pagination .yarcl-button[aria-disabled='true']:hover,
1859
+ .yarcl-pagination .yarcl-button[aria-disabled='true']:active,
1860
+ .yarcl-button-group-attached > .yarcl-pagination-ellipsis:hover {
1861
+ background: var(--yarcl-v-bg);
1862
+ }
1863
+
1864
+ /* DatePicker */
1865
+
1866
+ .yarcl-popover.yarcl-date-picker-panel {
1867
+ max-width: calc(100vw - 1rem);
1868
+ padding: calc(var(--yarcl-px) * 0.75);
1869
+ font-size: var(--yarcl-fs);
1870
+ }
1871
+
1872
+ .yarcl-date-picker-header {
1873
+ display: flex;
1874
+ align-items: center;
1875
+ justify-content: space-between;
1876
+ gap: 0.5em;
1877
+ margin-bottom: 0.5em;
1878
+ }
1879
+
1880
+ .yarcl-date-picker-title {
1881
+ font-weight: 600;
1882
+ text-align: center;
1883
+ }
1884
+
1885
+ .yarcl-date-picker-nav {
1886
+ display: inline-flex;
1887
+ align-items: center;
1888
+ justify-content: center;
1889
+ width: calc(var(--yarcl-h) * 0.875);
1890
+ height: calc(var(--yarcl-h) * 0.875);
1891
+ padding: 0;
1892
+ color: var(--yarcl-neutral-text);
1893
+ background: none;
1894
+ border: 0;
1895
+ border-radius: min(var(--yarcl-r, 0.375rem), 0.375rem);
1896
+ cursor: pointer;
1897
+ }
1898
+
1899
+ .yarcl-date-picker-nav:hover:not([aria-disabled='true']),
1900
+ .yarcl-date-picker-day:hover:not([aria-disabled='true'], [data-selected]) {
1901
+ background: color-mix(in oklab, var(--yarcl-c) 12%, transparent);
1902
+ }
1903
+
1904
+ .yarcl-date-picker-nav[aria-disabled='true'] {
1905
+ opacity: 0.4;
1906
+ cursor: not-allowed;
1907
+ }
1908
+
1909
+ .yarcl-date-picker-nav svg {
1910
+ width: var(--yarcl-icon);
1911
+ height: var(--yarcl-icon);
1912
+ }
1913
+
1914
+ .yarcl-date-picker-grid {
1915
+ border-collapse: separate;
1916
+ border-spacing: 0 0.125rem;
1917
+ }
1918
+
1919
+ .yarcl-date-picker-grid th {
1920
+ height: calc(var(--yarcl-h) * 0.75);
1921
+ padding: 0;
1922
+ font-weight: 500;
1923
+ color: var(--yarcl-neutral-muted);
1924
+ text-align: center;
1925
+ }
1926
+
1927
+ .yarcl-date-picker-grid td {
1928
+ width: calc(var(--yarcl-h) * 0.875);
1929
+ height: calc(var(--yarcl-h) * 0.875);
1930
+ padding: 0;
1931
+ text-align: center;
1932
+ }
1933
+
1934
+ .yarcl-date-picker-day {
1935
+ box-sizing: border-box;
1936
+ color: var(--yarcl-neutral-text);
1937
+ border: var(--yarcl-border-width) solid transparent;
1938
+ border-radius: var(--yarcl-r);
1939
+ font-variant-numeric: tabular-nums;
1940
+ cursor: pointer;
1941
+ user-select: none;
1942
+ transition-property: background-color, color;
1943
+ transition-duration: var(--yarcl-motion-fast);
1944
+ transition-timing-function: var(--yarcl-motion-easing);
1945
+ }
1946
+
1947
+ .yarcl-date-picker-day[aria-current='date'] {
1948
+ font-weight: 700;
1949
+ color: var(--yarcl-c-text);
1950
+ text-decoration: underline;
1951
+ text-underline-offset: 0.25em;
1952
+ }
1953
+
1954
+ .yarcl-date-picker-day[data-selected],
1955
+ .yarcl-date-picker-day[data-in-range] {
1956
+ color: var(--yarcl-v-fg);
1957
+ background: var(--yarcl-v-bg);
1958
+ border-color: var(--yarcl-v-border);
1959
+ }
1960
+
1961
+ .yarcl-date-picker-day[aria-disabled='true'] {
1962
+ opacity: 0.4;
1963
+ text-decoration: line-through;
1964
+ cursor: not-allowed;
1965
+ }
1966
+
1967
+ @media (prefers-reduced-motion: reduce) {
1968
+ .yarcl-date-picker-day {
1969
+ transition: none;
1970
+ }
1971
+ }