@godxjp/ui 19.4.1 → 19.5.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 (93) hide show
  1. package/dist/app/app-provider.js +10 -1
  2. package/dist/app/theme-axes.d.ts +18 -3
  3. package/dist/app/theme-axes.js +15 -3
  4. package/dist/components/data-display/badge.js +4 -1
  5. package/dist/components/data-display/data-table.js +9 -2
  6. package/dist/components/data-display/list-row.d.ts +2 -0
  7. package/dist/components/data-display/list-row.js +16 -12
  8. package/dist/components/data-display/timeline-grid.js +5 -3
  9. package/dist/components/data-entry/checkbox.d.ts +12 -0
  10. package/dist/components/data-entry/checkbox.js +35 -4
  11. package/dist/components/data-entry/form-field.js +5 -5
  12. package/dist/components/data-entry/index.d.ts +2 -0
  13. package/dist/components/data-entry/index.js +2 -0
  14. package/dist/components/data-entry/input.js +1 -1
  15. package/dist/components/data-entry/radio.js +1 -1
  16. package/dist/components/data-entry/search-input.d.ts +2 -18
  17. package/dist/components/data-entry/search-input.js +3 -0
  18. package/dist/components/data-entry/segmented.d.ts +2 -0
  19. package/dist/components/data-entry/segmented.js +5 -0
  20. package/dist/components/data-entry/select.d.ts +2 -0
  21. package/dist/components/data-entry/select.js +9 -4
  22. package/dist/components/feedback/sheet.js +1 -1
  23. package/dist/components/feedback/sonner.d.ts +7 -1
  24. package/dist/components/feedback/sonner.js +27 -7
  25. package/dist/components/general/button.d.ts +2 -0
  26. package/dist/components/general/button.js +11 -2
  27. package/dist/components/general/inert-background.d.ts +8 -3
  28. package/dist/components/general/inert-background.js +28 -3
  29. package/dist/components/general/logo.d.ts +53 -0
  30. package/dist/components/general/logo.js +57 -3
  31. package/dist/components/layout/app-shell.js +1 -1
  32. package/dist/components/layout/index.d.ts +4 -0
  33. package/dist/components/layout/index.js +4 -0
  34. package/dist/components/layout/master-detail.d.ts +1 -1
  35. package/dist/components/layout/master-detail.js +47 -3
  36. package/dist/components/layout/nav-list.d.ts +26 -0
  37. package/dist/components/layout/nav-list.js +21 -0
  38. package/dist/components/layout/responsive-grid.js +7 -4
  39. package/dist/components/layout/topbar-item.d.ts +17 -0
  40. package/dist/components/layout/topbar-item.js +21 -0
  41. package/dist/components/navigation/app-setting-picker.js +31 -5
  42. package/dist/components/navigation/context-menu.js +2 -2
  43. package/dist/components/navigation/dropdown-menu.js +2 -2
  44. package/dist/components/navigation/tabs.js +42 -10
  45. package/dist/components/ui/segmented.d.ts +48 -0
  46. package/dist/components/ui/segmented.js +48 -0
  47. package/dist/email/tokens.generated.d.ts +4 -4
  48. package/dist/email/tokens.generated.js +4 -4
  49. package/dist/i18n/messages/en.json +2 -1
  50. package/dist/i18n/messages/ja.json +2 -1
  51. package/dist/i18n/messages/vi.json +2 -1
  52. package/dist/props/components/app.prop.d.ts +9 -2
  53. package/dist/props/components/data-entry.prop.d.ts +10 -5
  54. package/dist/props/components/general.prop.d.ts +4 -0
  55. package/dist/props/components/layout.prop.d.ts +54 -2
  56. package/dist/props/registry.d.ts +21 -2
  57. package/dist/props/registry.js +29 -1
  58. package/dist/props/vocabulary/shared.prop.d.ts +11 -2
  59. package/dist/styles/alert-layout.css +4 -0
  60. package/dist/styles/base.css +2 -0
  61. package/dist/styles/control.css +123 -26
  62. package/dist/styles/data-display-layout.css +24 -2
  63. package/dist/styles/dialog-layout.css +2 -1
  64. package/dist/styles/focus-ring.css +84 -22
  65. package/dist/styles/form-layout.css +6 -0
  66. package/dist/styles/layout.css +38 -2
  67. package/dist/styles/logo-layout.css +56 -0
  68. package/dist/styles/navigation-layout.css +17 -1
  69. package/dist/styles/shell-layout.css +64 -10
  70. package/dist/tokens/antd.generated.css +40 -0
  71. package/dist/tokens/axes.css +6 -0
  72. package/dist/tokens/base.css +3 -0
  73. package/dist/tokens/components/control.css +5 -1
  74. package/dist/tokens/components/data-display.css +2 -1
  75. package/dist/tokens/components/feedback.css +2 -0
  76. package/dist/tokens/components/legal-document.css +0 -2
  77. package/dist/tokens/components/logo.css +13 -0
  78. package/dist/tokens/components/navigation.css +2 -0
  79. package/dist/tokens/components/segmented.css +27 -0
  80. package/dist/tokens/components/shell.css +15 -2
  81. package/dist/tokens/foundation.css +21 -13
  82. package/docs/DESIGN-AUTHORITY.md +346 -0
  83. package/docs/FRAME-COVERAGE-REPORT.md +5 -2
  84. package/docs/README.md +14 -13
  85. package/docs/data-display/list-row.tsx +21 -0
  86. package/docs/data-entry/search-input.tsx +1 -0
  87. package/docs/data-entry/segmented.tsx +124 -0
  88. package/docs/general/button/index.md +4 -0
  89. package/docs/layout/master-detail.tsx +3 -0
  90. package/docs/layout/nav-list.tsx +63 -0
  91. package/docs/layout/responsive-grid.tsx +19 -2
  92. package/docs/layout/topbar-item.tsx +157 -0
  93. package/package.json +8 -2
