@godxjp/ui 20.1.0 → 20.2.1

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 (55) hide show
  1. package/dist/app/app-provider.js +37 -21
  2. package/dist/app/index.d.ts +2 -0
  3. package/dist/app/index.js +2 -0
  4. package/dist/app/storage.d.ts +17 -0
  5. package/dist/app/storage.js +28 -0
  6. package/dist/components/data-display/popover.d.ts +7 -1
  7. package/dist/components/data-display/popover.js +4 -0
  8. package/dist/components/data-display/service-launcher-card.js +4 -2
  9. package/dist/components/data-display/table.d.ts +60 -0
  10. package/dist/components/data-display/table.js +8 -0
  11. package/dist/components/data-entry/calendar.d.ts +1 -1
  12. package/dist/components/data-entry/calendar.js +11 -2
  13. package/dist/components/feedback/dialog.js +3 -0
  14. package/dist/components/feedback/sheet.js +3 -0
  15. package/dist/components/feedback/tooltip.js +3 -0
  16. package/dist/components/general/button.d.ts +1 -0
  17. package/dist/components/general/button.js +2 -0
  18. package/dist/components/layout/app-launcher.d.ts +1 -1
  19. package/dist/components/layout/app-launcher.js +43 -10
  20. package/dist/components/layout/app-shell.d.ts +1 -1
  21. package/dist/components/layout/app-shell.js +14 -7
  22. package/dist/components/layout/auth-shell.d.ts +1 -1
  23. package/dist/components/layout/auth-shell.js +2 -0
  24. package/dist/components/layout/org-switcher.js +22 -2
  25. package/dist/components/layout/sidebar.js +2 -1
  26. package/dist/components/navigation/dropdown-menu.js +5 -0
  27. package/dist/components/ui/hover-card.js +3 -0
  28. package/dist/i18n/index.d.ts +1 -1
  29. package/dist/i18n/index.js +3 -1
  30. package/dist/i18n/messages/en.json +8 -1
  31. package/dist/i18n/messages/ja.json +8 -1
  32. package/dist/i18n/messages/vi.json +8 -1
  33. package/dist/i18n/translate.d.ts +19 -0
  34. package/dist/i18n/translate.js +24 -0
  35. package/dist/lib/overlay-portal.d.ts +18 -0
  36. package/dist/lib/overlay-portal.js +17 -0
  37. package/dist/props/components/app.prop.d.ts +13 -2
  38. package/dist/props/components/general.prop.d.ts +13 -0
  39. package/dist/props/components/layout.prop.d.ts +95 -5
  40. package/dist/styles/card-layout.css +10 -1
  41. package/dist/styles/chart-layout.css +2 -1
  42. package/dist/styles/control.css +5 -0
  43. package/dist/styles/data-display-layout.css +7 -1
  44. package/dist/styles/navigation-layout.css +3 -1
  45. package/dist/styles/shell-layout.css +496 -22
  46. package/dist/tokens/components/control.css +2 -1
  47. package/dist/tokens/components/shell.css +59 -3
  48. package/dist/tokens/foundation.css +2 -0
  49. package/docs/data-display/list-row.tsx +6 -6
  50. package/docs/layout/app-launcher.tsx +44 -0
  51. package/docs/layout/app-shell-arrangements.tsx +5 -5
  52. package/docs/showcase/settings-security-mfa.tsx +3 -3
  53. package/package.json +7 -4
  54. package/scripts/_agent-setup.mjs +57 -7
  55. package/scripts/visual-audit.mjs +45 -7
@@ -27,7 +27,7 @@
27
27
  "sidebar footer";
28
28
  }
29
29
 
