@godxjp/ui 21.0.0 → 23.0.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 (154) hide show
  1. package/README.md +4 -4
  2. package/dist/app/app-provider.js +2 -1
  3. package/dist/components/data-display/badge.d.ts +28 -1
  4. package/dist/components/data-display/badge.js +2 -0
  5. package/dist/components/data-display/data-table.d.ts +18 -2
  6. package/dist/components/data-display/data-table.js +4 -0
  7. package/dist/components/data-display/index.d.ts +1 -1
  8. package/dist/components/data-display/popover.d.ts +19 -1
  9. package/dist/components/data-display/popover.js +9 -1
  10. package/dist/components/data-display/progress.d.ts +37 -0
  11. package/dist/components/data-display/progress.js +57 -5
  12. package/dist/components/data-display/scroll-area.d.ts +24 -4
  13. package/dist/components/data-display/scroll-area.js +34 -72
  14. package/dist/components/data-entry/cascader.js +8 -6
  15. package/dist/components/data-entry/checkbox.js +2 -0
  16. package/dist/components/data-entry/choice-hit-target.d.ts +24 -0
  17. package/dist/components/data-entry/choice-hit-target.js +12 -0
  18. package/dist/components/data-entry/control-surface.d.ts +8 -0
  19. package/dist/components/data-entry/control-surface.js +10 -1
  20. package/dist/components/data-entry/date-picker.d.ts +10 -3
  21. package/dist/components/data-entry/date-picker.js +503 -238
  22. package/dist/components/data-entry/form-field.d.ts +1 -1
  23. package/dist/components/data-entry/form-field.js +7 -3
  24. package/dist/components/data-entry/form.js +10 -1
  25. package/dist/components/data-entry/index.d.ts +0 -6
  26. package/dist/components/data-entry/index.js +0 -6
  27. package/dist/components/data-entry/label.d.ts +14 -1
  28. package/dist/components/data-entry/label.js +6 -1
  29. package/dist/components/data-entry/radio.d.ts +27 -6
  30. package/dist/components/data-entry/radio.js +89 -43
  31. package/dist/components/data-entry/search-select.js +226 -89
  32. package/dist/components/data-entry/select.d.ts +76 -14
  33. package/dist/components/data-entry/select.js +497 -163
  34. package/dist/components/data-entry/slider.d.ts +3 -11
  35. package/dist/components/data-entry/slider.js +582 -93
  36. package/dist/components/data-entry/switch.d.ts +6 -3
  37. package/dist/components/data-entry/switch.js +36 -11
  38. package/dist/components/layout/mobile-shell.d.ts +1 -1
  39. package/dist/components/layout/mobile-shell.js +2 -0
  40. package/dist/components/navigation/dropdown-menu.d.ts +11 -3
  41. package/dist/components/navigation/dropdown-menu.js +190 -15
  42. package/dist/components/navigation/index.d.ts +0 -3
  43. package/dist/components/navigation/index.js +0 -78
  44. package/dist/components/navigation/steps.d.ts +1 -1
  45. package/dist/components/navigation/steps.js +3 -1
  46. package/dist/components/navigation/tabs-scroll.d.ts +27 -0
  47. package/dist/components/navigation/tabs-scroll.js +52 -1
  48. package/dist/components/navigation/tabs.d.ts +2 -2
  49. package/dist/components/navigation/tabs.js +88 -23
  50. package/dist/components/ui/index.d.ts +0 -4
  51. package/dist/components/ui/index.js +0 -4
  52. package/dist/components/ui/input-otp.d.ts +1 -1
  53. package/dist/components/ui/segmented.d.ts +15 -1
  54. package/dist/components/ui/segmented.js +15 -6
  55. package/dist/components/ui/tag-input.js +3 -5
  56. package/dist/i18n/messages/en.json +3 -2
  57. package/dist/i18n/messages/ja.json +3 -2
  58. package/dist/i18n/messages/vi.json +3 -2
  59. package/dist/lib/datetime/picker-format.d.ts +18 -0
  60. package/dist/lib/datetime/picker-format.js +35 -1
  61. package/dist/lib/field-a11y.d.ts +12 -0
  62. package/dist/lib/field-a11y.js +14 -1
  63. package/dist/lib/select-options.d.ts +21 -0
  64. package/dist/lib/select-options.js +46 -0
  65. package/dist/props/components/data-display.prop.d.ts +16 -6
  66. package/dist/props/components/data-entry.prop.d.ts +503 -129
  67. package/dist/props/components/index.d.ts +2 -2
  68. package/dist/props/components/layout.prop.d.ts +12 -1
  69. package/dist/props/components/navigation.prop.d.ts +93 -1
  70. package/dist/props/registry.d.ts +79 -16
  71. package/dist/props/registry.js +85 -15
  72. package/dist/props/vocabulary/data.prop.d.ts +12 -0
  73. package/dist/props/vocabulary/index.d.ts +2 -2
  74. package/dist/props/vocabulary/layout.prop.d.ts +11 -0
  75. package/dist/styles/badge-layout.css +4 -0
  76. package/dist/styles/card-layout.css +6 -6
  77. package/dist/styles/control.css +220 -29
  78. package/dist/styles/data-display-layout.css +94 -23
  79. package/dist/styles/focus-ring.css +6 -4
  80. package/dist/styles/fonts.css +88 -4
  81. package/dist/styles/navigation-layout.css +36 -236
  82. package/dist/styles/shell-layout.css +149 -139
  83. package/dist/styles/table-layout.css +41 -3
  84. package/dist/tokens/components/control.css +4 -0
  85. package/dist/tokens/components/data-display.css +9 -5
  86. package/dist/tokens/components/navigation.css +9 -5
  87. package/dist/tokens/components/scroll-area.css +7 -0
  88. package/dist/tokens/components/segmented.css +0 -2
  89. package/dist/tokens/components/shell.css +2 -0
  90. package/dist/tokens/components/table.css +3 -0
  91. package/dist/tokens/foundation.css +7 -0
  92. package/docs/COMPONENTS.md +14 -14
  93. package/docs/CONSUMER-RULES.md +24 -1
  94. package/docs/CUSTOMER-THEMING.md +7 -1
  95. package/docs/FRAME-COVERAGE-REPORT.md +5 -11
  96. package/docs/TOKENS.md +65 -0
  97. package/docs/data-display/badge.tsx +37 -0
  98. package/docs/data-display/data-table/index.tsx +45 -1
  99. package/docs/data-display/popover.tsx +43 -5
  100. package/docs/data-display/progress.tsx +28 -0
  101. package/docs/data-display/scroll-area.tsx +51 -45
  102. package/docs/data-entry/calendar.tsx +2 -2
  103. package/docs/data-entry/date-picker.tsx +144 -5
  104. package/docs/data-entry/form/examples/invoice-form.tsx +2 -2
  105. package/docs/data-entry/form-field/examples/a11y-contract.tsx +3 -5
  106. package/docs/data-entry/form.tsx +4 -4
  107. package/docs/data-entry/input-otp.tsx +5 -2
  108. package/docs/data-entry/number-input.tsx +31 -0
  109. package/docs/data-entry/segmented.tsx +143 -2
  110. package/docs/data-entry/select-matrix.tsx +1 -2
  111. package/docs/data-entry/select.tsx +108 -3
  112. package/docs/data-entry/slider.tsx +125 -47
  113. package/docs/feedback/dialog.tsx +1 -2
  114. package/docs/feedback/sheet.tsx +1 -2
  115. package/docs/layout/app-shell-states.tsx +143 -0
  116. package/docs/layout/mobile-shell.tsx +5 -0
  117. package/docs/navigation/dropdown-menu.tsx +75 -4
  118. package/docs/navigation/tabs.tsx +149 -0
  119. package/docs/roadmap/antd-parity.md +35 -34
  120. package/docs/roadmap/parity-audit-data-entry.md +196 -172
  121. package/docs/roadmap/parity-audit-layout-navigation-general.md +304 -310
  122. package/docs/roadmap/parity-backlog.md +8 -10
  123. package/docs/showcase/acme-portal.tsx +7 -0
  124. package/package.json +28 -64
  125. package/scripts/ui-audit.mjs +18 -5
  126. package/scripts/visual-audit-rules.mjs +0 -7
  127. package/scripts/visual-audit.mjs +6 -27
  128. package/dist/components/data-entry/date-range-picker.d.ts +0 -11
  129. package/dist/components/data-entry/date-range-picker.js +0 -349
  130. package/dist/components/data-entry/month-picker.d.ts +0 -10
  131. package/dist/components/data-entry/month-picker.js +0 -241
  132. package/dist/components/data-entry/month-range-picker.d.ts +0 -10
  133. package/dist/components/data-entry/month-range-picker.js +0 -301
  134. package/dist/components/navigation/context-menu.d.ts +0 -21
  135. package/dist/components/navigation/context-menu.js +0 -149
  136. package/dist/components/navigation/menubar.d.ts +0 -21
  137. package/dist/components/navigation/menubar.js +0 -136
  138. package/dist/components/navigation/navigation-menu.d.ts +0 -10
  139. package/dist/components/navigation/navigation-menu.js +0 -91
  140. package/dist/components/ui/context-menu.d.ts +0 -1
  141. package/dist/components/ui/context-menu.js +0 -2
  142. package/dist/components/ui/date-range-picker.d.ts +0 -1
  143. package/dist/components/ui/date-range-picker.js +0 -2
  144. package/dist/components/ui/menubar.d.ts +0 -1
  145. package/dist/components/ui/menubar.js +0 -2
  146. package/dist/components/ui/navigation-menu.d.ts +0 -1
  147. package/dist/components/ui/navigation-menu.js +0 -2
  148. package/docs/FRAME-A11Y-CI.md +0 -349
  149. package/docs/data-entry/date-range-picker.tsx +0 -175
  150. package/docs/data-entry/month-picker.tsx +0 -101
  151. package/docs/data-entry/month-range-picker.tsx +0 -115
  152. package/docs/navigation/context-menu.tsx +0 -128
  153. package/docs/navigation/menubar.tsx +0 -141
  154. package/docs/navigation/navigation-menu.tsx +0 -158