@@ -106,7 +106,7 @@
106
106
  }
107
107
 
108
108
  .ui-button--default:hover {
109
- background: hsl(var(--primary) / 0.9);
109
+ background: hsl(var(--primary-hover));
110
110
  }
111
111
 
112
112
  .ui-button--destructive {
@@ -550,7 +550,8 @@
550
550
  width: 100%;
551
551
  height: 100%;
552
552
  flex-direction: column;
553
- overflow: hidden;
553
+ overflow: clip;
554
+ overflow-clip-margin: var(--focus-ring-clip-margin);
554
555
  border-radius: var(--control-radius);
555
556
  background: hsl(var(--popover));
556
557
  color: hsl(var(--popover-foreground));
@@ -823,33 +824,28 @@
823
824
  .ui-otp-group[data-appearance="grouped"] .ui-otp-slot[data-active="true"] {
824
825
  box-shadow: none;
825
826
  }
827
+
826
828
  .ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
827
- border-color: hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
828
- box-shadow: 0 0 0 var(--focus-ring-width)
829
- hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
829
+ border-color: hsl(var(--focus-ring-color, var(--ring)));
830
+ }
831
+
832
+ .ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) {
833
+ --focus-ring-color: var(--destructive);
830
834
  }
831
835
  .ui-otp-container:has(.ui-otp-input[aria-invalid="true"])
832
836
  .ui-otp-group[data-appearance="grouped"] {
833
837
  border-color: hsl(var(--destructive));
834
838
  }
835
- .ui-otp-container:has(.ui-otp-input[aria-invalid="true"])
836
- .ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
837
- box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
838
- }
839
839
  .ui-otp-container:has(.ui-otp-input:disabled) .ui-otp-group[data-appearance="grouped"] {
840
840
  background: hsl(var(--muted));
841
841
  }
842
+
842
843
  .ui-otp-slot[data-active="true"] {
843
844
  z-index: 1;
844
- box-shadow: 0 0 0 var(--focus-ring-width)
845
- hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
846
845
  }