30
- .app-root[data-nav-rail] {
30
+ .app-root[data-nav-rail][data-nav-rail-position="start"] {
31
31
  grid-template-areas:
32
32
  "navrail sidebar topbar"
33
33
  "navrail sidebar main"
@@ -38,18 +38,94 @@
38
38
  minmax(0, 1fr);
39
39
  }
40
40
 
41
- .app-root[data-nav-rail][data-collapsed="true"] {
41
+ .app-root[data-nav-rail][data-nav-rail-position="start"][data-topbar-span="full"] {
42
+ grid-template-areas:
43
+ "topbar topbar topbar"
44
+ "navrail sidebar main"
45
+ "navrail sidebar footer";
46
+ }
47
+
48
+ .app-root[data-nav-rail][data-nav-rail-position="end"] {
49
+ grid-template-areas:
50
+ "sidebar topbar navrail"
51
+ "sidebar main navrail"
52
+ "sidebar footer navrail";
53
+ grid-template-columns:
54
+ var(--app-shell-sidebar-width)
55
+ minmax(0, 1fr)
56
+ var(--app-shell-nav-rail-width);
57
+ }
58
+
59
+ .app-root[data-nav-rail][data-nav-rail-position="end"][data-topbar-span="full"] {
60
+ grid-template-areas:
61
+ "topbar topbar topbar"
62
+ "sidebar main navrail"
63
+ "sidebar footer navrail";
64
+ }
65
+
66
+ .app-root[data-nav-rail][data-nav-rail-position="top"] {
67
+ grid-template-areas:
68
+ "navrail navrail"
69
+ "sidebar topbar"
70
+ "sidebar main"
71
+ "sidebar footer";
72
+ grid-template-columns: var(--app-shell-sidebar-width) minmax(0, 1fr);
73
+ grid-template-rows:
74
+ var(--app-shell-nav-rail-height)
75
+ var(--app-shell-bar-height)
76
+ minmax(0, 1fr)
77
+ auto;
78
+ }
79
+
80
+ .app-root[data-nav-rail][data-nav-rail-position="top"][data-topbar-span="full"] {
81
+ grid-template-areas:
82
+ "navrail navrail"
83
+ "topbar topbar"
84
+ "sidebar main"
85
+ "sidebar footer";
86
+ }
87
+
88
+ .app-root[data-nav-rail][data-nav-rail-position="bottom"] {
89
+ grid-template-areas:
90
+ "sidebar topbar"
91
+ "sidebar main"
92
+ "sidebar footer"
93
+ "navrail navrail";
94
+ grid-template-columns: var(--app-shell-sidebar-width) minmax(0, 1fr);
95
+ grid-template-rows:
96
+ var(--app-shell-bar-height)
97
+ minmax(0, 1fr)
98
+ auto
99
+ var(--app-shell-nav-rail-height);
100
+ }
101
+
102
+ .app-root[data-nav-rail][data-nav-rail-position="bottom"][data-topbar-span="full"] {
103
+ grid-template-areas:
104
+ "topbar topbar"
105
+ "sidebar main"
106
+ "sidebar footer"
107
+ "navrail navrail";
108
+ }
109
+
110
+ .app-root[data-nav-rail][data-nav-rail-position="start"][data-collapsed="true"] {
42
111
  grid-template-columns:
43
112
  var(--app-shell-nav-rail-width)
44
113
  var(--app-shell-sidebar-collapsed-width)
45
114
  minmax(0, 1fr);
46
115
  }
47
116
 
48
- .app-root[data-nav-rail][data-topbar-span="full"] {
49
- grid-template-areas:
50
- "topbar topbar topbar"
51
- "navrail sidebar main"
52
- "navrail sidebar footer";
117
+ .app-root[data-nav-rail][data-nav-rail-position="end"][data-collapsed="true"] {
118
+ grid-template-columns:
119
+ var(--app-shell-sidebar-collapsed-width)
120
+ minmax(0, 1fr)
121
+ var(--app-shell-nav-rail-width);
122
+ }
123
+
124
+ .app-root[data-nav-rail]:is(
125
+ [data-nav-rail-position="top"],
126
+ [data-nav-rail-position="bottom"]
127
+ )[data-collapsed="true"] {
128
+ grid-template-columns: var(--app-shell-sidebar-collapsed-width) minmax(0, 1fr);
53
129
  }
54
130
 
55
131
  .app-root[data-topbar="none"] {
@@ -91,6 +167,75 @@
91
167
  border-inline-end: 1px solid hsl(var(--border));
92
168
  background: hsl(var(--muted));
93
169
  color: hsl(var(--foreground));
170
+ padding-block: var(--app-shell-nav-rail-inset);
171
+ }
172
+
173
+ .app-nav-rail > .app-nav-rail-end,
174
+ .app-mobile-nav-rail > .app-nav-rail-end {
175
+ display: flex;
176
+ flex: 0 0 auto;
177
+ flex-direction: column;
178
+ align-items: center;
179
+ gap: var(--space-1);
180
+ margin-block-start: auto;
181
+ }
182
+
183
+ .app-nav-rail[data-orientation="horizontal"] > .app-nav-rail-end {
184
+ flex-direction: row;
185
+ margin-block-start: 0;
186
+ margin-inline-start: auto;
187
+ }
188
+
189
+ .app-nav-rail,
190
+ .app-mobile-nav-rail {
191
+ --org-switcher-trigger-height: var(--app-shell-nav-rail-item-size);
192
+
193
+ --control-height-sm: var(--app-shell-nav-rail-item-size);
194
+ }
195
+
196
+ .app-nav-rail[data-edge="end"] {
197
+ border-inline-start: 1px solid hsl(var(--border));
198
+ border-inline-end: 0;
199
+ }
200
+
201
+ .app-nav-rail[data-orientation="horizontal"] {
202
+ flex-direction: row;
203
+ width: 100%;
204
+ height: auto;
205
+ border-inline-end: 0;
206
+ padding-block: 0;
207
+ padding-inline: var(--app-shell-nav-rail-inset);
208
+ }
209
+
210
+ .app-nav-rail[data-orientation="horizontal"] > .ui-org-switcher {
211
+ inline-size: auto;
212
+ }
213
+
214
+ .app-nav-rail[data-edge="top"] {
215
+ border-block-end: 1px solid hsl(var(--border));
216
+ }
217
+
218
+ .app-nav-rail[data-edge="bottom"] {
219
+ border-block-start: 1px solid hsl(var(--border));
220
+ }
221
+
222
+ .app-root:not([data-topbar-span="full"]):is(
223
+ [data-nav-rail-position="start"],
224
+ [data-nav-rail-position="end"]
225
+ )
226
+ > .app-nav-rail {
227
+ padding-block-start: 0;
228
+ }
229
+
230
+ .app-root:not([data-topbar-span="full"]):is(
231
+ [data-nav-rail-position="start"],
232
+ [data-nav-rail-position="end"]
233
+ )
234
+ > .app-nav-rail
235
+ > :first-child {
236
+ min-block-size: var(--app-shell-bar-height);
237
+
238
+ align-items: center;
94
239
  }
95
240
 
96
241
  .app-topbar {
@@ -275,11 +420,37 @@
275
420
  --auth-shell-card-stack-gap: var(--auth-shell-registration-card-stack-gap);
276
421
  }
277
422
 
423
+ .ui-auth-shell[data-preset="registration"] .ui-auth-shell-card {
424
+ margin-block: auto;
425
+ }
426
+
278
427
  .ui-auth-shell[data-preset="registration"] .ui-auth-shell-card > .ui-auth-identity {
279
428
  block-size: var(--auth-shell-registration-identity-slot-block-size);
280
429
  justify-content: flex-end;
281
430
  }
282
431
 
432
+ .ui-auth-shell[data-align="center"] {
433
+ --auth-shell-main-align: center;
434
+ }
435
+
436
+ .ui-auth-shell[data-align="anchored"] {
437
+ --auth-shell-main-align: flex-start;
438
+ }
439
+
440
+ .ui-auth-shell[data-preset="login"][data-align="center"] {
441
+ --auth-shell-login-flow-offset-block: var(--auth-shell-login-main-padding-block-end);
442
+ --auth-shell-login-flow-offset-block-mobile: var(--auth-shell-login-main-padding-block-end);
443
+ }
444
+
445
+ .ui-auth-shell[data-preset="registration"][data-align="center"] {
446
+ --auth-shell-registration-main-padding-block-start: var(
447
+ --auth-shell-registration-main-padding-block-end
448
+ );
449
+ --auth-shell-registration-main-padding-block-start-mobile: var(
450
+ --auth-shell-registration-main-padding-block-end-mobile
451
+ );
452
+ }
453
+
283
454
  .ui-auth-identity {
284
455
  display: flex;
285
456
  flex-direction: column;
@@ -372,6 +543,12 @@
372
543
  gap: var(--auth-footer-content-gap);
373
544
  }
374
545
 
546
+ .ui-auth-legal-footer :is(a, button) {
547
+ display: inline-flex;
548
+ align-items: center;
549
+ min-block-size: var(--auth-footer-target-min-size);
550
+ }
551
+
375
552
  .ui-auth-stack {
376
553
  display: flex;
377
554
  flex-direction: column;
@@ -639,13 +816,44 @@
639
816
  font-size: var(--font-size-base);
640
817
  }
641
818
 
642
- .app-root:where([data-sidebar="none"])[data-nav-rail] {
819
+ .app-root:where([data-sidebar="none"])[data-nav-rail][data-nav-rail-position="start"] {
643
820
  grid-template-columns: var(--app-shell-nav-rail-width) minmax(0, 1fr);
644
821
  grid-template-areas: "navrail topbar" "navrail main" "navrail footer";
645
822
  }
646
- .app-root:where([data-sidebar="none"])[data-nav-rail][data-topbar-span="full"] {
823
+ .app-root:where([data-sidebar="none"])[data-nav-rail][data-nav-rail-position="start"][data-topbar-span="full"] {
647
824
  grid-template-areas: "topbar topbar" "navrail main" "navrail footer";
648
825
  }
826
+ .app-root:where([data-sidebar="none"])[data-nav-rail][data-nav-rail-position="end"] {
827
+ grid-template-columns: minmax(0, 1fr) var(--app-shell-nav-rail-width);
828
+ grid-template-areas: "topbar navrail" "main navrail" "footer navrail";
829
+ }
830
+ .app-root:where([data-sidebar="none"])[data-nav-rail][data-nav-rail-position="end"][data-topbar-span="full"] {
831
+ grid-template-areas: "topbar topbar" "main navrail" "footer navrail";
832
+ }
833
+
834
+ .app-root:where([data-sidebar="none"])[data-nav-rail][data-nav-rail-position="top"] {
835
+ grid-template-columns: minmax(0, 1fr);
836
+ grid-template-areas: "navrail" "topbar" "main" "footer";
837
+ grid-template-rows:
838
+ var(--app-shell-nav-rail-height)
839
+ var(--app-shell-bar-height)
840
+ minmax(0, 1fr)
841
+ auto;
842
+ }
843
+ .app-root:where([data-sidebar="none"])[data-nav-rail][data-nav-rail-position="top"][data-topbar-span="full"] {
844
+ grid-template-areas: "navrail" "topbar" "main" "footer";
845
+ }
846
+ .app-root:where([data-sidebar="none"])[data-nav-rail]:is(
847
+ [data-nav-rail-position="bottom"]
848
+ ) {
849
+ grid-template-columns: minmax(0, 1fr);
850
+ grid-template-areas: "topbar" "main" "footer" "navrail";
851
+ grid-template-rows:
852
+ var(--app-shell-bar-height)
853
+ minmax(0, 1fr)
854
+ auto
855
+ var(--app-shell-nav-rail-height);
856
+ }
649
857
 
650
858
  @media (width <= 56.25rem) {
651
859
  .app-root,
@@ -665,6 +873,13 @@
665
873
  display: none;
666
874
  }
667
875
 
876
+ .app-root[data-nav-rail]:is(
877
+ [data-nav-rail-position="top"],
878
+ [data-nav-rail-position="bottom"]
879
+ ) {
880
+ grid-template-rows: var(--app-shell-bar-height) minmax(0, 1fr) auto;
881
+ }
882
+
668
883
  .app-root[data-topbar="none"] > .app-topbar {
669
884
  display: flex;
670
885
  }
@@ -696,7 +911,7 @@
696
911
  "sidebar footer";
697
912
  }
698
913
 
699
- .app-root[data-responsive-navigation="docked"][data-nav-rail] {
914
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="start"] {
700
915
  grid-template-areas:
701
916
  "navrail sidebar topbar"
702
917
  "navrail sidebar main"
@@ -707,20 +922,96 @@
707
922
  minmax(0, 1fr);
708
923
  }
709
924
 
710
- .app-root[data-responsive-navigation="docked"][data-nav-rail][data-collapsed="true"] {
925
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="start"][data-collapsed="true"] {
711
926
  grid-template-columns:
712
927
  var(--app-shell-nav-rail-width)
713
928
  var(--app-shell-sidebar-collapsed-width)
714
929
  minmax(0, 1fr);
715
930
  }
716
931
 
717
- .app-root[data-responsive-navigation="docked"][data-nav-rail][data-topbar-span="full"] {
932
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="start"][data-topbar-span="full"] {
718
933
  grid-template-areas:
719
934
  "topbar topbar topbar"
720
935
  "navrail sidebar main"
721
936
  "navrail sidebar footer";
722
937
  }
723
938
 
939
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="end"] {
940
+ grid-template-areas:
941
+ "sidebar topbar navrail"
942
+ "sidebar main navrail"
943
+ "sidebar footer navrail";
944
+ grid-template-columns:
945
+ var(--app-shell-sidebar-width)
946
+ minmax(0, 1fr)
947
+ var(--app-shell-nav-rail-width);
948
+ }
949
+
950
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="end"][data-collapsed="true"] {
951
+ grid-template-columns:
952
+ var(--app-shell-sidebar-collapsed-width)
953
+ minmax(0, 1fr)
954
+ var(--app-shell-nav-rail-width);
955
+ }
956
+
957
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="end"][data-topbar-span="full"] {
958
+ grid-template-areas:
959
+ "topbar topbar topbar"
960
+ "sidebar main navrail"
961
+ "sidebar footer navrail";
962
+ }
963
+
964
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="top"] {
965
+ grid-template-areas:
966
+ "navrail navrail"
967
+ "sidebar topbar"
968
+ "sidebar main"
969
+ "sidebar footer";
970
+ grid-template-columns: var(--app-shell-sidebar-width) minmax(0, 1fr);
971
+ grid-template-rows:
972
+ var(--app-shell-nav-rail-height)
973
+ var(--app-shell-bar-height)
974
+ minmax(0, 1fr)
975
+ auto;
976
+ }
977
+
978
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="top"][data-topbar-span="full"] {
979
+ grid-template-areas:
980
+ "navrail navrail"
981
+ "topbar topbar"
982
+ "sidebar main"
983
+ "sidebar footer";
984
+ }
985
+
986
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="bottom"] {
987
+ grid-template-areas:
988
+ "sidebar topbar"
989
+ "sidebar main"
990
+ "sidebar footer"
991
+ "navrail navrail";
992
+ grid-template-columns: var(--app-shell-sidebar-width) minmax(0, 1fr);
993
+ grid-template-rows:
994
+ var(--app-shell-bar-height)
995
+ minmax(0, 1fr)
996
+ auto
997
+ var(--app-shell-nav-rail-height);
998
+ }
999
+
1000
+ .app-root[data-responsive-navigation="docked"][data-nav-rail]:is(
1001
+ [data-nav-rail-position="top"],
1002
+ [data-nav-rail-position="bottom"]
1003
+ )[data-collapsed="true"] {
1004
+ grid-template-columns: var(--app-shell-sidebar-collapsed-width) minmax(0, 1fr);
1005
+ }
1006
+
1007
+ .app-root[data-responsive-navigation="docked"][data-nav-rail][data-nav-rail-position="bottom"][data-topbar-span="full"] {
1008
+ grid-template-areas:
1009
+ "topbar topbar"
1010
+ "sidebar main"
1011
+ "sidebar footer"
1012
+ "navrail navrail";
1013
+ }
1014
+
724
1015
  .app-root[data-responsive-navigation="docked"] > .app-sidebar,