@@ -375,6 +375,22 @@
375
375
  line-height: 0;
376
376
  }
377
377
 
378
+ .ui-choice-input {
379
+ position: absolute;
380
+ inset: 0;
381
+ display: block;
382
+ }
383
+
384
+ .ui-choice-input > input {
385
+ position: absolute;
386
+ inset: 0;
387
+ inline-size: 100%;
388
+ block-size: 100%;
389
+ margin: 0;
390
+ cursor: inherit;
391
+ opacity: 0;
392
+ }
393
+
378
394
  .ui-choice-content {
379
395
  display: grid;
380
396
  gap: var(--choice-description-gap);
@@ -402,6 +418,8 @@
402
418
 
403
419
  .ui-checkbox,
404
420
  .ui-radio {
421
+
422
+ position: relative;
405
423
  width: var(--checkbox-size);
406
424
  height: var(--checkbox-size);
407
425
  flex-shrink: 0;
@@ -420,7 +438,7 @@
420
438
 
421
439
  .ui-checkbox:disabled,
422
440
  .ui-radio:disabled,
423
- .ui-slider-thumb:disabled,
441
+ .ui-slider-thumb[data-disabled],
424
442
  .ui-switch:disabled,
425
443
  .ui-checkbox[data-disabled],
426
444
  .ui-radio[data-disabled],
@@ -452,7 +470,7 @@
452
470
  fill: currentColor;
453
471
  }
454
472
 
455
- .ui-switch[aria-invalid="true"] {
473
+ .ui-switch:has(input[aria-invalid="true"]) {
456
474
  --tw-ring-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
457
475
  box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
458
476
  }
@@ -463,6 +481,8 @@
463
481
  }
464
482
 
465
483
  .ui-switch {
484
+
485
+ position: relative;
466
486
  display: inline-flex;
467
487
  width: var(--switch-width);
468
488
  height: var(--switch-height);
@@ -502,32 +522,80 @@
502
522
  .ui-slider {
503
523
  position: relative;
504
524
  display: flex;
505
- width: 100%;
525
+ inline-size: 100%;
506
526
  touch-action: none;
507
527
  user-select: none;
508
528
  align-items: center;
509
529
  }
510
530
 
531
+ .ui-slider[data-orientation="vertical"] {
532
+
533
+ inline-size: fit-content;
534
+ block-size: 100%;
535
+ min-block-size: var(--slider-vertical-min-block-size);
536
+ flex-direction: column;
537
+ }
538
+
539
+ .ui-slider-control {
540
+ position: relative;
541
+ display: flex;
542
+ flex-grow: 1;
543
+ align-self: stretch;
544
+ align-items: center;
545
+ block-size: var(--slider-thumb-size);
546
+ }
547
+
548
+ .ui-slider[data-orientation="vertical"] .ui-slider-control {
549
+ flex-direction: column;
550
+ align-self: center;
551
+ inline-size: var(--slider-thumb-size);
552
+ block-size: auto;
553
+ }
554
+
511
555
  .ui-slider-track {
512
556
  position: relative;
513
- height: var(--slider-track-height);
514
- width: 100%;
515
557
  flex-grow: 1;
516
- overflow: hidden;
558
+ align-self: center;
559
+ block-size: var(--slider-track-height);
517
560
  border-radius: var(--radius-pill);
518
561
  background: var(--slider-track-background, hsl(var(--primary) / 0.2));
519
562
  }
520
563
 
564
+ .ui-slider[data-orientation="vertical"] .ui-slider-track {
565
+ inline-size: var(--slider-track-height);
566
+ block-size: auto;
567
+ }
568
+
521
569
  .ui-slider-range {
522
570
  position: absolute;
523
- height: 100%;
571
+ inset-block: 0;
572
+ inset-inline-start: var(--slider-range-start, 0%);
573
+ inline-size: var(--slider-range-size, 0%);
574
+ border-radius: inherit;
524
575
  background: var(--slider-range-background, hsl(var(--primary)));
525
576
  }
526
577
 
578
+ .ui-slider[data-orientation="vertical"] .ui-slider-range {
579
+ inset-block-start: auto;
580
+ inset-block-end: var(--slider-range-start, 0%);
581
+ inset-inline: 0;
582
+ inline-size: auto;
583
+ block-size: var(--slider-range-size, 0%);
584
+ }
585
+
586
+ .ui-slider-range[data-draggable="true"] {
587
+ cursor: grab;
588
+ }
589
+
527
590
  .ui-slider-thumb {
591
+ position: absolute;
592
+ inset-block-start: 50%;
593
+ inset-inline-start: var(--slider-thumb-offset, 0%);
528
594
  display: block;
529
- width: var(--slider-thumb-size);
530
- height: var(--slider-thumb-size);
595
+ inline-size: var(--slider-thumb-size);
596
+ block-size: var(--slider-thumb-size);
597
+ margin-block-start: calc(var(--slider-thumb-size) / -2);
598
+ margin-inline-start: calc(var(--slider-thumb-size) / -2);
531
599
  border: 1px solid hsl(var(--primary) / 0.5);
532
600
  border-radius: var(--radius-pill);
533
601
  background: hsl(var(--background));
@@ -539,6 +607,14 @@
539
607
  box-shadow 150ms;
540
608
  }
541
609
 
610
+ .ui-slider[data-orientation="vertical"] .ui-slider-thumb {
611
+ inset-block-start: auto;
612
+ inset-block-end: var(--slider-thumb-offset, 0%);
613
+ inset-inline-start: 50%;
614
+ margin-block-start: 0;
615
+ margin-block-end: calc(var(--slider-thumb-size) / -2);
616
+ }
617
+
542
618
  .ui-color-picker {
543
619
  display: flex;
544
620
  align-items: center;
@@ -988,8 +1064,12 @@
988
1064
  }
989
1065
 
990
1066
  .ui-segmented {
1067
+
1068
+ --segmented-item-height: calc(var(--control-height) - var(--segmented-track-padding) * 2);
991
1069
  display: inline-flex;
992
1070
  max-width: 100%;
1071
+
1072
+ flex-wrap: wrap;
993
1073
  align-items: stretch;
994
1074
  padding: var(--segmented-track-padding);
995
1075
  border-radius: var(--segmented-track-radius);
@@ -999,6 +1079,8 @@
999
1079
  }
1000
1080
 
1001
1081
  .ui-segmented-item {
1082
+
1083
+ position: relative;
1002
1084
  display: inline-flex;
1003
1085
  min-width: 0;
1004
1086
  height: var(--segmented-item-height);
@@ -1091,7 +1173,8 @@
1091
1173
  background: hsl(var(--secondary));
1092
1174
  color: hsl(var(--secondary-foreground));
1093
1175
  }
1094
- .ui-tag-input-remove {
1176
+ .ui-tag-input-remove,
1177
+ .ui-search-select-value-remove {
1095
1178
 
1096
1179
  display: inline-flex;
1097
1180
  align-items: center;
@@ -1106,10 +1189,12 @@
1106
1189
  color: inherit;
1107
1190
  opacity: 0.7;
1108
1191
  }
1109
- .ui-tag-input-remove:hover {
1192
+ .ui-tag-input-remove:hover,
1193
+ .ui-search-select-value-remove:hover {
1110
1194
  opacity: 1;
1111
1195
  }
1112
- .ui-tag-input-remove svg {
1196
+ .ui-tag-input-remove svg,
1197
+ .ui-search-select-value-remove svg {
1113
1198
  width: 0.75rem;
1114
1199
  height: 0.75rem;
1115
1200
  }
@@ -1222,14 +1307,15 @@
1222
1307
  font-size: var(--font-size-base);
1223
1308
  pointer-events: none;
1224
1309
  }
1225
- .ui-number-input-affix:first-of-type {
1310
+
1311
+ [data-slot="number-input-prefix"] {
1226
1312
  inset-inline-start: var(--control-padding-x);
1227
1313
  }
1228
1314
 
1229
- .ui-number-input:has(.ui-number-input-affix:first-of-type) .ui-number-input-field {
1315
+ .ui-number-input:has([data-slot="number-input-prefix"]) .ui-number-input-field {
1230
1316
  padding-inline-start: calc(var(--control-padding-x) + 1.25rem);
1231
1317
  }
1232
- .ui-number-input-affix:last-of-type {
1318
+ [data-slot="number-input-suffix"] {
1233
1319
  inset-inline-end: calc(var(--control-height) + var(--space-2));
1234
1320
  }
1235
1321
  .ui-number-input-steppers {
@@ -1346,6 +1432,7 @@
1346
1432
  }
1347
1433
 
1348
1434
  .ui-search-select-list {
1435
+ max-block-size: var(--search-select-list-max-height);
1349
1436
  max-block-size: none;
1350
1437
  min-block-size: 0;
1351
1438
  flex: 1 1 0%;
@@ -1542,11 +1629,21 @@
1542
1629
 
1543
1630
  @layer components {
1544
1631
 
1632
+ .ui-select-root {
1633
+ display: contents;
1634
+ }
1635
+
1545
1636
  .ui-select-content {
1546
1637
  position: relative;
1547
1638
  z-index: var(--overlay-z-index);
1639
+ display: flex;
1640
+ flex-direction: column;
1548
1641
  max-height: var(--select-content-max-height);
1549
- min-width: var(--menu-content-min-width);
1642
+
1643
+ min-width: max(
1644
+ var(--menu-content-min-width),
1645
+ var(--trigger-width, var(--menu-content-min-width))
1646
+ );
1550
1647
  overflow: hidden;
1551
1648
  border-radius: var(--radius-md);
1552
1649
  border: 1px solid hsl(var(--border));
@@ -1555,13 +1652,21 @@
1555
1652
  box-shadow: var(--shadow-md);
1556
1653
  }
1557
1654
 
1655
+ .ui-select-content[data-popup-match="content"] {
1656
+ min-width: var(--menu-content-min-width);
1657
+ }
1658
+
1558
1659
  .ui-select-content[data-popup-match="fixed"] {
1559
1660
  min-width: var(--select-content-inline-size);
1560
1661
  width: var(--select-content-inline-size);
1561
1662
  }
1562
1663
 
1563
1664
  .ui-select-viewport {
1665
+ min-block-size: 0;
1666
+ max-block-size: var(--select-content-max-height);
1667
+ overflow-y: auto;
1564
1668
  padding: var(--menu-content-space-inset);
1669
+ outline: none;
1565
1670
  }
1566
1671
 
1567
1672
  .ui-select-empty {
@@ -1646,6 +1751,19 @@
1646
1751
  flex-shrink: 0;
1647
1752
  opacity: var(--control-affix-rest-alpha);
1648
1753
  }
1754
+
1755
+ .ui-select-prefix,
1756
+ .ui-select-suffix {
1757
+ display: inline-flex;
1758
+ flex-shrink: 0;
1759
+ align-items: center;
1760
+ color: hsl(var(--muted-foreground));
1761
+ }
1762
+
1763
+ .ui-select-trigger-prefixed > [data-slot="select-value"] {
1764
+ flex: 1 1 auto;
1765
+ text-align: start;
1766
+ }
1649
1767
  }
1650
1768
 
1651
1769
  @layer components {
@@ -2407,6 +2525,11 @@
2407
2525
  gap: var(--month-picker-grid-space-gap);
2408
2526
  }
2409
2527
 
2528
+ .ui-month-picker-row,
2529
+ .ui-month-picker-gridcell {
2530
+ display: contents;
2531
+ }
2532
+
2410
2533
  .ui-month-picker-cell {
2411
2534
  padding-inline: var(--month-picker-cell-space-inline);
2412
2535
  font-weight: var(--font-weight-normal);
@@ -2660,7 +2783,7 @@
2660
2783
  order: 1;
2661
2784
  }
2662
2785
 
2663
- .ui-slider[data-has-marks="true"] {
2786
+ .ui-slider[data-has-marks="true"]:not([data-orientation="vertical"]) {
2664
2787
  margin-block-end: calc(var(--slider-mark-space-block-start) + var(--font-size-lg));
2665
2788
  }
2666
2789
 
@@ -2672,13 +2795,35 @@
2672
2795
  block-size: 0;
2673
2796
  }
2674
2797
 
2798
+ .ui-slider[data-orientation="vertical"] .ui-slider-marks {
2799
+ inset-block: 0;
2800
+ inset-inline-start: 100%;
2801
+ inset-inline-end: auto;
2802
+ margin-block-start: 0;
2803
+ margin-inline-start: var(--slider-mark-space-block-start);
2804
+ inline-size: 0;
2805
+ block-size: auto;
2806
+ }
2807
+
2675
2808
  .ui-slider-mark {
2676
2809
  position: absolute;
2677
2810
  inset-inline-start: var(--slider-mark-offset-inline, 0%);
2678
- transform: translateX(-50%);
2811
+ display: flex;
2812
+ justify-content: center;
2813
+ inline-size: 0;
2679
2814
  font-size: var(--slider-mark-font-size);
2680
2815
  color: hsl(var(--slider-mark-color));
2681
2816
  white-space: nowrap;
2817
+ cursor: pointer;
2818
+ }
2819
+
2820
+ .ui-slider[data-orientation="vertical"] .ui-slider-mark {
2821
+ inset-inline-start: 0;
2822
+ inset-block-end: var(--slider-mark-offset-block, 0%);
2823
+ align-items: center;
2824
+ justify-content: flex-start;
2825
+ inline-size: auto;
2826
+ block-size: 0;
2682
2827
  }
2683
2828
 
2684
2829
  .ui-slider-dot {
@@ -2687,35 +2832,78 @@
2687
2832
  inset-inline-start: var(--slider-mark-offset-inline, 0%);
2688
2833
  inline-size: var(--slider-dot-size);
2689
2834
  block-size: var(--slider-dot-size);
2690
- transform: translate(-50%, -50%);
2835
+ margin-block-start: calc(var(--slider-dot-size) / -2);
2836
+ margin-inline-start: calc(var(--slider-dot-size) / -2);
2691
2837
  border-radius: var(--radius-pill);
2692
2838
  background: hsl(var(--slider-dot-background));
2693
2839
  border: var(--control-border-width) solid hsl(var(--slider-dot-border-color));
2694
2840
  }
2695
2841
 
2842
+ .ui-slider[data-orientation="vertical"] .ui-slider-dot {
2843
+ inset-block-start: auto;
2844
+ inset-block-end: var(--slider-mark-offset-block, 0%);
2845
+ inset-inline-start: 50%;
2846
+ margin-block-start: 0;
2847
+ margin-block-end: calc(var(--slider-dot-size) / -2);
2848
+ }
2849
+
2696
2850
  .ui-slider-dot[data-active="true"] {
2697
2851
  border-color: hsl(var(--slider-dot-active-border-color));
2698
2852
  }
2699
2853
 
2700
2854
  .ui-slider-tooltip {
2701
2855
  position: absolute;
2702
- inset-block-end: 100%;
2856
+ display: flex;
2857
+ align-items: center;
2858
+ justify-content: center;
2859
+ pointer-events: none;
2860
+ opacity: 0;
2861
+ transition: opacity 150ms;
2862
+ }
2863
+
2864
+ .ui-slider-tooltip[data-placement="top"],
2865
+ .ui-slider-tooltip[data-placement="bottom"] {
2703
2866
  inset-inline-start: 50%;
2704
- transform: translateX(-50%);
2705
- margin-block-end: var(--slider-tooltip-offset-block);
2867
+ inline-size: 0;
2868
+ }
2869
+
2870
+ .ui-slider-tooltip[data-placement="top"] {
2871
+ inset-block-end: 100%;
2872
+ padding-block-end: var(--slider-tooltip-offset-block);
2873
+ }
2874
+
2875
+ .ui-slider-tooltip[data-placement="bottom"] {
2876
+ inset-block-start: 100%;
2877
+ padding-block-start: var(--slider-tooltip-offset-block);
2878
+ }
2879
+
2880
+ .ui-slider-tooltip[data-placement="left"],
2881
+ .ui-slider-tooltip[data-placement="right"] {
2882
+ inset-block-start: 50%;
2883
+ block-size: 0;
2884
+ }
2885
+
2886
+ .ui-slider-tooltip[data-placement="left"] {
2887
+ inset-inline-end: 100%;
2888
+ padding-inline-end: var(--slider-tooltip-offset-block);
2889
+ }
2890
+
2891
+ .ui-slider-tooltip[data-placement="right"] {
2892
+ inset-inline-start: 100%;
2893
+ padding-inline-start: var(--slider-tooltip-offset-block);
2894
+ }
2895
+
2896
+ .ui-slider-tooltip-content {
2706
2897
  padding-inline: var(--slider-tooltip-padding-inline);
2707
2898
  border-radius: var(--slider-tooltip-radius);
2708
2899
  background: hsl(var(--slider-tooltip-background));
2709
2900
  color: hsl(var(--slider-tooltip-color));
2710
2901
  font-size: var(--slider-tooltip-font-size);
2711
2902
  white-space: nowrap;
2712
- opacity: 0;
2713
- pointer-events: none;
2714
- transition: opacity 150ms;
2715
2903
  }
2716
2904
 
2717
- .ui-slider-thumb:hover .ui-slider-tooltip,
2718
- .ui-slider-thumb:focus-visible .ui-slider-tooltip,
2905
+ .ui-slider-thumb:is([data-hovered], [data-focus-visible], [data-dragging])
2906
+ .ui-slider-tooltip:not([data-open="false"]),
2719
2907
  .ui-slider-tooltip[data-open="true"] {
2720
2908
  opacity: 1;
2721
2909
  }
@@ -2747,6 +2935,8 @@
2747
2935
  }
2748
2936
 
2749
2937
  .ui-radio-button {
2938
+
2939
+ position: relative;
2750
2940
  display: inline-flex;
2751
2941
  align-items: center;
2752
2942
  justify-content: center;
@@ -2782,7 +2972,7 @@
2782
2972
  border-color: hsl(var(--choice-button-solid-background));
2783
2973
  }
2784
2974
 
2785
- .ui-radio-button:disabled {
2975
+ .ui-radio-button[data-disabled] {
2786
2976
  cursor: not-allowed;
2787
2977
  opacity: var(--disabled-opacity);
2788
2978
  }
@@ -2792,7 +2982,7 @@
2792
2982
  inline-size: 100%;
2793
2983
  }
2794
2984
 
2795
- .ui-segmented[data-block="true"] > .ui-segmented-item {
2985
+ .ui-segmented[data-block="true"]:not([data-orientation="vertical"]) > .ui-segmented-item {
2796
2986
  flex: 1 1 0;
2797
2987
  min-inline-size: 0;
2798
2988
  justify-content: center;
@@ -2803,6 +2993,7 @@
2803
2993
  }
2804
2994
 
2805
2995
  .ui-segmented[data-orientation="vertical"] > .ui-segmented-item {
2996
+ block-size: var(--control-height);
2806
2997
  justify-content: flex-start;
2807
2998
  }
2808
2999
 
@@ -143,7 +143,7 @@
143
143
  }
144
144
 
145
145
  .ui-progress-track {
146
- height: 0.5rem;
146
+ height: var(--progress-meter-block-size);
147
147
  overflow: hidden;
148
148
  border-radius: var(--radius-pill);
149
149
  background: var(--progress-track-background, hsl(var(--secondary)));
@@ -152,19 +152,19 @@
152
152
  .ui-progress-bar {
153
153
  height: 100%;
154
154
  border-radius: inherit;
155
- background: var(--progress-fill-background, hsl(var(--success)));
155
+ background: var(--progress-fill-background, hsl(var(--mark-success)));
156
156
  }
157
157
 
158
158
  .ui-progress[data-tone="warning"] .ui-progress-bar {
159
- background: hsl(var(--warning));
159
+ background: hsl(var(--mark-warning));
160
160
  }
161
161
 
162
162
  .ui-progress[data-tone="destructive"] .ui-progress-bar {
163
- background: hsl(var(--destructive));
163
+ background: hsl(var(--mark-destructive));
164
164
  }
165
165
 
166
166
  .ui-progress[data-over] .ui-progress-bar {
167
- background-color: hsl(var(--destructive));
167
+ background-color: hsl(var(--mark-destructive));
168
168
  background-image: repeating-linear-gradient(
169
169
  45deg,
170
170
  hsl(var(--destructive-foreground) / 0.4) 0,
@@ -180,20 +180,28 @@
180
180
  border-radius: var(--progress-breakdown-radius);
181
181
  }
182
182
 
183
+ .ui-progress[data-size="sm"] .ui-progress-track {
184
+ height: var(--progress-meter-block-size-sm);
185
+ }
186
+
187
+ .ui-progress[data-breakdown][data-size="sm"] .ui-progress-track {
188
+ height: var(--progress-breakdown-block-size-sm);
189
+ }
190
+
183
191
  .ui-progress-segment {
184
192
  height: 100%;
185
193
  }
186
194
 
187
195
  .ui-progress-segment[data-tone="success"] {
188
- background: hsl(var(--success));
196
+ background: hsl(var(--mark-success));
189
197
  }
190
198
 
191
199
  .ui-progress-segment[data-tone="warning"] {
192
- background: hsl(var(--warning));
200
+ background: hsl(var(--mark-warning));
193
201
  }
194
202
 
195
203
  .ui-progress-segment[data-tone="destructive"] {
196
- background: hsl(var(--destructive));
204
+ background: hsl(var(--mark-destructive));
197
205
  }
198
206
 
199
207
  .ui-progress-label {
@@ -201,6 +209,61 @@
201
209
  font-size: var(--progress-label-font-size);
202
210
  }
203
211
 
212
+ .ui-progress[data-shape="ring"] {
213
+ display: inline-flex;
214
+ }
215
+
216
+ .ui-progress-ring {
217
+ position: relative;
218
+ display: inline-grid;
219
+ inline-size: var(--progress-ring-size);
220
+ block-size: var(--progress-ring-size);
221
+ place-items: center;
222
+ }
223
+
224
+ .ui-progress[data-size="sm"] .ui-progress-ring {
225
+ --progress-ring-size: var(--progress-ring-size-sm);
226
+ }
227
+
228
+ .ui-progress-ring-svg {
229
+ position: absolute;
230
+ inset: 0;
231
+ inline-size: 100%;
232
+ block-size: 100%;
233
+ }
234
+
235
+ .ui-progress-ring-track,
236
+ .ui-progress-ring-indicator {
237
+ fill: none;
238
+ stroke-width: var(--progress-ring-border-width);
239
+ }
240
+
241
+ .ui-progress-ring-track {
242
+ stroke: var(--progress-track-background, hsl(var(--secondary)));
243
+ }
244
+
245
+ .ui-progress-ring-indicator {
246
+ stroke: var(--progress-fill-background, hsl(var(--mark-success)));
247
+
248
+ stroke-linecap: butt;
249
+ }
250
+
251
+ .ui-progress[data-tone="warning"] .ui-progress-ring-indicator {
252
+ stroke: hsl(var(--mark-warning));
253
+ }
254
+
255
+ .ui-progress[data-tone="destructive"] .ui-progress-ring-indicator {
256
+ stroke: hsl(var(--mark-destructive));
257
+ }
258
+
259
+ .ui-progress-ring-label {
260
+ position: relative;
261
+ color: hsl(var(--foreground));
262
+ font-size: var(--progress-ring-label-font-size);
263
+ font-variant-numeric: tabular-nums;
264
+ line-height: 1;
265
+ }
266
+
204
267
  .ui-legend {
205
268
  display: flex;
206
269
  flex-wrap: wrap;
@@ -227,23 +290,23 @@
227
290
  }
228
291
 
229
292
  .ui-legend-swatch[data-tone="default"] {
230
- background: hsl(var(--primary));
293
+ background: hsl(var(--mark-primary));
231
294
  }
232
295
 
233
296
  .ui-legend-swatch[data-tone="success"] {
234
- background: hsl(var(--success));
297
+ background: hsl(var(--mark-success));
235
298
  }
236
299
 
237
300
  .ui-legend-swatch[data-tone="warning"] {
238
- background: hsl(var(--warning));
301
+ background: hsl(var(--mark-warning));
239
302
  }
240
303
 
241
304
  .ui-legend-swatch[data-tone="destructive"] {
242
- background: hsl(var(--destructive));
305
+ background: hsl(var(--mark-destructive));
243
306
  }
244
307
 
245
308
  .ui-legend-swatch[data-tone="info"] {
246
- background: hsl(var(--info));
309
+ background: hsl(var(--mark-info));
247
310
  }
248
311
 
249
312
  .ui-legend-swatch[data-tone="muted"],
@@ -744,24 +807,32 @@
744
807
 
745
808
  @layer components {
746
809
 
747
- [data-slot="scroll-area-viewport"][data-orientation="vertical"] > * {
748
- display: block !important;
810
+ .ui-scroll-area {
811
+ position: relative;
812
+ scrollbar-width: var(--scroll-area-scrollbar-width);
813
+ scrollbar-color: var(--scroll-area-thumb-color, hsl(var(--border)))
814
+ var(--scroll-area-track-color, transparent);
815
+ scrollbar-gutter: var(--scroll-area-scrollbar-space);
749
816
  }
750
817
 
751
- .ui-scroll-area-bar {
752
- padding: var(--scroll-area-bar-padding);
818
+ .ui-scroll-area[data-orientation="vertical"] {
819
+ overflow-x: hidden;
820
+ overflow-y: auto;
753
821
  }
754
822
 
755
- .ui-scroll-area-bar--vertical {
756
- inline-size: var(--scroll-area-bar-size);
823
+ .ui-scroll-area[data-orientation="horizontal"] {
824
+ overflow-x: auto;
825
+ overflow-y: hidden;
757
826
  }
758
827
 
759
- .ui-scroll-area-bar--horizontal {
760
- block-size: var(--scroll-area-bar-size);
828
+ .ui-scroll-area[data-orientation="both"] {
829
+ overflow: auto;
761
830
  }
762
831
 
763
- .ui-scroll-area-thumb {
764
- border-radius: var(--scroll-area-thumb-radius);
832
+ .ui-scroll-area:is([data-orientation="horizontal"], [data-orientation="both"])
833
+ > .ui-scroll-area-content {
834
+ inline-size: max-content;
835
+ min-inline-size: 100%;
765
836
  }
766
837
  }
767
838
 
@@ -13,8 +13,6 @@
13
13
  .ui-toggle,
14
14
  .ui-checkbox,
15
15
  .ui-radio,
16
- .ui-slider-thumb,
17
- .ui-switch,
18
16
  .ui-steps-inline-control,
19
17
  .ui-pagination-link,
20
18
  .ui-legal-document-toc-link,
@@ -30,6 +28,9 @@
30
28
  ):focus-visible,
31
29
 
32
30
  .ui-checkbox[data-focus-visible],
31
+ .ui-switch[data-focus-visible],
32
+ .ui-slider-thumb[data-focus-visible],
33
+ .ui-focus-ring[data-focus-visible],
33
34
  .ui-control-trigger[data-state="open"],
34
35
  .ui-tag-input:focus-within,
35
36
  .ui-control-composite-field:focus-within,
@@ -58,8 +59,6 @@
58
59
  .ui-toggle,
59
60
  .ui-checkbox,
60
61
  .ui-radio,
61
- .ui-slider-thumb,
62
- .ui-switch,
63
62
  .ui-steps-inline-control,
64
63
  .ui-pagination-link,
65
64
  .ui-legal-document-toc-link,
@@ -75,6 +74,9 @@
75
74
  ):focus-visible,
76
75
 
77
76
  :root[data-focus-outline="on"] .ui-checkbox[data-focus-visible],
77
+ :root[data-focus-outline="on"] .ui-switch[data-focus-visible],
78
+ :root[data-focus-outline="on"] .ui-slider-thumb[data-focus-visible],
79
+ :root[data-focus-outline="on"] .ui-focus-ring[data-focus-visible],
78
80
  :root[data-focus-outline="on"] .ui-control-trigger[data-state="open"],
79
81
  :root[data-focus-outline="on"] .ui-tag-input:focus-within,
80
82
  :root[data-focus-outline="on"] .ui-control-composite-field:focus-within,