847
846
  .ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) .ui-otp-slot {
848
847
  border-color: hsl(var(--destructive));
849
848
  }
850
- .ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) .ui-otp-slot[data-active="true"] {
851
- box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
852
- }
853
849
  .ui-otp-container:has(.ui-otp-input:disabled) .ui-otp-slot {
854
850
  cursor: not-allowed;
855
851
  background: hsl(var(--muted));
@@ -917,6 +913,73 @@
917
913
  border-radius: var(--radius-sm);
918
914
  }
919
915
 
916
+ .ui-segmented {
917
+ display: inline-flex;
918
+ max-width: 100%;
919
+ align-items: stretch;
920
+ padding: var(--segmented-track-padding);
921
+ border-radius: var(--segmented-track-radius);
922
+ background: hsl(var(--segmented-track-background));
923
+ color: hsl(var(--segmented-item-color));
924
+ font-size: var(--font-size-base);
925
+ }
926
+
927
+ .ui-segmented-item {
928
+ display: inline-flex;
929
+ min-width: 0;
930
+ height: var(--segmented-item-height);
931
+ align-items: center;
932
+ justify-content: center;
933
+ gap: var(--segmented-item-gap);
934
+ padding-inline: var(--segmented-item-padding-inline);
935
+ border: 0;
936
+ border-radius: var(--segmented-item-radius);
937
+ background: transparent;
938
+ color: inherit;
939
+ cursor: pointer;
940
+
941
+ font: inherit;
942
+ white-space: nowrap;
943
+
944
+ transition: color var(--duration-fast);
945
+ }
946
+
947
+ .ui-segmented-item:not([data-state="checked"]):not([data-disabled]):hover {
948
+ background: hsl(var(--segmented-item-hover-background));
949
+ color: hsl(var(--segmented-item-hover-color));
950
+ }
951
+ .ui-segmented-item:not([data-state="checked"]):not([data-disabled]):active {
952
+ background: hsl(var(--segmented-item-active-background));
953
+ }
954
+
955
+ .ui-segmented-item[data-state="checked"] {
956
+ background: hsl(var(--segmented-item-selected-background));
957
+ box-shadow: var(--segmented-item-selected-shadow);
958
+ color: hsl(var(--segmented-item-selected-color));
959
+ }
960
+
961
+ .ui-segmented-item[data-disabled] {
962
+ opacity: var(--disabled-opacity);
963
+ cursor: not-allowed;
964
+ }
965
+
966
+ .ui-segmented-item-label {
967
+ overflow: hidden;
968
+ text-overflow: ellipsis;
969
+ }
970
+
971
+ .ui-segmented-item-icon {
972
+ display: inline-flex;
973
+ flex: 0 0 auto;
974
+ align-items: center;
975
+ }
976
+ .ui-segmented-item-icon > svg {
977
+ width: var(--icon-size-md);
978
+ height: var(--icon-size-md);
979
+ display: inline-block;
980
+ vertical-align: middle;
981
+ }
982
+
920
983
  .ui-tag-input {
921
984
  display: flex;
922
985
  flex-wrap: wrap;
@@ -1008,6 +1071,11 @@
1008
1071
  cursor: not-allowed;
1009
1072
  }
1010
1073
 
1074
+ .ui-control-trigger[data-width="bounded"] {
1075
+ inline-size: var(--control-bounded-width);
1076
+ max-inline-size: 100%;
1077
+ }
1078
+
1011
1079
  .ui-control[data-size="sm"] {
1012
1080
  --control-height: var(--control-height-sm);
1013
1081
  }
@@ -1112,16 +1180,16 @@
1112
1180
  }
1113
1181
 
