@godxjp/ui 22.0.0 → 23.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 (115) hide show
  1. package/README.md +4 -4
  2. package/dist/app/date-format-labels.d.ts +14 -2
  3. package/dist/app/date-format-labels.js +1 -1
  4. package/dist/app/date-formats.d.ts +14 -2
  5. package/dist/app/date-formats.js +9 -2
  6. package/dist/components/data-display/data-table.d.ts +8 -1
  7. package/dist/components/data-display/data-table.js +9 -2
  8. package/dist/components/data-display/scroll-area.d.ts +24 -4
  9. package/dist/components/data-display/scroll-area.js +34 -72
  10. package/dist/components/data-entry/cascader.js +8 -6
  11. package/dist/components/data-entry/checkbox.js +3 -1
  12. package/dist/components/data-entry/choice-hit-target.d.ts +24 -0
  13. package/dist/components/data-entry/choice-hit-target.js +12 -0
  14. package/dist/components/data-entry/control-surface.d.ts +8 -0
  15. package/dist/components/data-entry/control-surface.js +10 -1
  16. package/dist/components/data-entry/form-field.js +5 -4
  17. package/dist/components/data-entry/input.js +1 -1
  18. package/dist/components/data-entry/number-input.js +27 -6
  19. package/dist/components/data-entry/radio.js +4 -3
  20. package/dist/components/data-entry/search-select.js +225 -95
  21. package/dist/components/data-entry/select.d.ts +76 -14
  22. package/dist/components/data-entry/select.js +495 -163
  23. package/dist/components/data-entry/slider.d.ts +3 -11
  24. package/dist/components/data-entry/slider.js +582 -93
  25. package/dist/components/data-entry/switch.js +3 -1
  26. package/dist/components/feedback/dialog.js +2 -2
  27. package/dist/components/feedback/sheet.js +2 -22
  28. package/dist/components/navigation/dropdown-menu.d.ts +11 -3
  29. package/dist/components/navigation/dropdown-menu.js +190 -15
  30. package/dist/components/navigation/filter-bar.js +2 -1
  31. package/dist/components/navigation/index.d.ts +0 -3
  32. package/dist/components/navigation/index.js +0 -78
  33. package/dist/components/navigation/tabs.js +16 -4
  34. package/dist/components/ui/index.d.ts +0 -3
  35. package/dist/components/ui/index.js +0 -3
  36. package/dist/components/ui/input-otp.d.ts +1 -1
  37. package/dist/components/ui/segmented.js +3 -1
  38. package/dist/components/ui/tag-input.js +3 -5
  39. package/dist/i18n/messages/en.json +5 -1
  40. package/dist/i18n/messages/ja.json +5 -1
  41. package/dist/i18n/messages/vi.json +5 -1
  42. package/dist/lib/breakpoint-token.d.ts +8 -0
  43. package/dist/lib/breakpoint-token.js +29 -0
  44. package/dist/lib/select-options.d.ts +21 -0
  45. package/dist/lib/select-options.js +46 -0
  46. package/dist/props/components/data-display.prop.d.ts +17 -7
  47. package/dist/props/components/data-entry.prop.d.ts +323 -30
  48. package/dist/props/components/index.d.ts +1 -1
  49. package/dist/props/components/navigation.prop.d.ts +25 -1
  50. package/dist/props/registry.d.ts +69 -1
  51. package/dist/props/registry.js +75 -0
  52. package/dist/props/vocabulary/data.prop.d.ts +5 -0
  53. package/dist/props/vocabulary/index.d.ts +1 -1
  54. package/dist/styles/control.css +246 -28
  55. package/dist/styles/data-display-layout.css +18 -10
  56. package/dist/styles/focus-ring.css +28 -0
  57. package/dist/styles/fonts.css +88 -4
  58. package/dist/styles/form-layout.css +4 -0
  59. package/dist/styles/layout.css +2 -1
  60. package/dist/styles/navigation-layout.css +24 -238
  61. package/dist/styles/shell-layout.css +148 -139
  62. package/dist/styles/table-layout.css +12 -5
  63. package/dist/tokens/components/control.css +12 -3
  64. package/dist/tokens/components/data-display.css +0 -5
  65. package/dist/tokens/components/navigation.css +5 -5
  66. package/dist/tokens/components/scroll-area.css +7 -0
  67. package/docs/CONSUMER-RULES.md +7 -2
  68. package/docs/CUSTOMER-THEMING.md +25 -9
  69. package/docs/DATETIME.md +11 -2
  70. package/docs/FRAME-COVERAGE-REPORT.md +4 -7
  71. package/docs/SPACING.md +35 -5
  72. package/docs/TOKENS.md +1 -1
  73. package/docs/data-display/data-table/index.tsx +44 -3
  74. package/docs/data-display/popover.tsx +4 -6
  75. package/docs/data-display/scroll-area.tsx +51 -45
  76. package/docs/data-display/table.tsx +1 -1
  77. package/docs/data-entry/date-picker.tsx +2 -3
  78. package/docs/data-entry/input-otp.tsx +5 -2
  79. package/docs/data-entry/segmented-in-filter-row.tsx +77 -0
  80. package/docs/data-entry/segmented.tsx +40 -1
  81. package/docs/data-entry/select-matrix.tsx +1 -2
  82. package/docs/data-entry/select.tsx +108 -3
  83. package/docs/data-entry/slider.tsx +125 -47
  84. package/docs/feedback/dialog.tsx +1 -2
  85. package/docs/feedback/sheet.tsx +1 -2
  86. package/docs/layout/app-shell-states.tsx +143 -0
  87. package/docs/navigation/dropdown-menu.tsx +77 -6
  88. package/docs/navigation/tabs.tsx +72 -0
  89. package/docs/roadmap/ai-chat-components.md +1 -2
  90. package/docs/roadmap/parity-audit-data-entry.md +44 -33
  91. package/docs/roadmap/parity-audit-layout-navigation-general.md +304 -310
  92. package/docs/roadmap/parity-backlog.md +2 -3
  93. package/docs/roadmap/tree-components.md +0 -1
  94. package/package.json +25 -55
  95. package/scripts/_agent-setup.mjs +18 -0
  96. package/scripts/guinea-pig-skill.md +12 -6
  97. package/scripts/ui-audit.mjs +185 -7
  98. package/scripts/visual-audit-rules.mjs +0 -7
  99. package/scripts/visual-audit.mjs +6 -27
  100. package/dist/components/navigation/context-menu.d.ts +0 -21
  101. package/dist/components/navigation/context-menu.js +0 -149
  102. package/dist/components/navigation/menubar.d.ts +0 -28
  103. package/dist/components/navigation/menubar.js +0 -136
  104. package/dist/components/navigation/navigation-menu.d.ts +0 -10
  105. package/dist/components/navigation/navigation-menu.js +0 -91
  106. package/dist/components/ui/context-menu.d.ts +0 -1
  107. package/dist/components/ui/context-menu.js +0 -2
  108. package/dist/components/ui/menubar.d.ts +0 -1
  109. package/dist/components/ui/menubar.js +0 -2
  110. package/dist/components/ui/navigation-menu.d.ts +0 -1
  111. package/dist/components/ui/navigation-menu.js +0 -2
  112. package/docs/FRAME-A11Y-CI.md +0 -349
  113. package/docs/navigation/context-menu.tsx +0 -128
  114. package/docs/navigation/menubar.tsx +0 -141
  115. package/docs/navigation/navigation-menu.tsx +0 -158
