@vertebr/react 0.9.0 → 0.10.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 (66) hide show
  1. package/dist/components/admin/AddonEditor.d.ts +3 -2
  2. package/dist/components/admin/AddonEditor.d.ts.map +1 -1
  3. package/dist/components/admin/AddonEditor.js +4 -2
  4. package/dist/components/admin/AdminContent.d.ts +4 -1
  5. package/dist/components/admin/AdminContent.d.ts.map +1 -1
  6. package/dist/components/admin/AdminContent.js +25 -11
  7. package/dist/components/admin/AdminTopBar.d.ts +6 -2
  8. package/dist/components/admin/AdminTopBar.d.ts.map +1 -1
  9. package/dist/components/admin/AdminTopBar.js +27 -4
  10. package/dist/components/admin/AuditBoard.d.ts +7 -0
  11. package/dist/components/admin/AuditBoard.d.ts.map +1 -0
  12. package/dist/components/admin/AuditBoard.js +43 -0
  13. package/dist/components/admin/HealthModal.d.ts +9 -0
  14. package/dist/components/admin/HealthModal.d.ts.map +1 -0
  15. package/dist/components/admin/HealthModal.js +59 -0
  16. package/dist/components/admin/VertebrAdmin.d.ts.map +1 -1
  17. package/dist/components/admin/VertebrAdmin.js +88 -22
  18. package/dist/components/admin/adminSearch.d.ts.map +1 -1
  19. package/dist/components/admin/adminSearch.js +9 -0
  20. package/dist/components/admin/breadcrumbs.d.ts.map +1 -1
  21. package/dist/components/admin/breadcrumbs.js +2 -0
  22. package/dist/components/admin/routes.d.ts.map +1 -1
  23. package/dist/components/admin/routes.js +13 -1
  24. package/dist/components/admin/types.d.ts +2 -0
  25. package/dist/components/admin/types.d.ts.map +1 -1
  26. package/dist/components/config/ReferenceInput.d.ts +11 -0
  27. package/dist/components/config/ReferenceInput.d.ts.map +1 -0
  28. package/dist/components/config/ReferenceInput.js +99 -0
  29. package/dist/components/config/RevisionHistory.d.ts +8 -0
  30. package/dist/components/config/RevisionHistory.d.ts.map +1 -0
  31. package/dist/components/config/RevisionHistory.js +84 -0
  32. package/dist/components/config/form/ConfigField.d.ts +3 -2
  33. package/dist/components/config/form/ConfigField.d.ts.map +1 -1
  34. package/dist/components/config/form/ConfigField.js +3 -2
  35. package/dist/components/config/form/ConfigForm.d.ts +1 -1
  36. package/dist/components/config/form/ConfigForm.d.ts.map +1 -1
  37. package/dist/components/config/form/ConfigForm.js +13 -6
  38. package/dist/components/config/form/RecordConfigForm.d.ts +3 -2
  39. package/dist/components/config/form/RecordConfigForm.d.ts.map +1 -1
  40. package/dist/components/config/form/RecordConfigForm.js +2 -1
  41. package/dist/components/config/form/SettingsConfigForm.d.ts +3 -2
  42. package/dist/components/config/form/SettingsConfigForm.d.ts.map +1 -1
  43. package/dist/components/config/form/SettingsConfigForm.js +2 -2
  44. package/dist/components/config/form/types.d.ts +5 -1
  45. package/dist/components/config/form/types.d.ts.map +1 -1
  46. package/dist/components/resources/ResourceTable.d.ts +7 -1
  47. package/dist/components/resources/ResourceTable.d.ts.map +1 -1
  48. package/dist/components/resources/ResourceTable.js +56 -6
  49. package/dist/components/theme/ThemeToggle.d.ts +3 -1
  50. package/dist/components/theme/ThemeToggle.d.ts.map +1 -1
  51. package/dist/components/theme/ThemeToggle.js +2 -2
  52. package/dist/components/ui/icons.d.ts +1 -0
  53. package/dist/components/ui/icons.d.ts.map +1 -1
  54. package/dist/components/ui/icons.js +6 -1
  55. package/dist/index.d.ts +2 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +1 -0
  58. package/dist/lib/capabilities.d.ts +4 -0
  59. package/dist/lib/capabilities.d.ts.map +1 -0
  60. package/dist/lib/capabilities.js +9 -0
  61. package/dist/styles/audit.css +34 -0
  62. package/dist/styles/form.css +143 -0
  63. package/dist/styles/index.css +1 -0
  64. package/dist/styles/modal.css +111 -0
  65. package/dist/styles/shell.css +234 -18
  66. package/package.json +1 -1