1114
1182
  .ui-search-select-panel {
1183
+ --popover-surface-inline-size: max-content;
1184
+ --popover-space-inset: 0;
1115
1185
  display: flex;
1116
1186
  flex-direction: column;
1117
1187
  max-block-size: var(--radix-popover-content-available-height);
1118
- inline-size: max-content;
1119
1188
  max-inline-size: min(
1120
1189
  var(--search-select-panel-max-width),
1121
1190
  calc(100vw - var(--search-select-panel-viewport-inset))
1122
1191
  );
1123
1192
  min-inline-size: var(--radix-popover-trigger-width);
1124
- padding: 0;
1125
1193
  }
1126
1194
 
1127
1195
  .ui-search-select-command {
@@ -1271,9 +1339,9 @@
1271
1339
  }
1272
1340
 
1273
1341
  .ui-cascader-popover {
1274
- inline-size: auto;
1342
+ --popover-surface-inline-size: auto;
1343
+ --popover-space-inset: 0;
1275
1344
  min-inline-size: var(--radix-popover-trigger-width);
1276
- padding: 0;
1277
1345
  }
1278
1346
 
1279
1347
  .ui-cascader-empty {
@@ -1479,13 +1547,13 @@
1479
1547
  }
1480
1548
 
1481
1549
  .ui-time-picker-popover {
1482
- inline-size: auto;
1483
- padding: 0;
1550
+ --popover-surface-inline-size: auto;
1551
+ --popover-space-inset: 0;
1484
1552
  }
1485
1553
 
1486
1554
  .ui-control-panel-flush {
1487
- inline-size: auto;
1488
- padding: 0;
1555
+ --popover-surface-inline-size: auto;
1556
+ --popover-space-inset: 0;
1489
1557
  }
1490
1558
 
1491
1559
  .ui-control-inline-affix-pair-affixed {
@@ -1584,8 +1652,8 @@
1584
1652
  @layer components {
1585
1653
 
1586
1654
  .ui-tree-select-popover {
1587
- inline-size: var(--radix-popover-trigger-width);
1588
- padding: 0;
1655
+ --popover-surface-inline-size: var(--radix-popover-trigger-width);
1656
+ --popover-space-inset: 0;
1589
1657
  }
1590
1658
 
1591
1659
  .ui-tree-select-list {
@@ -1968,8 +2036,8 @@
1968
2036
  }
1969
2037
 
1970
2038
  .ui-month-picker-panel {
1971
- inline-size: auto;
1972
- padding: var(--month-picker-panel-space-inset);
2039
+ --popover-surface-inline-size: auto;
2040
+ --popover-space-inset: var(--month-picker-panel-space-inset);
1973
2041
  }
1974
2042
 
1975
2043
  .ui-month-picker-nav {
@@ -2063,3 +2131,32 @@
2063
2131
  color: var(--button-count-secondary-color, hsl(var(--secondary)));
2064
2132
  }
2065
2133
  }
2134
+
2135
+ @layer components {
2136
+ .ui-button[data-wrap] {
2137
+ --button-wrap-min-height: var(--control-height);
2138
+ height: auto;
2139
+ min-height: var(--button-wrap-min-height);
2140
+ max-inline-size: 100%;
2141
+ padding-block: var(--space-1);
2142
+ white-space: normal;
2143
+ overflow-wrap: anywhere;
2144
+ }
2145
+ .ui-button[data-wrap][data-size="xs"] {
2146
+ --button-wrap-min-height: var(--control-height-xs);
2147
+ }
2148
+ .ui-button[data-wrap][data-size="sm"] {
2149
+ --button-wrap-min-height: var(--control-height-sm);
2150
+ }
2151
+ .ui-button[data-wrap][data-size="lg"] {
2152
+ --button-wrap-min-height: var(--control-height-lg);
2153
+ }
2154
+ .ui-button[data-align="start"] {
2155
+ justify-content: flex-start;
2156
+ text-align: start;
2157
+ }
2158
+ .ui-button[data-align="end"] {
2159
+ justify-content: flex-end;
2160
+ text-align: end;
2161
+ }
2162
+ }
@@ -412,7 +412,8 @@
412
412
  }