725
1016
  .app-root[data-responsive-navigation="docked"] > .app-nav-rail {
726
1017
  display: flex;
@@ -800,10 +1091,10 @@
800
1091
  }
801
1092
 
802
1093
  .ui-org-switcher-name,
1094
+
803
1095
  .ui-org-switcher-meta {
804
1096
  overflow: hidden;
805
-
806
- line-height: var(--line-height-tight);
1097
+ line-height: var(--line-height-normal);
807
1098
  text-overflow: ellipsis;
808
1099
  white-space: nowrap;
809
1100
  }
@@ -845,6 +1136,7 @@
845
1136
 
846
1137
  [data-slot="dialog-content"].ui-org-switcher-dialog {
847
1138
 
1139
+ --dialog-space-x: var(--org-switcher-sheet-inset);
848
1140
  --dialog-space-inset: var(--dialog-space-y) var(--org-switcher-sheet-inset);
849
1141
  --org-switcher-list-offset: var(--org-switcher-sheet-inset);
850
1142
  max-inline-size: var(--org-switcher-dialog-width);
@@ -880,14 +1172,38 @@
880
1172
 
881
1173
  .ui-org-switcher-command .ui-command-item {
882
1174
  border-radius: 0;
883
- margin-inline: 0;
884
- padding-inline: var(--command-input-padding-x);
1175
+ margin-inline: calc(-1 * var(--org-switcher-list-inset));
1176
+ padding-inline: calc(var(--org-switcher-list-inset) + var(--command-input-padding-x));
885
1177
  }
886
1178
 
887
1179
  .ui-org-switcher-command .ui-command-item + .ui-command-item {
888
1180
  border-block-start: 1px solid hsl(var(--border));
889
1181
  }
890
1182
 
1183
+ [data-slot="dialog-footer"]:has(> .ui-org-switcher-legend),
1184
+ [data-slot="sheet-footer"]:has(> .ui-org-switcher-legend) {
1185
+ justify-content: flex-start;
1186
+ }
1187
+
1188
+ .ui-org-switcher-legend {
1189
+ display: flex;
1190
+ flex-wrap: wrap;
1191
+ align-items: center;
1192
+ gap: var(--org-switcher-legend-space-gap);
1193
+ color: hsl(var(--muted-foreground));
1194
+ font-size: var(--org-switcher-legend-font-size);
1195
+ }
1196
+
1197
+ .ui-org-switcher-hint {
1198
+ display: inline-flex;
1199
+ align-items: center;
1200
+ gap: var(--org-switcher-hint-space-gap);
1201
+ }
1202
+
1203
+ .ui-org-switcher-hint > .kbd {
1204
+ margin-inline-start: 0;
1205
+ }
1206
+
891
1207
  .ui-org-switcher-state {
892
1208
  display: flex;
893
1209
  min-height: var(--org-switcher-state-min-height);
@@ -919,6 +1235,148 @@
919
1235
  border-start-end-radius: var(--radius-lg);
920
1236
  }
921
1237
 
1238
+ [data-slot="dialog-overlay"].ui-app-launcher-launchpad-overlay {
1239
+
1240
+ container: app-launcher-launchpad / inline-size;
1241
+
1242
+ background-color: var(
1243
+ --app-launcher-launchpad-backdrop-background,
1244
+ color-mix(
1245
+ in srgb,
1246
+ hsl(var(--background)) var(--app-launcher-launchpad-backdrop-alpha),
1247
+ transparent
1248
+ )
1249
+ );
1250
+ backdrop-filter: blur(var(--app-launcher-launchpad-backdrop-blur-size))
1251
+ saturate(var(--app-launcher-launchpad-backdrop-color-saturate));
1252
+
1253
+ display: grid;
1254
+
1255
+ padding: var(--app-launcher-launchpad-space-safe-area);
1256
+ place-items: start;
1257
+ }
1258
+
1259
+ [data-slot="dialog-content"].ui-app-launcher-launchpad {
1260
+ position: relative;
1261
+ inset: auto;
1262
+ display: grid;
1263
+ width: auto;
1264
+ max-width: min(
1265
+ var(--app-launcher-launchpad-panel-max-width),
1266
+ calc(100vw - 2 * var(--app-launcher-launchpad-space-inset))
1267
+ );
1268
+ max-height: calc(100dvh - 2 * var(--app-launcher-launchpad-space-inset));
1269
+ justify-items: start;
1270
+ transform: none;
1271
+ border: 0;
1272
+ border-radius: 0;
1273
+ background: none;
1274
+ padding: var(--app-launcher-launchpad-space-inset);
1275
+ overflow: auto;
1276
+ box-shadow: none;
1277
+ }
1278
+
1279
+ .ui-app-launcher-launchpad .ui-app-launcher-panel {
1280
+ --app-launcher-columns: 3;
1281
+
1282
+ max-height: none;
1283
+ gap: var(--app-launcher-launchpad-panel-gap);
1284
+ overflow: visible;
1285
+ }
1286
+
1287
+ @container app-launcher-launchpad (min-width: 40rem) {
1288
+ .ui-app-launcher-launchpad .ui-app-launcher-panel {
1289
+ --app-launcher-columns: 4;
1290
+ }
1291
+ }
1292
+
1293
+ @container app-launcher-launchpad (min-width: 48rem) {
1294
+ .ui-app-launcher-launchpad .ui-app-launcher-panel {
1295
+ --app-launcher-columns: 5;
1296
+ }
1297
+ }
1298
+
1299
+ @container app-launcher-launchpad (min-width: 64rem) {
1300
+ .ui-app-launcher-launchpad .ui-app-launcher-panel {
1301
+ --app-launcher-columns: 6;
1302
+ }
1303
+ }
1304
+
1305
+ .ui-app-launcher-launchpad .ui-app-launcher-grid {
1306
+ grid-template-columns: repeat(
1307
+ auto-fit,
1308
+ var(--app-launcher-launchpad-tile-inline-size)
1309
+ );
1310
+ max-width: calc(
1311
+ var(--app-launcher-columns) *
1312
+ (
1313
+ var(--app-launcher-launchpad-tile-inline-size) +
1314
+ var(--app-launcher-launchpad-grid-gap)
1315
+ ) - var(--app-launcher-launchpad-grid-gap)
1316
+ );
1317
+ justify-content: start;
1318
+ gap: var(--app-launcher-launchpad-grid-gap);
1319
+ }
1320
+
1321
+ .ui-app-launcher-launchpad .ui-app-launcher-tile {
1322
+ justify-content: flex-start;
1323
+ gap: var(--app-launcher-launchpad-tile-gap);
1324
+ padding: var(--app-launcher-launchpad-tile-padding);
1325
+ border-radius: var(--app-launcher-launchpad-tile-radius);
1326
+ }
1327
+
1328
+ .ui-app-launcher-launchpad .ui-app-launcher-tile:hover,
1329
+ .ui-app-launcher-launchpad .ui-app-launcher-tile[aria-current="page"] {
1330
+ background: var(--app-launcher-launchpad-tile-hover-background);
1331
+ color: hsl(var(--app-launcher-tile-color));
1332
+ }
1333
+
1334
+ .ui-app-launcher-launchpad .ui-app-launcher-mark {
1335
+ width: var(--app-launcher-launchpad-mark-size);
1336
+ height: var(--app-launcher-launchpad-mark-size);
1337
+ border: 1px solid var(--app-launcher-launchpad-mark-border-color);
1338
+ border-radius: var(--app-launcher-launchpad-mark-radius);
1339
+ background: var(--app-launcher-launchpad-mark-background);
1340
+ box-shadow: var(--app-launcher-launchpad-mark-shadow);
1341
+ color: hsl(var(--foreground));
1342
+ font-size: var(--app-launcher-launchpad-mark-font-size);
1343
+
1344
+ backdrop-filter: blur(calc(var(--app-launcher-launchpad-backdrop-blur-size) / 2))
1345
+ saturate(var(--app-launcher-launchpad-backdrop-color-saturate));
1346
+ }
1347
+
1348
+ .ui-app-launcher-launchpad .ui-app-launcher-group {
1349
+ justify-items: center;
1350
+ }
1351
+
1352
+ .ui-app-launcher-launchpad .ui-app-launcher-group-label {
1353
+ text-align: center;
1354
+ }
1355
+
1356
+ .ui-app-launcher-launchpad .ui-app-launcher-name {
1357
+ font-size: var(--app-launcher-launchpad-name-font-size);
1358
+ }
1359
+
1360
+ .ui-app-launcher-launchpad [data-slot="dialog-header"] {
1361
+ align-items: start;
1362
+ }
1363
+
1364
+ .ui-app-launcher-launchpad [data-slot="dialog-close"] {
1365
+ position: fixed;
1366
+
1367
+ padding: var(--app-launcher-launchpad-close-space-padding);
1368
+ inset-block-start: var(--app-launcher-launchpad-space-inset);
1369
+ inset-inline-end: var(--app-launcher-launchpad-space-inset);
1370
+ }
1371
+
1372
+ .ui-app-launcher-launchpad [data-slot="dialog-title"] {
1373
+ color: hsl(var(--foreground));
1374
+ font-size: var(--app-launcher-launchpad-title-font-size);
1375
+ font-weight: var(--font-weight-medium);
1376
+ letter-spacing: var(--app-launcher-launchpad-title-letter-spacing);
1377
+ text-transform: uppercase;
1378
+ }
1379
+
922
1380
  .ui-app-launcher-panel {
923
1381
 
924
1382
  --app-launcher-columns: 3;
@@ -1082,7 +1540,8 @@
1082
1540
  overflow: hidden;
1083
1541
  font-size: var(--font-size-base);
1084
1542
  font-weight: 700;
1085
- line-height: 1.2;
1543
+
1544
+ line-height: var(--line-height-normal);
1086
1545
  text-overflow: ellipsis;
1087
1546
  white-space: nowrap;
1088
1547
  }
@@ -1097,7 +1556,8 @@
1097
1556
  font-size: var(--sidebar-product-tenant-font-size);
1098
1557
  font-weight: 700;
1099
1558
  letter-spacing: 0.08em;
1100
- line-height: 1.2;
1559
+
1560
+ line-height: var(--line-height-normal);
1101
1561
  text-overflow: ellipsis;
1102
1562
  text-transform: uppercase;
1103
1563
  white-space: nowrap;
@@ -1391,7 +1851,8 @@
1391
1851
  overflow: hidden;
1392
1852
  font-size: var(--sidebar-user-name-font-size);
1393
1853
  font-weight: 500;
1394
- line-height: 1.3;
1854
+
1855
+ line-height: var(--line-height-normal);
1395
1856
  text-overflow: ellipsis;
1396
1857
  white-space: nowrap;
1397
1858
  }