@@ -585,6 +585,11 @@ const VOCABULARY_REGISTRY = {
585
585
  category: "data",
586
586
  description: "Row ID extractor generic"
587
587
  },
588
+ GetRowLabelProp: {
589
+ file: "vocabulary/data.prop.ts",
590
+ category: "data",
591
+ description: "Row label extractor generic \u2014 the accessible name of a row's selection control"
592
+ },
588
593
  OnRowClickProp: {
589
594
  file: "vocabulary/data.prop.ts",
590
595
  category: "data",
@@ -1420,6 +1425,16 @@ const COMPONENT_PROP_REGISTRY = {
1420
1425
  file: "components/data-entry.prop.ts",
1421
1426
  vocabulary: []
1422
1427
  },
1428
+ SliderMarkProp: {
1429
+ group: "data-entry",
1430
+ file: "components/data-entry.prop.ts",
1431
+ vocabulary: []
1432
+ },
1433
+ SliderRangeConfigProp: {
1434
+ group: "data-entry",
1435
+ file: "components/data-entry.prop.ts",
1436
+ vocabulary: []
1437
+ },
1423
1438
  ControlCountProp: {
1424
1439
  group: "data-entry",
1425
1440
  file: "components/data-entry.prop.ts",
@@ -1564,6 +1579,60 @@ const COMPONENT_PROP_REGISTRY = {
1564
1579
  ],
1565
1580
  note: "Internal \u2014 the searchable engine behind `<Select options showSearch>` (not public API); use Select."
1566
1581
  },
1582
+ SelectFieldNamesProp: {
1583
+ group: "data-entry",
1584
+ file: "components/data-entry.prop.ts",
1585
+ vocabulary: ["LabelProp", "ValueProp", "DisabledProp"],
1586
+ note: "antd `fieldNames` for `<Select options>` \u2014 the spelling Cascader and TreeSelect already take."
1587
+ },
1588
+ SelectOptionGroupProp: {
1589
+ group: "data-entry",
1590
+ file: "components/data-entry.prop.ts",
1591
+ vocabulary: ["LabelProp", "DisabledProp"],
1592
+ note: "antd's nested option GROUP (`{ label, options }`); flattens to the `group` a flat row carries."
1593
+ },
1594
+ SelectOptionInputProp: {
1595
+ group: "data-entry",
1596
+ file: "components/data-entry.prop.ts",
1597
+ vocabulary: [],
1598
+ note: "What `<Select options>` accepts: a row, a group, or a foreign row read through `fieldNames`."
1599
+ },
1600
+ SelectLabeledValueProp: {
1601
+ group: "data-entry",
1602
+ file: "components/data-entry.prop.ts",
1603
+ vocabulary: ["ValueProp", "LabelProp"],
1604
+ note: "antd `labelInValue` \u2014 the value carries its own label for a screen with no option list yet."
1605
+ },
1606
+ SelectPlacementProp: {
1607
+ group: "data-entry",
1608
+ file: "components/data-entry.prop.ts",
1609
+ vocabulary: [],
1610
+ note: "antd `placement` on the LOGICAL inline axis, as DropdownMenuPlacementProp already spells it."
1611
+ },
1612
+ SelectShowSearchProp: {
1613
+ group: "data-entry",
1614
+ file: "components/data-entry.prop.ts",
1615
+ vocabulary: ["OnSearchChangeProp"],
1616
+ note: "antd `showSearch`'s object form. `filterOption(input, option)` here takes antd's argument order."
1617
+ },
1618
+ SelectLabelInValueSingleProp: {
1619
+ group: "data-entry",
1620
+ file: "components/data-entry.prop.ts",
1621
+ vocabulary: ["ValueProp", "DefaultValueProp", "OnValueChangeProp"],
1622
+ note: "Internal \u2014 the `labelInValue` single shape of `<Select options>`; use Select."
1623
+ },
1624
+ SelectLabelInValueMultipleProp: {
1625
+ group: "data-entry",
1626
+ file: "components/data-entry.prop.ts",
1627
+ vocabulary: [
1628
+ "ValueProp",
1629
+ "DefaultValueProp",
1630
+ "OnValueChangeProp",
1631
+ "MaxTagCountProp",
1632
+ "MaxTagPlaceholderProp"
1633
+ ],
1634
+ note: "Internal \u2014 the `labelInValue` multiple/tags shape of `<Select options>`; use Select."
1635
+ },
1567
1636
  SelectDataProp: {
1568
1637
  group: "data-entry",
1569
1638
  file: "components/data-entry.prop.ts",
@@ -1769,6 +1838,7 @@ const COMPONENT_PROP_REGISTRY = {
1769
1838
  "DensityProp",
1770
1839
  "SortStateProp",
1771
1840
  "SelectedIdsProp",
1841
+ "GetRowLabelProp",
1772
1842
  "HandlerProp",
1773
1843
  "TablePresetProp",
1774
1844
  "TableColumnPriorityProp",
@@ -2224,6 +2294,11 @@ const COMPONENT_PROP_REGISTRY = {
2224
2294
  file: "components/navigation.prop.ts",
2225
2295
  vocabulary: []
2226
2296
  },
2297
+ DropdownMenuTriggerActionProp: {
2298
+ group: "navigation",
2299
+ file: "components/navigation.prop.ts",
2300
+ vocabulary: []
2301
+ },
2227
2302
  PaginationAlignProp: {
2228
2303
  group: "navigation",
2229
2304
  file: "components/navigation.prop.ts",
@@ -7,6 +7,11 @@ import type { BreakpointProp, ColumnAlignProp, SortDirectionProp } from "./inter
7
7
  import type { TableDensityProp } from "./layout.prop.js";
8
8
  /** Generic row identifier extractor for tables with selection. */
9
9
  export type GetRowIdProp<T> = (row: T) => string;
10
+ /**
11
+ * Human-readable row name — what a row's selection control is announced as. The row id is a KEY,
12
+ * not a name: announced, it reads a UUID aloud.
13
+ */
14
+ export type GetRowLabelProp<T> = (row: T) => string;
10
15
  /** Row click navigation handler. */
11
16
  export type OnRowClickProp<T> = (row: T) => void;
12
17
  /** Column definition for DataTable. */
@@ -4,4 +4,4 @@ export type { TitleProp, SubtitleProp, StatusProp, DescriptionProp, ExtraProp, F
4
4
  export type { PageDensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, MobileShellHeightProp, MobileShellWidthProp, OrientationProp, TableDensityProp, DensityProp, GapNameProp, PadProp, PadRawProp, PadSides, GapProp, GapStepProp, } from "./layout.prop.js";
5
5
  export type { ButtonVariantProp, ButtonSizeProp, BadgeVariantProp, AppSettingPickerAppearanceProp, AppSettingToggleAppearanceProp, ShapeProp, AvatarShapeProp, TextSizeProp, TextToneProp, FontWeightProp, HeadingLevelProp, TextAlignProp, TextWhitespaceProp, SizeProp, ControlStatusProp, ControlVariantProp, FormLayoutProp, DescriptionsLayoutProp, BreakpointProp, ConfirmVariantProp, ToneProp, AlertVariantProp, SortDirectionProp, ColumnAlignProp, SortStateProp, RevealDelayProp, ActivityVariantProp, ActivityAnnounceProp, } from "./interaction.prop.js";
6
6
  export type { BreadcrumbItemProp, BreadcrumbProp, BreadcrumbItemMenuProp, BreadcrumbItemMenuEntryProp, BreadcrumbSeparatorProp, BreadcrumbItemRenderProp, } from "./navigation.prop.js";
7
- export type { GetRowIdProp, OnRowClickProp, ColumnDefProp, TablePresetProp, TableColumnPriorityProp, TableCellIndentProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, TableRowToneProp, RowToneProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, ColumnFixedProp, ColumnFilterValueProp, ColumnFilterItemProp, ColumnFilterStateProp, OnColumnFilterChangeProp, ColumnCompareProp, ColumnSorterProp, TableSelectionItemProp, TableRowSelectionProp, TableExpandableProp, TableSummaryProp, TableScrollProp, TableStickyProp, OnRowProp, TablePaginationProp, DescriptionsColumnProp, DescriptionsSpanProp, DescriptionsItemsProp, } from "./data.prop.js";
7
+ export type { GetRowIdProp, GetRowLabelProp, OnRowClickProp, ColumnDefProp, TablePresetProp, TableColumnPriorityProp, TableCellIndentProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, TableRowToneProp, RowToneProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, ColumnFixedProp, ColumnFilterValueProp, ColumnFilterItemProp, ColumnFilterStateProp, OnColumnFilterChangeProp, ColumnCompareProp, ColumnSorterProp, TableSelectionItemProp, TableRowSelectionProp, TableExpandableProp, TableSummaryProp, TableScrollProp, TableStickyProp, OnRowProp, TablePaginationProp, DescriptionsColumnProp, DescriptionsSpanProp, DescriptionsItemsProp, } from "./data.prop.js";
@@ -177,8 +177,8 @@
177
177
  content: "";
178
178
  position: absolute;
179
179
  inset: 0;
180
- min-inline-size: var(--button-bare-target-size);
181
- min-block-size: var(--button-bare-target-size);
180
+ min-inline-size: var(--button-bare-target-size, var(--control-height-xs));
181
+ min-block-size: var(--button-bare-target-size, var(--control-height-xs));
182
182
  margin: auto;
183
183
  }
184
184
 
@@ -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],
@@ -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;
@@ -992,6 +1068,8 @@
992
1068
  --segmented-item-height: calc(var(--control-height) - var(--segmented-track-padding) * 2);
993
1069
  display: inline-flex;
994
1070
  max-width: 100%;
1071
+
1072
+ flex-wrap: wrap;
995
1073
  align-items: stretch;
996
1074
  padding: var(--segmented-track-padding);
997
1075
  border-radius: var(--segmented-track-radius);
@@ -1001,6 +1079,8 @@
1001
1079
  }
1002
1080
 
1003
1081
  .ui-segmented-item {
1082
+
1083
+ position: relative;
1004
1084
  display: inline-flex;
1005
1085
  min-width: 0;
1006
1086
  height: var(--segmented-item-height);
@@ -1093,7 +1173,8 @@
1093
1173
  background: hsl(var(--secondary));
1094
1174
  color: hsl(var(--secondary-foreground));
1095
1175
  }
1096
- .ui-tag-input-remove {
1176
+ .ui-tag-input-remove,
1177
+ .ui-search-select-value-remove {
1097
1178
 
1098
1179
  display: inline-flex;
1099
1180
  align-items: center;
@@ -1108,10 +1189,12 @@
1108
1189
  color: inherit;
1109
1190
  opacity: 0.7;
1110
1191
  }
1111
- .ui-tag-input-remove:hover {
1192
+ .ui-tag-input-remove:hover,
1193
+ .ui-search-select-value-remove:hover {
1112
1194
  opacity: 1;
1113
1195
  }
1114
- .ui-tag-input-remove svg {
1196
+ .ui-tag-input-remove svg,
1197
+ .ui-search-select-value-remove svg {
1115
1198
  width: 0.75rem;
1116
1199
  height: 0.75rem;
1117
1200
  }
@@ -1255,6 +1338,20 @@
1255
1338
  inline-size: 0.75rem;
1256
1339
  block-size: 0.75rem;
1257
1340
  }
1341
+
1342
+ @media (pointer: coarse) {
1343
+ .ui-number-input:not([data-size="xs"]):not([data-size="sm"]) {
1344
+ --control-height: var(--number-input-touch-height);
1345
+ }
1346
+
1347
+ .ui-number-input-steppers {
1348
+ gap: 0;
1349
+ }
1350
+
1351
+ .ui-number-input-step {
1352
+ block-size: calc(var(--control-height) / 2);
1353
+ }
1354
+ }
1258
1355
  }
1259
1356
 
1260
1357
  @layer components {
@@ -1349,6 +1446,7 @@
1349
1446
  }
1350
1447
 
1351
1448
  .ui-search-select-list {
1449
+ max-block-size: var(--search-select-list-max-height);
1352
1450
  max-block-size: none;
1353
1451
  min-block-size: 0;
1354
1452
  flex: 1 1 0%;
@@ -1545,11 +1643,21 @@
1545
1643
 
1546
1644
  @layer components {
1547
1645
 
1646
+ .ui-select-root {
1647
+ display: contents;
1648
+ }
1649
+
1548
1650
  .ui-select-content {
1549
1651
  position: relative;
1550
1652
  z-index: var(--overlay-z-index);
1653
+ display: flex;
1654
+ flex-direction: column;
1551
1655
  max-height: var(--select-content-max-height);
1552
- min-width: var(--menu-content-min-width);
1656
+
1657
+ min-width: max(
1658
+ var(--menu-content-min-width),
1659
+ var(--trigger-width, var(--menu-content-min-width))
1660
+ );
1553
1661
  overflow: hidden;
1554
1662
  border-radius: var(--radius-md);
1555
1663
  border: 1px solid hsl(var(--border));
@@ -1558,13 +1666,21 @@
1558
1666
  box-shadow: var(--shadow-md);
1559
1667
  }
1560
1668
 
1669
+ .ui-select-content[data-popup-match="content"] {
1670
+ min-width: var(--menu-content-min-width);
1671
+ }
1672
+
1561
1673
  .ui-select-content[data-popup-match="fixed"] {
1562
1674
  min-width: var(--select-content-inline-size);
1563
1675
  width: var(--select-content-inline-size);
1564
1676
  }
1565
1677
 
1566
1678
  .ui-select-viewport {
1679
+ min-block-size: 0;
1680
+ max-block-size: var(--select-content-max-height);
1681
+ overflow-y: auto;
1567
1682
  padding: var(--menu-content-space-inset);
1683
+ outline: none;
1568
1684
  }
1569
1685
 
1570
1686
  .ui-select-empty {
@@ -1649,6 +1765,19 @@
1649
1765
  flex-shrink: 0;
1650
1766
  opacity: var(--control-affix-rest-alpha);
1651
1767
  }
1768
+
1769
+ .ui-select-prefix,
1770
+ .ui-select-suffix {
1771
+ display: inline-flex;
1772
+ flex-shrink: 0;
1773
+ align-items: center;
1774
+ color: hsl(var(--muted-foreground));
1775
+ }
1776
+
1777
+ .ui-select-trigger-prefixed > [data-slot="select-value"] {
1778
+ flex: 1 1 auto;
1779
+ text-align: start;
1780
+ }
1652
1781
  }
1653
1782
 
1654
1783
  @layer components {
@@ -1772,6 +1901,22 @@
1772
1901
  transition: opacity 150ms ease;
1773
1902
  }
1774
1903
 
1904
+ .ui-control-inline-affix-action {
1905
+ position: relative;
1906
+ }
1907
+
1908
+ .ui-control-inline-affix-action::after {
1909
+ content: "";
1910
+ position: absolute;
1911
+ inset-block-start: 50%;
1912
+ inset-inline-start: 50%;
1913
+ translate: -50% -50%;
1914
+ min-inline-size: var(--touch-target-min);
1915
+ min-block-size: var(--touch-target-min);
1916
+ inline-size: 100%;
1917
+ block-size: 100%;
1918
+ }
1919
+
1775
1920
  .ui-control-inline-affix-action:hover,
1776
1921
  .ui-control-inline-affix-action:focus-visible {
1777
1922
  color: hsl(var(--foreground));
@@ -1993,6 +2138,8 @@
1993
2138
  background-color: hsl(var(--muted));
1994
2139
 
1995
2140
  border-radius: 0;
2141
+
2142
+ padding-block: var(--calendar-bordered-weekday-padding-block);
1996
2143
  }
1997
2144
 
1998
2145
  .ui-calendar[data-bordered="true"] .ui-calendar-grid {
@@ -2421,7 +2568,7 @@
2421
2568
  }
2422
2569
 
2423
2570
  .ui-button--xs {
2424
- height: var(--button-xs-height);
2571
+ height: var(--button-xs-height, var(--control-height-xs));
2425
2572
  gap: var(--button-xs-space-gap);
2426
2573
  padding-inline: var(--button-xs-space-inline);
2427
2574
  font-size: var(--button-xs-font-size);
@@ -2527,8 +2674,8 @@
2527
2674
 
2528
2675
  .ui-control[data-status="warning"],
2529
2676
  .ui-control-multiline[data-status="warning"] {
2530
- --focus-ring-color: var(--control-status-warning-border-color);
2531
- --focus-outline-color: var(--control-status-warning-border-color);
2677
+ --focus-ring-color: var(--control-status-warning-outline-color);
2678
+ --focus-outline-color: var(--control-status-warning-outline-color);
2532
2679
  --focus-ring-glow-color: var(--control-status-warning-glow-color);
2533
2680
  --focus-ring-glow-alpha: var(--control-status-warning-glow-alpha);
2534
2681
  }
@@ -2668,7 +2815,7 @@
2668
2815
  order: 1;
2669
2816
  }
2670
2817
 
2671
- .ui-slider[data-has-marks="true"] {
2818
+ .ui-slider[data-has-marks="true"]:not([data-orientation="vertical"]) {
2672
2819
  margin-block-end: calc(var(--slider-mark-space-block-start) + var(--font-size-lg));
2673
2820
  }
2674
2821
 
@@ -2680,13 +2827,35 @@
2680
2827
  block-size: 0;
2681
2828
  }
2682
2829
 
2830
+ .ui-slider[data-orientation="vertical"] .ui-slider-marks {
2831
+ inset-block: 0;
2832
+ inset-inline-start: 100%;
2833
+ inset-inline-end: auto;
2834
+ margin-block-start: 0;
2835
+ margin-inline-start: var(--slider-mark-space-block-start);
2836
+ inline-size: 0;
2837
+ block-size: auto;
2838
+ }
2839
+
2683
2840
  .ui-slider-mark {
2684
2841
  position: absolute;
2685
2842
  inset-inline-start: var(--slider-mark-offset-inline, 0%);
2686
- transform: translateX(-50%);
2843
+ display: flex;
2844
+ justify-content: center;
2845
+ inline-size: 0;
2687
2846
  font-size: var(--slider-mark-font-size);
2688
2847
  color: hsl(var(--slider-mark-color));
2689
2848
  white-space: nowrap;
2849
+ cursor: pointer;
2850
+ }
2851
+
2852
+ .ui-slider[data-orientation="vertical"] .ui-slider-mark {
2853
+ inset-inline-start: 0;
2854
+ inset-block-end: var(--slider-mark-offset-block, 0%);
2855
+ align-items: center;
2856
+ justify-content: flex-start;
2857
+ inline-size: auto;
2858
+ block-size: 0;
2690
2859
  }
2691
2860
 
2692
2861
  .ui-slider-dot {
@@ -2695,35 +2864,78 @@
2695
2864
  inset-inline-start: var(--slider-mark-offset-inline, 0%);
2696
2865
  inline-size: var(--slider-dot-size);
2697
2866
  block-size: var(--slider-dot-size);
2698
- transform: translate(-50%, -50%);
2867
+ margin-block-start: calc(var(--slider-dot-size) / -2);
2868
+ margin-inline-start: calc(var(--slider-dot-size) / -2);
2699
2869
  border-radius: var(--radius-pill);
2700
2870
  background: hsl(var(--slider-dot-background));
2701
2871
  border: var(--control-border-width) solid hsl(var(--slider-dot-border-color));
2702
2872
  }
2703
2873
 
2874
+ .ui-slider[data-orientation="vertical"] .ui-slider-dot {
2875
+ inset-block-start: auto;
2876
+ inset-block-end: var(--slider-mark-offset-block, 0%);
2877
+ inset-inline-start: 50%;
2878
+ margin-block-start: 0;
2879
+ margin-block-end: calc(var(--slider-dot-size) / -2);
2880
+ }
2881
+
2704
2882
  .ui-slider-dot[data-active="true"] {
2705
2883
  border-color: hsl(var(--slider-dot-active-border-color));
2706
2884
  }
2707
2885
 
2708
2886
  .ui-slider-tooltip {
2709
2887
  position: absolute;
2710
- inset-block-end: 100%;
2888
+ display: flex;
2889
+ align-items: center;
2890
+ justify-content: center;
2891
+ pointer-events: none;
2892
+ opacity: 0;
2893
+ transition: opacity 150ms;
2894
+ }
2895
+
2896
+ .ui-slider-tooltip[data-placement="top"],
2897
+ .ui-slider-tooltip[data-placement="bottom"] {
2711
2898
  inset-inline-start: 50%;
2712
- transform: translateX(-50%);
2713
- margin-block-end: var(--slider-tooltip-offset-block);
2899
+ inline-size: 0;
2900
+ }
2901
+
2902
+ .ui-slider-tooltip[data-placement="top"] {
2903
+ inset-block-end: 100%;
2904
+ padding-block-end: var(--slider-tooltip-offset-block);
2905
+ }
2906
+
2907
+ .ui-slider-tooltip[data-placement="bottom"] {
2908
+ inset-block-start: 100%;
2909
+ padding-block-start: var(--slider-tooltip-offset-block);
2910
+ }
2911
+
2912
+ .ui-slider-tooltip[data-placement="left"],
2913
+ .ui-slider-tooltip[data-placement="right"] {
2914
+ inset-block-start: 50%;
2915
+ block-size: 0;
2916
+ }
2917
+
2918
+ .ui-slider-tooltip[data-placement="left"] {
2919
+ inset-inline-end: 100%;
2920
+ padding-inline-end: var(--slider-tooltip-offset-block);
2921
+ }
2922
+
2923
+ .ui-slider-tooltip[data-placement="right"] {
2924
+ inset-inline-start: 100%;
2925
+ padding-inline-start: var(--slider-tooltip-offset-block);
2926
+ }
2927
+
2928
+ .ui-slider-tooltip-content {
2714
2929
  padding-inline: var(--slider-tooltip-padding-inline);
2715
2930
  border-radius: var(--slider-tooltip-radius);
2716
2931
  background: hsl(var(--slider-tooltip-background));
2717
2932
  color: hsl(var(--slider-tooltip-color));
2718
2933
  font-size: var(--slider-tooltip-font-size);
2719
2934
  white-space: nowrap;
2720
- opacity: 0;
2721
- pointer-events: none;
2722
- transition: opacity 150ms;
2723
2935
  }
2724
2936
 
2725
- .ui-slider-thumb:hover .ui-slider-tooltip,
2726
- .ui-slider-thumb:focus-visible .ui-slider-tooltip,
2937
+ .ui-slider-thumb:is([data-hovered], [data-focus-visible], [data-dragging])
2938
+ .ui-slider-tooltip:not([data-open="false"]),
2727
2939
  .ui-slider-tooltip[data-open="true"] {
2728
2940
  opacity: 1;
2729
2941
  }
@@ -2755,6 +2967,8 @@
2755
2967
  }
2756
2968
 
2757
2969
  .ui-radio-button {
2970
+
2971
+ position: relative;
2758
2972
  display: inline-flex;
2759
2973
  align-items: center;
2760
2974
  justify-content: center;
@@ -2806,6 +3020,10 @@
2806
3020
  justify-content: center;
2807
3021
  }
2808
3022
 
3023
+ .ui-segmented:not([data-orientation="vertical"]) {
3024
+ row-gap: var(--segmented-track-padding);
3025
+ }
3026
+
2809
3027
  .ui-segmented[data-orientation="vertical"] {
2810
3028
  flex-direction: column;
2811
3029
  }
@@ -807,24 +807,32 @@
807
807
 
808
808
  @layer components {
809
809
 
810
- [data-slot="scroll-area-viewport"][data-orientation="vertical"] > * {
811
- 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);
812
816
  }
813
817
 
814
- .ui-scroll-area-bar {
815
- padding: var(--scroll-area-bar-padding);
818
+ .ui-scroll-area[data-orientation="vertical"] {
819
+ overflow-x: hidden;
820
+ overflow-y: auto;
816
821
  }
817
822
 
818
- .ui-scroll-area-bar--vertical {
819
- inline-size: var(--scroll-area-bar-size);
823
+ .ui-scroll-area[data-orientation="horizontal"] {
824
+ overflow-x: auto;
825
+ overflow-y: hidden;
820
826
  }
821
827
 
822
- .ui-scroll-area-bar--horizontal {
823
- block-size: var(--scroll-area-bar-size);
828
+ .ui-scroll-area[data-orientation="both"] {
829
+ overflow: auto;
824
830
  }
825
831
 
826
- .ui-scroll-area-thumb {
827
- 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%;
828
836
  }
829
837
  }
830
838