413
413
 
414
414
  .ui-carousel-viewport {
415
- overflow: hidden;
415
+ overflow: clip;
416
+ overflow-clip-margin: var(--focus-ring-clip-margin);
416
417
  }
417
418
 
418
419
  .ui-carousel-content {
@@ -983,7 +984,9 @@
983
984
  box-sizing: border-box;
984
985
  inline-size: calc(100% / var(--timeline-grid-event-lanes, 1));
985
986
  block-size: calc(var(--timeline-grid-hour-height) * var(--timeline-grid-event-span, 0));
986
- min-block-size: var(--timeline-grid-event-min-height);
987
+ min-block-size: calc(
988
+ var(--timeline-grid-hour-height) * var(--timeline-grid-event-min-height-minutes) / 60
989
+ );
987
990
  padding-inline-end: var(--timeline-grid-event-gap);
988
991
  padding-block-end: var(--timeline-grid-event-gap);
989
992
  }
@@ -1064,3 +1067,22 @@
1064
1067
  pointer-events: none;
1065
1068
  }
1066
1069
  }
1070
+
1071
+ @layer components {
1072
+ a.ui-list-row {
1073
+ color: inherit;
1074
+ text-decoration: none;
1075
+ cursor: pointer;
1076
+ }
1077
+ a.ui-list-row:hover {
1078
+ background: hsl(var(--muted));
1079
+ }
1080
+ a.ui-list-row[aria-current="page"] {
1081
+
1082
+ background: hsl(var(--accent));
1083
+ box-shadow: inset var(--space-1) 0 0 hsl(var(--primary));
1084
+ }
1085
+ [dir="rtl"] a.ui-list-row[aria-current="page"] {
1086
+ box-shadow: inset calc(-1 * var(--space-1)) 0 0 hsl(var(--primary));
1087
+ }
1088
+ }
@@ -256,7 +256,8 @@
256
256
 