@@ -1400,7 +1861,8 @@
1400
1861
  overflow: hidden;
1401
1862
  color: hsl(var(--muted-foreground));
1402
1863
  font-size: var(--sidebar-user-role-font-size);
1403
- line-height: 1.3;
1864
+
1865
+ line-height: var(--line-height-normal);
1404
1866
  text-overflow: ellipsis;
1405
1867
  white-space: nowrap;
1406
1868
  }
@@ -1496,7 +1958,7 @@
1496
1958
  flex: 0 1 auto;
1497
1959
  }
1498
1960
 
1499
- .ui-topbar-start > :last-child {
1961
+ .ui-topbar-start > :last-child:not(:is(button, a, [role="button"], .ui-button)) {
1500
1962
  max-width: 100%;
1501
1963
  min-width: 0;
1502
1964
  flex: 0 1 auto;
@@ -1674,6 +2136,9 @@
1674
2136
  display: flex;
1675
2137
 
1676
2138
  width: 100%;
2139
+
2140
+ flex: 0 1 var(--topbar-search-width);
2141
+ min-inline-size: 0;
1677
2142
  max-width: var(--topbar-search-max-width);
1678
2143
  height: var(--control-height-sm);
1679
2144
  align-items: center;
@@ -1694,6 +2159,10 @@
1694
2159
  height: var(--topbar-icon-size);
1695
2160
  }
1696
2161
 
2162
+ .tb-search .kbd {
2163
+ margin-inline-start: auto;
2164
+ }
2165
+
1697
2166
  .kbd {
1698
2167
  display: inline-flex;
1699
2168
  align-items: center;
@@ -1747,12 +2216,17 @@
1747
2216
 
1748
2217
  @media (max-width: 768px) {
1749
2218
  .tb-chip-sep,
1750
- .tb-search .kbd {
2219
+ .tb-search .kbd,
2220
+
2221
+ .tb-search .tb-search-label {
1751
2222
  display: none;
1752
2223
  }
1753
2224
 
1754
2225
  .tb-search {
1755
2226
  width: auto;
2227
+
2228
+ flex: 0 0 auto;
2229
+ min-inline-size: var(--control-height);
1756
2230
  min-width: var(--control-height);
1757
2231
  }
1758
2232
 
@@ -345,7 +345,8 @@
345
345
  --button-count-secondary-color: initial;
346
346
 
347
347
  --control-label-font-size: var(--font-size-sm);
348
- --control-label-line-height: 1;
348
+
349
+ --control-label-line-height: var(--line-height-normal);
349
350
 
350
351
  --control-label-space-gap: 0.5rem;
351
352