@@ -1002,3 +1002,146 @@
1002
1002
  .vertebr-modal-sm {
1003
1003
  width: min(100%, 520px);
1004
1004
  }
1005
+
1006
+ /* ── Reference typeahead ─────────────────────────────── */
1007
+
1008
+ .vertebr-reference {
1009
+ position: relative;
1010
+ display: flex;
1011
+ align-items: center;
1012
+ gap: 0.4rem;
1013
+ }
1014
+
1015
+ .vertebr-reference-input {
1016
+ flex: 1 1 auto;
1017
+ min-width: 0;
1018
+ }
1019
+
1020
+ .vertebr-reference-clear {
1021
+ flex: 0 0 auto;
1022
+ }
1023
+
1024
+ .vertebr-reference-menu {
1025
+ position: absolute;
1026
+ z-index: 20;
1027
+ top: calc(100% + 4px);
1028
+ left: 0;
1029
+ right: 0;
1030
+ margin: 0;
1031
+ padding: 0.35rem;
1032
+ list-style: none;
1033
+ max-height: 14rem;
1034
+ overflow: auto;
1035
+ border: 1px solid var(--vb-border);
1036
+ border-radius: 8px;
1037
+ background: var(--vb-bg-elevated);
1038
+ box-shadow: 0 8px 24px color-mix(in srgb, var(--vb-text) 12%, transparent);
1039
+ }
1040
+
1041
+ .vertebr-reference-option {
1042
+ appearance: none;
1043
+ display: flex;
1044
+ align-items: center;
1045
+ justify-content: space-between;
1046
+ gap: 0.75rem;
1047
+ width: 100%;
1048
+ margin: 0;
1049
+ border: 0;
1050
+ border-radius: 6px;
1051
+ background: transparent;
1052
+ color: inherit;
1053
+ font: inherit;
1054
+ text-align: left;
1055
+ padding: 0.45rem 0.55rem;
1056
+ cursor: pointer;
1057
+ }
1058
+
1059
+ .vertebr-reference-option:hover,
1060
+ .vertebr-reference-option[aria-selected="true"] {
1061
+ background: var(--vb-surface-tint);
1062
+ }
1063
+
1064
+ .vertebr-reference-option code {
1065
+ font-family: var(--vb-mono);
1066
+ font-size: 0.72rem;
1067
+ color: var(--vb-text-subtle);
1068
+ }
1069
+
1070
+ .vertebr-reference-empty {
1071
+ padding: 0.55rem 0.65rem;
1072
+ color: var(--vb-text-subtle);
1073
+ font-size: 0.85rem;
1074
+ }
1075
+
1076
+ /* ── Revision history ────────────────────────────────── */
1077
+
1078
+ .vertebr-revisions {
1079
+ margin-top: 1.25rem;
1080
+ padding-top: 1rem;
1081
+ border-top: 1px solid var(--vb-border);
1082
+ }
1083
+
1084
+ .vertebr-revisions .vertebr-panel-head {
1085
+ margin-bottom: 0.65rem;
1086
+ }
1087
+
1088
+ .vertebr-revisions-empty {
1089
+ margin: 0;
1090
+ color: var(--vb-text-subtle);
1091
+ font-size: 0.88rem;
1092
+ }
1093
+
1094
+ .vertebr-revisions-list {
1095
+ list-style: none;
1096
+ margin: 0;
1097
+ padding: 0;
1098
+ display: flex;
1099
+ flex-direction: column;
1100
+ gap: 0.45rem;
1101
+ }
1102
+
1103
+ .vertebr-revisions-item {
1104
+ display: flex;
1105
+ align-items: center;
1106
+ justify-content: space-between;
1107
+ gap: 0.75rem;
1108
+ padding: 0.55rem 0.65rem;
1109
+ border: 1px solid var(--vb-border);
1110
+ border-radius: 8px;
1111
+ background: var(--vb-bg-elevated);
1112
+ }
1113
+
1114
+ .vertebr-revisions-meta {
1115
+ display: flex;
1116
+ flex-wrap: wrap;
1117
+ align-items: baseline;
1118
+ gap: 0.4rem 0.65rem;
1119
+ min-width: 0;
1120
+ }
1121
+
1122
+ .vertebr-revisions-meta [data-status] {
1123
+ font-family: var(--vb-mono);
1124
+ font-size: 0.68rem;
1125
+ letter-spacing: 0.06em;
1126
+ text-transform: uppercase;
1127
+ color: var(--vb-text-subtle);
1128
+ }
1129
+
1130
+ .vertebr-revisions-meta [data-status="published"] {
1131
+ color: var(--vb-ok, #2f6f4e);
1132
+ }
1133
+
1134
+ .vertebr-revisions-meta [data-status="draft"] {
1135
+ color: var(--vb-warn, #9a6b2f);
1136
+ }
1137
+
1138
+ .vertebr-revisions-when {
1139
+ font-size: 0.78rem;
1140
+ color: var(--vb-text-subtle);
1141
+ }
1142
+
1143
+ .vertebr-revisions-actions {
1144
+ display: flex;
1145
+ gap: 0.35rem;
1146
+ flex: 0 0 auto;
1147
+ }
@@ -9,6 +9,7 @@
9
9
  @import "./main.css";
10
10
  @import "./panel.css";
11
11
  @import "./metrics.css";
12
+ @import "./audit.css";
12
13
  @import "./table.css";
13
14
  @import "./columns.css";
14
15
  @import "./cells.css";
@@ -243,3 +243,114 @@
243
243
  font-size: 0.72rem;
244
244
  color: var(--vb-text-subtle);
245
245
  }
246
+
247
+ /* ── Health modal ────────────────────────────────────── */
248
+
249
+ .vertebr-health-modal-meta {
250
+ margin: 0.35rem 0 0;
251
+ font-size: var(--vb-font-size-100);
252
+ color: var(--vb-text-muted);
253
+ }
254
+
255
+ .vertebr-health-modal-error {
256
+ margin: 0;
257
+ padding: 0.65rem 0.75rem;
258
+ border-radius: var(--vb-radius-sm);
259
+ background: var(--vb-danger-soft, color-mix(in srgb, var(--vb-danger, #a33b3b) 12%, transparent));
260
+ color: var(--vb-danger, #a33b3b);
261
+ font-size: var(--vb-font-size-100);
262
+ }
263
+
264
+ .vertebr-health-modal-empty {
265
+ margin: 0;
266
+ color: var(--vb-text-muted);
267
+ font-size: var(--vb-font-size-100);
268
+ }
269
+
270
+ .vertebr-health-list {
271
+ list-style: none;
272
+ margin: 0;
273
+ padding: 0;
274
+ display: flex;
275
+ flex-direction: column;
276
+ gap: 0.65rem;
277
+ }
278
+
279
+ .vertebr-health-item {
280
+ display: flex;
281
+ flex-direction: column;
282
+ gap: 0.35rem;
283
+ padding: 0.75rem 0.85rem;
284
+ border: 1px solid var(--vb-border-subdued);
285
+ border-radius: var(--vb-radius-sm);
286
+ background: var(--vb-bg-muted);
287
+ }
288
+
289
+ .vertebr-health-item-top {
290
+ display: flex;
291
+ align-items: center;
292
+ gap: 0.55rem;
293
+ min-width: 0;
294
+ }
295
+
296
+ .vertebr-health-item-label {
297
+ font-size: var(--vb-font-size-100);
298
+ font-weight: var(--vb-font-weight-semibold);
299
+ color: var(--vb-text);
300
+ }
301
+
302
+ .vertebr-health-item-detail {
303
+ margin: 0;
304
+ padding-left: calc(0.55rem + 0.45rem + 2.4rem);
305
+ font-size: var(--vb-font-size-100);
306
+ color: var(--vb-text-secondary);
307
+ line-height: 1.4;
308
+ }
309
+
310
+ .vertebr-health-badge {
311
+ display: inline-flex;
312
+ align-items: center;
313
+ gap: 0.35rem;
314
+ flex: none;
315
+ min-width: 3.6rem;
316
+ padding: 0.15rem 0.45rem;
317
+ border-radius: 999px;
318
+ font-size: var(--vb-font-size-75);
319
+ font-weight: var(--vb-font-weight-medium);
320
+ letter-spacing: 0.02em;
321
+ text-transform: uppercase;
322
+ }
323
+
324
+ .vertebr-health-badge-dot {
325
+ width: 0.4rem;
326
+ height: 0.4rem;
327
+ border-radius: 999px;
328
+ background: currentColor;
329
+ }
330
+
331
+ .vertebr-health-badge[data-status="ok"] {
332
+ color: var(--vb-ok, #2f6f4e);
333
+ background: var(--vb-ok-soft, color-mix(in srgb, var(--vb-ok, #2f6f4e) 12%, transparent));
334
+ }
335
+
336
+ .vertebr-health-badge[data-status="warn"] {
337
+ color: var(--vb-warn, #9a6b2f);
338
+ background: color-mix(in srgb, var(--vb-warn, #9a6b2f) 12%, transparent);
339
+ }
340
+
341
+ .vertebr-health-badge[data-status="error"] {
342
+ color: var(--vb-danger, #a33b3b);
343
+ background: var(--vb-danger-soft, color-mix(in srgb, var(--vb-danger, #a33b3b) 12%, transparent));
344
+ }
345
+
346
+ .vertebr-health-item[data-status="ok"] {
347
+ border-color: color-mix(in srgb, var(--vb-ok, #2f6f4e) 22%, var(--vb-border-subdued));
348
+ }
349
+
350
+ .vertebr-health-item[data-status="warn"] {
351
+ border-color: color-mix(in srgb, var(--vb-warn, #9a6b2f) 28%, var(--vb-border-subdued));
352
+ }
353
+
354
+ .vertebr-health-item[data-status="error"] {
355
+ border-color: color-mix(in srgb, var(--vb-danger, #a33b3b) 28%, var(--vb-border-subdued));
356
+ }
@@ -5,11 +5,11 @@
5
5
  grid-row: 1;
6
6
  z-index: 40;
7
7
  display: grid;
8
- grid-template-columns: minmax(0, 1fr) minmax(12rem, 22rem) minmax(0, 1fr);
8
+ grid-template-columns: minmax(14rem, 1.15fr) minmax(11rem, 20rem) minmax(14rem, 1fr);
9
9
  align-items: center;
10
10
  gap: var(--vb-space-400);
11
11
  height: var(--vb-topbar-height);
12
- padding: 0 var(--vb-space-500);
12
+ padding: 0 var(--vb-space-400);
13
13
  border-bottom: 1px solid var(--vb-border-subdued);
14
14
  background: var(--vb-topbar-bg);
15
15
  }
@@ -34,6 +34,33 @@
34
34
 
35
35
  .vertebr-topbar-end {
36
36
  justify-self: end;
37
+ gap: var(--vb-space-200);
38
+ }
39
+
40
+ .vertebr-topbar-cluster,
41
+ .vertebr-topbar-account {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ gap: var(--vb-space-100);
45
+ min-width: 0;
46
+ }
47
+
48
+ .vertebr-topbar-cluster {
49
+ padding-right: var(--vb-space-200);
50
+ margin-right: var(--vb-space-100);
51
+ border-right: 1px solid var(--vb-border-subdued);
52
+ }
53
+
54
+ .vertebr-topbar-account {
55
+ max-width: 14rem;
56
+ padding-right: var(--vb-space-200);
57
+ margin-right: var(--vb-space-100);
58
+ border-right: 1px solid var(--vb-border-subdued);
59
+ }
60
+
61
+ .vertebr-topbar-cluster:empty,
62
+ .vertebr-topbar-account:empty {
63
+ display: none;
37
64
  }
38
65
 
39
66
  /* Theme toggle lives in the top bar — hide sidebar-style labels. */
@@ -44,12 +71,26 @@
44
71
  .vertebr-topbar .vertebr-theme {
45
72
  padding: 0;
46
73
  gap: 0;
74
+ flex: none;
75
+ }
76
+
77
+ .vertebr-topbar .vertebr-theme[data-compact="true"] .vertebr-theme-toggle {
78
+ grid-template-columns: 1fr 1fr;
79
+ gap: 0.15rem;
80
+ padding: 0.15rem;
81
+ }
82
+
83
+ .vertebr-topbar .vertebr-theme[data-compact="true"] .vertebr-theme-option {
84
+ padding: 0.35rem 0.4rem;
85
+ min-width: 1.85rem;
47
86
  }
48
87
 
49
88
  .vertebr-topbar-brand {
50
89
  font-size: var(--vb-font-size-200);
51
90
  font-weight: var(--vb-font-weight-semibold);
91
+ letter-spacing: -0.01em;
52
92
  white-space: nowrap;
93
+ color: var(--vb-text);
53
94
  }
54
95
 
55
96
  .vertebr-topbar-brand-wrap {
@@ -62,18 +103,40 @@
62
103
  .vertebr-topbar-host {
63
104
  display: inline-flex;
64
105
  align-items: center;
65
- gap: 0.35rem;
106
+ gap: 0.4rem;
66
107
  min-width: 0;
108
+ max-width: 12rem;
109
+ color: var(--vb-text-secondary);
110
+ font-size: var(--vb-font-size-200);
111
+ font-weight: var(--vb-font-weight-medium);
112
+ }
113
+
114
+ .vertebr-topbar-host[data-primary="true"] {
115
+ color: var(--vb-text);
116
+ }
117
+
118
+ .vertebr-topbar-host[data-primary="true"] .vertebr-topbar-host-label {
119
+ font-size: var(--vb-font-size-200);
120
+ font-weight: var(--vb-font-weight-semibold);
121
+ letter-spacing: -0.01em;
122
+ }
123
+
124
+ .vertebr-topbar-product {
125
+ display: inline-flex;
126
+ align-items: center;
67
127
  padding-left: var(--vb-space-200);
68
128
  border-left: 1px solid var(--vb-border-subdued);
69
129
  color: var(--vb-text-muted);
70
- font-size: var(--vb-font-size-100);
71
- font-weight: var(--vb-font-weight-regular);
130
+ font-size: var(--vb-font-size-75);
131
+ font-weight: var(--vb-font-weight-medium);
132
+ letter-spacing: 0.04em;
133
+ text-transform: uppercase;
134
+ white-space: nowrap;
72
135
  }
73
136
 
74
137
  .vertebr-topbar-host-logo {
75
- width: 1rem;
76
- height: 1rem;
138
+ width: 1.15rem;
139
+ height: 1.15rem;
77
140
  border-radius: var(--vb-radius-xs);
78
141
  object-fit: contain;
79
142
  }
@@ -86,19 +149,33 @@
86
149
 
87
150
  .vertebr-topbar-toggle {
88
151
  appearance: none;
152
+ display: inline-grid;
153
+ place-items: center;
89
154
  border: 1px solid var(--vb-border);
90
155
  background: var(--vb-bg-elevated);
91
- color: var(--vb-text);
156
+ color: var(--vb-text-secondary);
92
157
  border-radius: var(--vb-radius-sm);
93
158
  width: 2rem;
94
159
  height: 2rem;
95
160
  cursor: pointer;
161
+ flex: none;
162
+ transition:
163
+ background 0.15s ease,
164
+ color 0.15s ease,
165
+ border-color 0.15s ease;
166
+ }
167
+
168
+ .vertebr-topbar-toggle:hover {
169
+ background: var(--vb-bg-hover);
170
+ color: var(--vb-text);
171
+ border-color: var(--vb-border-strong, var(--vb-border));
96
172
  }
97
173
 
98
174
  .vertebr-topbar-env {
99
175
  display: flex;
100
176
  align-items: center;
101
177
  gap: var(--vb-space-200);
178
+ margin-left: var(--vb-space-100);
102
179
  }
103
180
 
104
181
  .vertebr-topbar-search {
@@ -107,9 +184,9 @@
107
184
  align-items: center;
108
185
  gap: var(--vb-space-200);
109
186
  width: 100%;
110
- padding: 0.45rem 0.75rem;
111
- border: 1px solid var(--vb-border);
112
- border-radius: var(--vb-radius-full);
187
+ padding: 0.4rem 0.7rem;
188
+ border: 1px solid transparent;
189
+ border-radius: var(--vb-radius-md);
113
190
  background: var(--vb-bg-muted);
114
191
  color: var(--vb-text-subtle);
115
192
  font-size: var(--vb-font-size-100);
@@ -117,20 +194,55 @@
117
194
  text-align: left;
118
195
  transition:
119
196
  border-color 0.15s ease,
120
- background 0.15s ease;
197
+ background 0.15s ease,
198
+ color 0.15s ease,
199
+ box-shadow 0.15s ease;
121
200
  }
122
201
 
123
202
  .vertebr-topbar-search:hover {
124
- border-color: var(--vb-border-strong, var(--vb-border));
125
- background: var(--vb-bg-hover);
203
+ border-color: var(--vb-border);
204
+ background: var(--vb-bg-elevated);
126
205
  color: var(--vb-text-secondary);
206
+ box-shadow: var(--vb-shadow-sm);
127
207
  }
128
208
 
129
209
  .vertebr-topbar-search kbd {
130
210
  margin-left: auto;
211
+ padding: 0.1rem 0.35rem;
212
+ border: 1px solid var(--vb-border-subdued);
213
+ border-radius: var(--vb-radius-xs);
214
+ background: var(--vb-bg-elevated);
131
215
  font-family: var(--vb-mono);
132
216
  font-size: var(--vb-font-size-75);
133
- opacity: 0.7;
217
+ opacity: 0.85;
218
+ }
219
+
220
+ .vertebr-topbar-action {
221
+ appearance: none;
222
+ display: inline-flex;
223
+ align-items: center;
224
+ gap: 0.35rem;
225
+ height: 2rem;
226
+ padding: 0 0.65rem;
227
+ border: 1px solid var(--vb-border);
228
+ border-radius: var(--vb-radius-sm);
229
+ background: var(--vb-bg-elevated);
230
+ color: var(--vb-text-secondary);
231
+ font: inherit;
232
+ font-size: var(--vb-font-size-100);
233
+ font-weight: var(--vb-font-weight-medium);
234
+ white-space: nowrap;
235
+ cursor: pointer;
236
+ transition:
237
+ background 0.15s ease,
238
+ color 0.15s ease,
239
+ border-color 0.15s ease;
240
+ }
241
+
242
+ .vertebr-topbar-action:hover {
243
+ background: var(--vb-bg-hover);
244
+ color: var(--vb-text);
245
+ border-color: var(--vb-border-strong, var(--vb-border));
134
246
  }
135
247
 
136
248
  .vertebr-topbar-sync {
@@ -140,6 +252,60 @@
140
252
  white-space: nowrap;
141
253
  }
142
254
 
255
+ .vertebr-topbar-health {
256
+ appearance: none;
257
+ display: inline-flex;
258
+ align-items: center;
259
+ gap: 0.4rem;
260
+ height: 2rem;
261
+ padding: 0 0.6rem;
262
+ border: 1px solid transparent;
263
+ border-radius: var(--vb-radius-sm);
264
+ font: inherit;
265
+ font-size: var(--vb-font-size-100);
266
+ font-weight: var(--vb-font-weight-medium);
267
+ color: var(--vb-text-muted);
268
+ background: transparent;
269
+ cursor: pointer;
270
+ transition:
271
+ background 0.15s ease,
272
+ border-color 0.15s ease,
273
+ filter 0.15s ease;
274
+ }
275
+
276
+ .vertebr-topbar-health:hover {
277
+ filter: brightness(0.97);
278
+ border-color: color-mix(in srgb, currentColor 28%, transparent);
279
+ }
280
+
281
+ .vertebr-topbar-health:focus-visible {
282
+ outline: 2px solid var(--vb-focus, currentColor);
283
+ outline-offset: 2px;
284
+ }
285
+
286
+ .vertebr-topbar-health-dot {
287
+ width: 0.45rem;
288
+ height: 0.45rem;
289
+ border-radius: 999px;
290
+ background: currentColor;
291
+ flex: none;
292
+ }
293
+
294
+ .vertebr-topbar-health[data-tone="ok"] {
295
+ color: var(--vb-ok, #2f6f4e);
296
+ background: var(--vb-ok-soft, color-mix(in srgb, var(--vb-ok, #2f6f4e) 12%, transparent));
297
+ }
298
+
299
+ .vertebr-topbar-health[data-tone="warn"] {
300
+ color: var(--vb-warn, #9a6b2f);
301
+ background: color-mix(in srgb, var(--vb-warn, #9a6b2f) 12%, transparent);
302
+ }
303
+
304
+ .vertebr-topbar-health[data-tone="error"] {
305
+ color: var(--vb-danger, #a33b3b);
306
+ background: var(--vb-danger-soft, color-mix(in srgb, var(--vb-danger, #a33b3b) 12%, transparent));
307
+ }
308
+
143
309
  .vertebr-topbar-token {
144
310
  display: flex;
145
311
  align-items: center;
@@ -148,13 +314,48 @@
148
314
 
149
315
  .vertebr-topbar-user {
150
316
  font-size: var(--vb-font-size-100);
151
- color: var(--vb-text-muted);
152
- max-width: 12rem;
317
+ color: var(--vb-text-secondary);
318
+ max-width: 9rem;
153
319
  overflow: hidden;
154
320
  text-overflow: ellipsis;
155
321
  white-space: nowrap;
156
322
  }
157
323
 
324
+ .vertebr-topbar-signout {
325
+ appearance: none;
326
+ border: none;
327
+ background: transparent;
328
+ color: var(--vb-text-muted);
329
+ font: inherit;
330
+ font-size: var(--vb-font-size-100);
331
+ font-weight: var(--vb-font-weight-medium);
332
+ padding: 0.25rem 0.35rem;
333
+ border-radius: var(--vb-radius-xs);
334
+ cursor: pointer;
335
+ white-space: nowrap;
336
+ }
337
+
338
+ .vertebr-topbar-signout:hover {
339
+ color: var(--vb-text);
340
+ background: var(--vb-bg-hover);
341
+ }
342
+
343
+ @media (max-width: 1100px) {
344
+ .vertebr-topbar-health-text {
345
+ display: none;
346
+ }
347
+
348
+ .vertebr-topbar-health {
349
+ padding: 0;
350
+ width: 2rem;
351
+ justify-content: center;
352
+ }
353
+
354
+ .vertebr-topbar-user {
355
+ display: none;
356
+ }
357
+ }
358
+
158
359
  @media (max-width: 900px) {
159
360
  .vertebr-topbar {
160
361
  grid-template-columns: minmax(0, 1fr) auto;
@@ -164,11 +365,26 @@
164
365
  display: none;
165
366
  }
166
367
 
167
- .vertebr-topbar-sync span {
368
+ .vertebr-topbar-action span {
369
+ display: none;
370
+ }
371
+
372
+ .vertebr-topbar-action {
373
+ width: 2rem;
374
+ padding: 0;
375
+ justify-content: center;
376
+ }
377
+
378
+ .vertebr-topbar-host {
379
+ max-width: 7rem;
380
+ }
381
+
382
+ .vertebr-topbar-product {
168
383
  display: none;
169
384
  }
170
385
  }
171
386
 
387
+
172
388
  /* ── Command palette ─────────────────────────────────── */
173
389
 
174
390
  .vertebr-command-backdrop {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertebr/react",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Vertebr admin dashboard UI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",