257
257
  .ui-popover-content {
258
258
  z-index: var(--overlay-z-index);
259
- width: var(--popover-width);
259
+
260
+ width: var(--popover-surface-inline-size, var(--popover-width));
260
261
  padding: var(--popover-space-inset);
261
262
  border-radius: var(--popover-radius);
262
263
  border: 1px solid var(--popover-surface-border-color, hsl(var(--border)));
@@ -3,11 +3,13 @@
3
3
 
4
4
  :is(
5
5
  .ui-focus-ring,
6
- .ui-button,
7
- .ui-control,
6
+ .ui-focus-ring-outline,
8
7
  .ui-input,
8
+ .ui-control,
9
9
  .ui-control-multiline,
10
10
  .ui-control-trigger,
11
+ .ui-tag-input,
12
+ .ui-button,
11
13
  .ui-toggle,
12
14
  .ui-checkbox,
13
15
  .ui-radio,
@@ -17,35 +19,78 @@
17
19
  .ui-pagination-link,
18
20
  .ui-legal-document-toc-link,
19
21
  .ui-code-block,
22
+ .ui-accordion-trigger,
23
+ .ui-carousel-dot,
24
+ .ui-rating-star,
25
+ a.ui-list-row,
26
+ .sb-nav-item,
20
27
  .sb-user,
21
28
  .tb-icon-btn
22
29
  ):focus-visible,
23
30
  .ui-control-trigger[data-state="open"],
24
31
  .ui-tag-input:focus-within,
25
32
  .ui-control-composite-field:focus-within,
26
- .ui-control-composite-field[data-state="open"] {
27
- outline: none;
33
+ .ui-control-composite-field[data-state="open"],
34
+ .ui-otp-slot[data-active="true"],
35
+ .ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
36
+ outline: var(--focus-ring-width) solid
37
+ hsl(var(--focus-outline-color) / var(--focus-ring-opacity, 1));
38
+ outline-offset: var(--focus-ring-offset);
28
39
 
29
- --tw-ring-shadow: 0 0 0 var(--focus-ring-width)
30
- hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
31
- box-shadow: 0 0 0 var(--focus-ring-width)
32
- hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
40
+ transition:
41
+ outline-offset 0s,
42
+ outline 0s;
33
43
  }
34
44
 
35
- :is(
36
- .ui-focus-ring-outline,
37
- .ui-accordion-trigger,
38
- .ui-carousel-dot,
39
- .ui-rating-star,
40
- .ui-legal-document-section
41
- ):focus-visible {
42
- outline: var(--focus-ring-width) solid
43
- hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
44
- outline-offset: var(--focus-ring-offset, 0px);
45
+ :root[data-focus-outline="on"]
46
+ :is(
47
+ .ui-focus-ring,
48
+ .ui-focus-ring-outline,
49
+ .ui-input,
50
+ .ui-control,
51
+ .ui-control-multiline,
52
+ .ui-control-trigger,
53
+ .ui-tag-input,
54
+ .ui-button,
55
+ .ui-toggle,
56
+ .ui-checkbox,
57
+ .ui-radio,
58
+ .ui-slider-thumb,
59
+ .ui-switch,
60
+ .ui-steps-inline-control,
61
+ .ui-pagination-link,
62
+ .ui-legal-document-toc-link,
63
+ .ui-code-block,
64
+ .ui-accordion-trigger,
65
+ .ui-carousel-dot,
66
+ .ui-rating-star,
67
+ a.ui-list-row,
68
+ .sb-nav-item,
69
+ .sb-user,
70
+ .tb-icon-btn
71
+ ):focus-visible,
72
+ :root[data-focus-outline="on"] .ui-control-trigger[data-state="open"],
73
+ :root[data-focus-outline="on"] .ui-tag-input:focus-within,
74
+ :root[data-focus-outline="on"] .ui-control-composite-field:focus-within,
75
+ :root[data-focus-outline="on"] .ui-control-composite-field[data-state="open"],
76
+ :root[data-focus-outline="on"] .ui-otp-slot[data-active="true"],
77
+ :root[data-focus-outline="on"]
78
+ .ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
79
+ --tw-ring-shadow: var(--focus-field-shadow);
80
+ box-shadow: var(--focus-field-shadow);
81
+ }
82
+
83
+ :root[data-focus-outline="on"]
84
+ :is(.ui-input, .ui-control, .ui-control-multiline, .ui-control-trigger, .ui-tag-input):focus-visible,
85
+ :root[data-focus-outline="on"] .ui-control-trigger[data-state="open"],
86
+ :root[data-focus-outline="on"] .ui-tag-input:focus-within,
87
+ :root[data-focus-outline="on"] .ui-control-composite-field:focus-within,
88
+ :root[data-focus-outline="on"] .ui-control-composite-field[data-state="open"] {
89
+ --input: var(--focus-ring-color, var(--ring));
45
90
  }
46
91
 
47
92
  .ui-toggle {
48
- --focus-ring-width: var(--toggle-focus-ring-width);
93
+ --focus-ring-weight: var(--toggle-focus-ring-width);
49
94
  --focus-ring-opacity: var(--toggle-focus-ring-alpha);
50
95
  }
51
96
 
@@ -57,6 +102,12 @@
57
102
  --focus-ring-opacity: var(--topbar-icon-focus-ring-alpha);
58
103
  }
59
104
 
105
+ a.ui-list-row,
106
+ tr.ui-focus-ring,
107
+ .sb-nav-item {
108
+ --focus-ring-offset: calc(-1 * var(--focus-ring-width));
109
+ }
110
+
60
111
  .ui-accordion-trigger {
61
112
  --focus-ring-offset: var(--accordion-focus-ring-offset);
62
113
  }
@@ -69,13 +120,24 @@
69
120
  --focus-ring-offset: var(--rating-focus-ring-offset);
70
121
  }
71
122
 
72
- .ui-legal-document-section {
73
- --focus-ring-offset: var(--legal-document-section-focus-ring-offset);
123
+ :is(.ui-control, .ui-input, .ui-control-multiline, .ui-tag-input):not(
124
+ .ui-app-setting-picker-icon,
125
+ .ui-app-setting-picker-inline
126
+ ) {
127
+ --focus-ring-weight: var(--control-focus-ring-width);
74
128
  }
75
129
 
76
130
  .ui-command-input:focus-visible {
77
- --focus-ring-width: 0;
131
+ --focus-field-shadow: none;
132
+ --focus-ring-weight: 0px;
78
133
  outline: none;
79
134
  box-shadow: none;
80
135
  }
136
+
137
+ [aria-invalid="true"] {
138
+ --focus-ring-color: var(--destructive);
139
+ --focus-outline-color: var(--destructive);
140
+ --focus-ring-glow-color: var(--control-outline-error);
141
+ --focus-ring-glow-alpha: var(--control-outline-error-alpha);
142
+ }
81
143
  }
@@ -1,6 +1,12 @@
1
1
 
2
2
 
3
3
  @layer components {
4
+
5
+ .ui-form-field-required {
6
+ margin-inline-start: var(--space-inline-xs);
7
+ color: hsl(var(--destructive));
8
+ }
9
+
4
10
  .ui-form {
5
11
  display: flex;
6
12
  flex-direction: column;
@@ -80,7 +80,8 @@
80
80
  }
81
81
 
82
82
  .ui-aspect-ratio {
83
- overflow: hidden;
83
+ overflow: clip;
84
+ overflow-clip-margin: var(--focus-ring-clip-margin);
84
85
  }
85
86
 
86
87
  .ui-brand-glow {
@@ -239,7 +240,7 @@
239
240
  .ui-responsive-grid {
240
241
  display: grid;
241
242
  gap: var(--space-stack-md);
242
- grid-template-columns: minmax(0, 1fr);
243
+ grid-template-columns: repeat(var(--responsive-grid-base, 1), minmax(0, 1fr));
243
244
  }
244
245
 
245
246
  .ui-responsive-grid[data-gap="none"] {
@@ -1348,3 +1349,38 @@
1348
1349
  }
1349
1350
  }
1350
1351
  }
1352
+
1353
+ @layer components {
1354
+ .ui-master-detail-back {
1355
+ display: none;
1356
+ }
1357
+ .ui-master-detail[data-mobile-pane] {
1358
+ position: relative;
1359
+ }
1360
+ .ui-master-detail-measure {
1361
+ position: absolute;
1362
+ inset-inline: 0;
1363
+ inset-block-start: 0;
1364
+ block-size: 0;
1365
+ overflow: hidden;
1366
+ visibility: hidden;
1367
+ pointer-events: none;
1368
+ }
1369
+ .ui-master-detail-measure > span {
1370
+ display: block;
1371
+ inline-size: var(--master-detail-collapse-below);
1372
+ block-size: 0;
1373
+ }
1374
+ .ui-master-detail[data-mobile-compact][data-mobile-pane="master"] > .ui-master-detail-detail,
1375
+ .ui-master-detail[data-mobile-compact][data-mobile-pane="detail"] > .ui-master-detail-master {
1376
+ display: none;
1377
+ }
1378
+ .ui-master-detail[data-mobile-compact] > .ui-master-detail-master {
1379
+ max-block-size: none;
1380
+ overflow: visible;
1381
+ }
1382
+ .ui-master-detail[data-mobile-compact] .ui-master-detail-back {
1383
+ display: block;
1384
+ margin-block-end: var(--space-3);
1385
+ }
1386
+ }
@@ -15,6 +15,62 @@
15
15
  user-select: none;
16
16
  }
17
17
 
18
+ .ui-logo-glyph {
19
+ --logo-glyph-advance-width: max(
20
+ var(--logo-glyph-fullwidth-width),
21
+ calc(
22
+ var(--logo-glyph-fullwidth-count, 0) * var(--logo-glyph-fullwidth-width) +
23
+ var(--logo-glyph-wide-count, 0) * var(--logo-glyph-wide-width) +
24
+ var(--logo-glyph-narrow-count, 0) * var(--logo-glyph-narrow-width) +
25
+ var(--logo-glyph-space-count, 0) * var(--logo-glyph-space-width)
26
+ )
27
+ );
28
+
29
+ white-space: nowrap;
30
+ font-size: min(
31
+ var(--logo-font-size-md),
32
+ calc(var(--logo-size-md) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
33
+ );
34
+ translate: 0 var(--logo-glyph-optical-offset, 0em);
35
+ }
36
+
37
+ .ui-logo[data-size="xs"] .ui-logo-glyph {
38
+ font-size: min(
39
+ var(--logo-font-size-xs),
40
+ calc(var(--logo-size-xs) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
41
+ );
42
+ }
43
+
44
+ .ui-logo[data-size="sm"] .ui-logo-glyph {
45
+ font-size: min(
46
+ var(--logo-font-size-sm),
47
+ calc(var(--logo-size-sm) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
48
+ );
49
+ }
50
+
51
+ .ui-logo[data-size="lg"] .ui-logo-glyph {
52
+ font-size: min(
53
+ var(--logo-font-size-lg),
54
+ calc(var(--logo-size-lg) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
55
+ );
56
+ }
57
+
58
+ .ui-logo-glyph[data-ink="cap-baseline"] {
59
+ translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-cap-baseline-optical-offset));
60
+ }
61
+
62
+ .ui-logo-glyph[data-ink="cap-descender"] {
63
+ translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-cap-descender-optical-offset));
64
+ }
65
+
66
+ .ui-logo-glyph[data-ink="x-baseline"] {
67
+ translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-x-baseline-optical-offset));
68
+ }
69
+
70
+ .ui-logo-glyph[data-ink="x-descender"] {
71
+ translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-x-descender-optical-offset));
72
+ }
73
+
18
74
  .ui-logo[data-size="xs"] {
19
75
  width: var(--logo-size-xs);
20
76
  height: var(--logo-size-xs);
@@ -82,7 +82,8 @@
82
82
  }
83
83
  }
84
84
 
85
- .ui-pagination .ui-button svg {
85
+ .ui-pagination .ui-button svg,
86
+ .ui-pagination .ui-pagination-link svg {
86
87
  inline-size: var(--pagination-icon-size);
87
88
  block-size: var(--pagination-icon-size);
88
89
  }
@@ -126,6 +127,20 @@
126
127
  font-size: var(--menu-item-font-size);
127
128
  }
128
129
 
130
+ .ui-context-menu-item > svg,
131
+ .ui-context-menu-checkbox-item > svg,
132
+ .ui-context-menu-radio-item > svg,
133
+ .ui-menubar-item > svg,
134
+ .ui-menubar-checkbox-item > svg,
135
+ .ui-menubar-radio-item > svg,
136
+ .ui-dropdown-menu-item > svg,
137
+ .ui-dropdown-menu-checkbox-item > svg,
138
+ .ui-dropdown-menu-radio-item > svg {
139
+ width: var(--menu-icon-size);
140
+ height: var(--menu-icon-size);
141
+ flex: 0 0 auto;
142
+ }
143
+
129
144
  .ui-dropdown-menu-item[data-inset="true"],
130
145
  .ui-dropdown-menu-label[data-inset="true"],
131
146
  .ui-dropdown-menu-sub-trigger[data-inset="true"] {
@@ -208,6 +223,7 @@
208
223
  .ui-context-menu-label,
209
224
  .ui-menubar-label,
210
225
  .ui-dropdown-menu-label {
226
+ height: auto;
211
227
  min-height: var(--menu-item-height);
212
228
  color: hsl(var(--muted-foreground));
213
229
  font-weight: var(--font-weight-medium);