@godxjp/ui 20.2.1 → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/app/app-provider.js +2 -1
  2. package/dist/components/data-display/badge.d.ts +28 -1
  3. package/dist/components/data-display/badge.js +2 -0
  4. package/dist/components/data-display/chat-bubble.d.ts +30 -0
  5. package/dist/components/data-display/chat-bubble.js +229 -0
  6. package/dist/components/data-display/data-table.d.ts +18 -2
  7. package/dist/components/data-display/data-table.js +4 -0
  8. package/dist/components/data-display/descriptions.js +4 -1
  9. package/dist/components/data-display/index.d.ts +5 -3
  10. package/dist/components/data-display/index.js +5 -2
  11. package/dist/components/data-display/popover.d.ts +19 -1
  12. package/dist/components/data-display/popover.js +12 -3
  13. package/dist/components/data-display/progress.d.ts +37 -0
  14. package/dist/components/data-display/progress.js +57 -5
  15. package/dist/components/data-display/scroll-area.js +26 -1
  16. package/dist/components/data-display/tree.d.ts +8 -0
  17. package/dist/components/data-display/tree.js +426 -0
  18. package/dist/components/data-entry/chat-composer.d.ts +50 -0
  19. package/dist/components/data-entry/chat-composer.js +163 -0
  20. package/dist/components/data-entry/chat-suggestion.d.ts +28 -0
  21. package/dist/components/data-entry/chat-suggestion.js +285 -0
  22. package/dist/components/data-entry/date-picker.d.ts +10 -3
  23. package/dist/components/data-entry/date-picker.js +503 -238
  24. package/dist/components/data-entry/form-field.d.ts +1 -1
  25. package/dist/components/data-entry/form-field.js +4 -1
  26. package/dist/components/data-entry/form.js +10 -1
  27. package/dist/components/data-entry/index.d.ts +4 -6
  28. package/dist/components/data-entry/index.js +4 -6
  29. package/dist/components/data-entry/label.d.ts +14 -1
  30. package/dist/components/data-entry/label.js +6 -1
  31. package/dist/components/data-entry/radio.d.ts +27 -6
  32. package/dist/components/data-entry/radio.js +88 -43
  33. package/dist/components/data-entry/search-select.js +8 -1
  34. package/dist/components/data-entry/select.js +2 -0
  35. package/dist/components/data-entry/switch.d.ts +6 -3
  36. package/dist/components/data-entry/switch.js +34 -11
  37. package/dist/components/data-entry/textarea.js +3 -1
  38. package/dist/components/data-entry/tree-utils.d.ts +10 -48
  39. package/dist/components/data-entry/tree-utils.js +1 -154
  40. package/dist/components/layout/mobile-shell.d.ts +1 -1
  41. package/dist/components/layout/mobile-shell.js +2 -0
  42. package/dist/components/navigation/menubar.d.ts +10 -3
  43. package/dist/components/navigation/steps.d.ts +1 -1
  44. package/dist/components/navigation/steps.js +3 -1
  45. package/dist/components/navigation/tabs-scroll.d.ts +27 -0
  46. package/dist/components/navigation/tabs-scroll.js +52 -1
  47. package/dist/components/navigation/tabs.d.ts +2 -2
  48. package/dist/components/navigation/tabs.js +88 -23
  49. package/dist/components/ui/index.d.ts +0 -1
  50. package/dist/components/ui/index.js +0 -1
  51. package/dist/components/ui/segmented.d.ts +15 -1
  52. package/dist/components/ui/segmented.js +13 -6
  53. package/dist/i18n/messages/en.json +48 -2
  54. package/dist/i18n/messages/ja.json +46 -2
  55. package/dist/i18n/messages/vi.json +47 -2
  56. package/dist/lib/datetime/picker-format.d.ts +18 -0
  57. package/dist/lib/datetime/picker-format.js +35 -1
  58. package/dist/lib/field-a11y.d.ts +12 -0
  59. package/dist/lib/field-a11y.js +14 -1
  60. package/dist/lib/tree.d.ts +53 -0
  61. package/dist/lib/tree.js +155 -0
  62. package/dist/props/components/data-display.prop.d.ts +194 -1
  63. package/dist/props/components/data-entry.prop.d.ts +307 -99
  64. package/dist/props/components/index.d.ts +1 -1
  65. package/dist/props/components/layout.prop.d.ts +12 -1
  66. package/dist/props/components/navigation.prop.d.ts +76 -1
  67. package/dist/props/registry.d.ts +156 -19
  68. package/dist/props/registry.js +218 -18
  69. package/dist/props/vocabulary/data.prop.d.ts +12 -0
  70. package/dist/props/vocabulary/index.d.ts +2 -2
  71. package/dist/props/vocabulary/layout.prop.d.ts +11 -0
  72. package/dist/styles/badge-layout.css +4 -0
  73. package/dist/styles/card-layout.css +6 -6
  74. package/dist/styles/control.css +22 -6
  75. package/dist/styles/data-display-layout.css +385 -68
  76. package/dist/styles/data-entry-layout.css +64 -0
  77. package/dist/styles/focus-ring.css +4 -2
  78. package/dist/styles/navigation-layout.css +25 -0
  79. package/dist/styles/shell-layout.css +7 -1
  80. package/dist/styles/table-layout.css +34 -0
  81. package/dist/tokens/base.css +3 -0
  82. package/dist/tokens/components/chat-bubble.css +36 -0
  83. package/dist/tokens/components/chat-composer.css +19 -0
  84. package/dist/tokens/components/data-display.css +9 -6
  85. package/dist/tokens/components/descriptions.css +4 -0
  86. package/dist/tokens/components/navigation.css +6 -0
  87. package/dist/tokens/components/segmented.css +0 -2
  88. package/dist/tokens/components/shell.css +3 -0
  89. package/dist/tokens/components/table.css +3 -0
  90. package/dist/tokens/components/tree.css +27 -0
  91. package/dist/tokens/foundation.css +7 -0
  92. package/docs/COMPONENTS.md +14 -14
  93. package/docs/CONSUMER-RULES.md +24 -1
  94. package/docs/FRAME-COVERAGE-LEDGER.md +1 -1
  95. package/docs/FRAME-COVERAGE-REPORT.md +9 -7
  96. package/docs/TOKENS.md +65 -0
  97. package/docs/data-display/badge.tsx +37 -0
  98. package/docs/data-display/chat-bubble.tsx +397 -0
  99. package/docs/data-display/data-table/index.tsx +18 -0
  100. package/docs/data-display/popover.tsx +41 -1
  101. package/docs/data-display/progress.tsx +28 -0
  102. package/docs/data-display/timeline.tsx +46 -0
  103. package/docs/data-display/tree.tsx +394 -0
  104. package/docs/data-entry/calendar.tsx +2 -2
  105. package/docs/data-entry/chat-composer.tsx +464 -0
  106. package/docs/data-entry/chat-suggestion.tsx +301 -0
  107. package/docs/data-entry/date-picker.tsx +143 -3
  108. package/docs/data-entry/form/examples/invoice-form.tsx +2 -2
  109. package/docs/data-entry/form-field/examples/a11y-contract.tsx +3 -5
  110. package/docs/data-entry/form.tsx +4 -4
  111. package/docs/data-entry/number-input.tsx +31 -0
  112. package/docs/data-entry/segmented.tsx +103 -1
  113. package/docs/layout/mobile-shell.tsx +5 -0
  114. package/docs/navigation/tabs.tsx +149 -0
  115. package/docs/roadmap/ai-chat-components.md +207 -0
  116. package/docs/roadmap/antd-parity.md +155 -0
  117. package/docs/roadmap/badge-tag-chip-count.md +172 -0
  118. package/docs/roadmap/list-masonry.md +159 -0
  119. package/docs/roadmap/parity-audit-data-display-feedback.md +567 -0
  120. package/docs/roadmap/parity-audit-data-entry.md +357 -0
  121. package/docs/roadmap/parity-audit-layout-navigation-general.md +464 -0
  122. package/docs/roadmap/parity-backlog.md +78 -0
  123. package/docs/roadmap/tree-components.md +151 -0
  124. package/docs/showcase/acme-portal.tsx +7 -0
  125. package/docs/showcase/table-tree-rows.tsx +4 -4
  126. package/package.json +13 -23
  127. package/scripts/ui-audit.mjs +17 -4
  128. package/dist/components/data-display/tree-list.d.ts +0 -13
  129. package/dist/components/data-display/tree-list.js +0 -26
  130. package/dist/components/data-entry/date-range-picker.d.ts +0 -11
  131. package/dist/components/data-entry/date-range-picker.js +0 -349
  132. package/dist/components/data-entry/month-picker.d.ts +0 -10
  133. package/dist/components/data-entry/month-picker.js +0 -241
  134. package/dist/components/data-entry/month-range-picker.d.ts +0 -10
  135. package/dist/components/data-entry/month-range-picker.js +0 -301
  136. package/dist/components/ui/date-range-picker.d.ts +0 -1
  137. package/dist/components/ui/date-range-picker.js +0 -2
  138. package/docs/data-display/tree-list.tsx +0 -107
  139. package/docs/data-entry/date-range-picker.tsx +0 -175
  140. package/docs/data-entry/month-picker.tsx +0 -101
  141. package/docs/data-entry/month-range-picker.tsx +0 -115
@@ -452,7 +452,7 @@
452
452
  fill: currentColor;
453
453
  }
454
454
 
455
- .ui-switch[aria-invalid="true"] {
455
+ .ui-switch:has(input[aria-invalid="true"]) {
456
456
  --tw-ring-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
457
457
  box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
458
458
  }
@@ -988,6 +988,8 @@
988
988
  }
989
989
 
990
990
  .ui-segmented {
991
+
992
+ --segmented-item-height: calc(var(--control-height) - var(--segmented-track-padding) * 2);
991
993
  display: inline-flex;
992
994
  max-width: 100%;
993
995
  align-items: stretch;
@@ -1222,14 +1224,15 @@
1222
1224
  font-size: var(--font-size-base);
1223
1225
  pointer-events: none;
1224
1226
  }
1225
- .ui-number-input-affix:first-of-type {
1227
+
1228
+ [data-slot="number-input-prefix"] {
1226
1229
  inset-inline-start: var(--control-padding-x);
1227
1230
  }
1228
1231
 
1229
- .ui-number-input:has(.ui-number-input-affix:first-of-type) .ui-number-input-field {
1232
+ .ui-number-input:has([data-slot="number-input-prefix"]) .ui-number-input-field {
1230
1233
  padding-inline-start: calc(var(--control-padding-x) + 1.25rem);
1231
1234
  }
1232
- .ui-number-input-affix:last-of-type {
1235
+ [data-slot="number-input-suffix"] {
1233
1236
  inset-inline-end: calc(var(--control-height) + var(--space-2));
1234
1237
  }
1235
1238
  .ui-number-input-steppers {
@@ -1840,6 +1843,13 @@
1840
1843
  }
1841
1844
  }
1842
1845
 
1846
+ @layer components {
1847
+
1848
+ .ui-chat-suggestion-panel {
1849
+ --popover-surface-inline-size: var(--radix-popover-trigger-width);
1850
+ }
1851
+ }
1852
+
1843
1853
  @layer components {
1844
1854
 
1845
1855
  .ui-tree-select-popover {
@@ -2400,6 +2410,11 @@
2400
2410
  gap: var(--month-picker-grid-space-gap);
2401
2411
  }
2402
2412
 
2413
+ .ui-month-picker-row,
2414
+ .ui-month-picker-gridcell {
2415
+ display: contents;
2416
+ }
2417
+
2403
2418
  .ui-month-picker-cell {
2404
2419
  padding-inline: var(--month-picker-cell-space-inline);
2405
2420
  font-weight: var(--font-weight-normal);
@@ -2775,7 +2790,7 @@
2775
2790
  border-color: hsl(var(--choice-button-solid-background));
2776
2791
  }
2777
2792
 
2778
- .ui-radio-button:disabled {
2793
+ .ui-radio-button[data-disabled] {
2779
2794
  cursor: not-allowed;
2780
2795
  opacity: var(--disabled-opacity);
2781
2796
  }
@@ -2785,7 +2800,7 @@
2785
2800
  inline-size: 100%;
2786
2801
  }
2787
2802
 
2788
- .ui-segmented[data-block="true"] > .ui-segmented-item {
2803
+ .ui-segmented[data-block="true"]:not([data-orientation="vertical"]) > .ui-segmented-item {
2789
2804
  flex: 1 1 0;
2790
2805
  min-inline-size: 0;
2791
2806
  justify-content: center;
@@ -2796,6 +2811,7 @@
2796
2811
  }
2797
2812
 
2798
2813
  .ui-segmented[data-orientation="vertical"] > .ui-segmented-item {
2814
+ block-size: var(--control-height);
2799
2815
  justify-content: flex-start;
2800
2816
  }
2801
2817
 
@@ -143,7 +143,7 @@
143
143
  }
144
144
 
145
145
  .ui-progress-track {
146
- height: 0.5rem;
146
+ height: var(--progress-meter-block-size);
147
147
  overflow: hidden;
148
148
  border-radius: var(--radius-pill);
149
149
  background: var(--progress-track-background, hsl(var(--secondary)));
@@ -152,19 +152,19 @@
152
152
  .ui-progress-bar {
153
153
  height: 100%;
154
154
  border-radius: inherit;
155
- background: var(--progress-fill-background, hsl(var(--success)));
155
+ background: var(--progress-fill-background, hsl(var(--mark-success)));
156
156
  }
157
157
 
158
158
  .ui-progress[data-tone="warning"] .ui-progress-bar {
159
- background: hsl(var(--warning));
159
+ background: hsl(var(--mark-warning));
160
160
  }
161
161
 
162
162
  .ui-progress[data-tone="destructive"] .ui-progress-bar {
163
- background: hsl(var(--destructive));
163
+ background: hsl(var(--mark-destructive));
164
164
  }
165
165
 
166
166
  .ui-progress[data-over] .ui-progress-bar {
167
- background-color: hsl(var(--destructive));
167
+ background-color: hsl(var(--mark-destructive));
168
168
  background-image: repeating-linear-gradient(
169
169
  45deg,
170
170
  hsl(var(--destructive-foreground) / 0.4) 0,
@@ -180,20 +180,28 @@
180
180
  border-radius: var(--progress-breakdown-radius);
181
181
  }
182
182
 
183
+ .ui-progress[data-size="sm"] .ui-progress-track {
184
+ height: var(--progress-meter-block-size-sm);
185
+ }
186
+
187
+ .ui-progress[data-breakdown][data-size="sm"] .ui-progress-track {
188
+ height: var(--progress-breakdown-block-size-sm);
189
+ }
190
+
183
191
  .ui-progress-segment {
184
192
  height: 100%;
185
193
  }
186
194
 
187
195
  .ui-progress-segment[data-tone="success"] {
188
- background: hsl(var(--success));
196
+ background: hsl(var(--mark-success));
189
197
  }
190
198
 
191
199
  .ui-progress-segment[data-tone="warning"] {
192
- background: hsl(var(--warning));
200
+ background: hsl(var(--mark-warning));
193
201
  }
194
202
 
195
203
  .ui-progress-segment[data-tone="destructive"] {
196
- background: hsl(var(--destructive));
204
+ background: hsl(var(--mark-destructive));
197
205
  }
198
206
 
199
207
  .ui-progress-label {
@@ -201,6 +209,61 @@
201
209
  font-size: var(--progress-label-font-size);
202
210
  }
203
211
 
212
+ .ui-progress[data-shape="ring"] {
213
+ display: inline-flex;
214
+ }
215
+
216
+ .ui-progress-ring {
217
+ position: relative;
218
+ display: inline-grid;
219
+ inline-size: var(--progress-ring-size);
220
+ block-size: var(--progress-ring-size);
221
+ place-items: center;
222
+ }
223
+
224
+ .ui-progress[data-size="sm"] .ui-progress-ring {
225
+ --progress-ring-size: var(--progress-ring-size-sm);
226
+ }
227
+
228
+ .ui-progress-ring-svg {
229
+ position: absolute;
230
+ inset: 0;
231
+ inline-size: 100%;
232
+ block-size: 100%;
233
+ }
234
+
235
+ .ui-progress-ring-track,
236
+ .ui-progress-ring-indicator {
237
+ fill: none;
238
+ stroke-width: var(--progress-ring-border-width);
239
+ }
240
+
241
+ .ui-progress-ring-track {
242
+ stroke: var(--progress-track-background, hsl(var(--secondary)));
243
+ }
244
+
245
+ .ui-progress-ring-indicator {
246
+ stroke: var(--progress-fill-background, hsl(var(--mark-success)));
247
+
248
+ stroke-linecap: butt;
249
+ }
250
+
251
+ .ui-progress[data-tone="warning"] .ui-progress-ring-indicator {
252
+ stroke: hsl(var(--mark-warning));
253
+ }
254
+
255
+ .ui-progress[data-tone="destructive"] .ui-progress-ring-indicator {
256
+ stroke: hsl(var(--mark-destructive));
257
+ }
258
+
259
+ .ui-progress-ring-label {
260
+ position: relative;
261
+ color: hsl(var(--foreground));
262
+ font-size: var(--progress-ring-label-font-size);
263
+ font-variant-numeric: tabular-nums;
264
+ line-height: 1;
265
+ }
266
+
204
267
  .ui-legend {
205
268
  display: flex;
206
269
  flex-wrap: wrap;
@@ -227,23 +290,23 @@
227
290
  }
228
291
 
229
292
  .ui-legend-swatch[data-tone="default"] {
230
- background: hsl(var(--primary));
293
+ background: hsl(var(--mark-primary));
231
294
  }
232
295
 
233
296
  .ui-legend-swatch[data-tone="success"] {
234
- background: hsl(var(--success));
297
+ background: hsl(var(--mark-success));
235
298
  }
236
299
 
237
300
  .ui-legend-swatch[data-tone="warning"] {
238
- background: hsl(var(--warning));
301
+ background: hsl(var(--mark-warning));
239
302
  }
240
303
 
241
304
  .ui-legend-swatch[data-tone="destructive"] {
242
- background: hsl(var(--destructive));
305
+ background: hsl(var(--mark-destructive));
243
306
  }
244
307
 
245
308
  .ui-legend-swatch[data-tone="info"] {
246
- background: hsl(var(--info));
309
+ background: hsl(var(--mark-info));
247
310
  }
248
311
 
249
312
  .ui-legend-swatch[data-tone="muted"],
@@ -251,61 +314,6 @@
251
314
  background: hsl(var(--muted-foreground));
252
315
  }
253
316
 
254
- .ui-tree-list {
255
- display: flex;
256
- flex-direction: column;
257
- gap: var(--space-1);
258
- }
259
-
260
- .ui-tree-item {
261
- display: flex;
262
- min-height: 2.25rem;
263
- align-items: center;
264
- gap: var(--space-2);
265
- padding-inline: var(--space-3);
266
- border: 1px solid hsl(var(--border));
267
- border-radius: var(--radius);
268
- }
269
-
270
- .ui-tree-item[data-active="true"] {
271
- border-color: var(--tree-item-active-border, hsl(var(--primary) / 0.3));
272
- background: var(--tree-item-active-background, hsl(var(--primary) / 0.05));
273
- }
274
-
275
- .ui-tree-item {
276
- margin-inline-start: calc(var(--tree-item-depth, 0) * var(--tree-item-indent-width));
277
- }
278
-
279
- .ui-tree-item > svg {
280
- width: 1rem;
281
- height: 1rem;
282
- color: hsl(var(--primary));
283
- }
284
-
285
- .ui-tree-item > svg:first-child {
286
- width: 0.75rem;
287
- height: 0.75rem;
288
- color: hsl(var(--muted-foreground));
289
- }
290
-
291
- .ui-tree-item-body {
292
- min-width: 0;
293
- flex: 1;
294
- }
295
-
296
- .ui-tree-item-title {
297
- font-family: var(--font-family-mono);
298
- font-size: var(--tree-item-title-font-size);
299
- }
300
-
301
- .ui-tree-item-description {
302
- overflow: hidden;
303
- color: hsl(var(--muted-foreground));
304
- font-size: var(--tree-item-description-font-size);
305
- text-overflow: ellipsis;
306
- white-space: nowrap;
307
- }
308
-
309
317
  .ui-timeline {
310
318
  display: flex;
311
319
  flex-direction: column;
@@ -395,6 +403,10 @@
395
403
  }
396
404
 
397
405
  .ui-timeline-title {
406
+
407
+ min-inline-size: 0;
408
+ flex: 1 1 0%;
409
+
398
410
  font-weight: var(--font-weight-medium);
399
411
  }
400
412
 
@@ -795,6 +807,10 @@
795
807
 
796
808
  @layer components {
797
809
 
810
+ [data-slot="scroll-area-viewport"][data-orientation="vertical"] > * {
811
+ display: block !important;
812
+ }
813
+
798
814
  .ui-scroll-area-bar {
799
815
  padding: var(--scroll-area-bar-padding);
800
816
  }
@@ -1399,3 +1415,304 @@
1399
1415
  font-size: var(--prose-code-font-size);
1400
1416
  }
1401
1417
  }
1418
+
1419
+ @layer components {
1420
+
1421
+ .ui-chat-bubble {
1422
+ display: flex;
1423
+ align-items: flex-start;
1424
+ gap: var(--chat-bubble-gap);
1425
+ min-inline-size: 0;
1426
+ }
1427
+
1428
+ .ui-chat-bubble[data-placement="end"] {
1429
+ flex-direction: row-reverse;
1430
+ }
1431
+
1432
+ .ui-chat-bubble-avatar {
1433
+ display: inline-flex;
1434
+ flex: none;
1435
+ inline-size: var(--chat-bubble-avatar-size, var(--control-height));
1436
+ block-size: var(--chat-bubble-avatar-size, var(--control-height));
1437
+ }
1438
+
1439
+ .ui-chat-bubble-avatar > .ui-avatar {
1440
+ inline-size: 100%;
1441
+ block-size: 100%;
1442
+ }
1443
+
1444
+ .ui-chat-bubble-column {
1445
+ display: flex;
1446
+ min-inline-size: 0;
1447
+ max-inline-size: min(var(--chat-bubble-max-inline-size), 100%);
1448
+ flex-direction: column;
1449
+ gap: var(--space-1);
1450
+ }
1451
+
1452
+ .ui-chat-bubble[data-placement="end"] .ui-chat-bubble-column {
1453
+ align-items: flex-end;
1454
+ }
1455
+
1456
+ .ui-chat-bubble-body {
1457
+ min-inline-size: 0;
1458
+ border-radius: var(--chat-bubble-radius);
1459
+ padding-block: var(--chat-bubble-padding-block);
1460
+ padding-inline: var(--chat-bubble-padding-inline);
1461
+ background: var(--chat-bubble-background, hsl(var(--muted)));
1462
+ color: var(--chat-bubble-foreground, hsl(var(--foreground)));
1463
+
1464
+ overflow-wrap: anywhere;
1465
+ }
1466
+
1467
+ .ui-chat-bubble[data-variant="outlined"] .ui-chat-bubble-body {
1468
+ border: var(--stroke-hairline) solid var(--chat-bubble-border-color, hsl(var(--border)));
1469
+ background: transparent;
1470
+ }
1471
+
1472
+ .ui-chat-bubble[data-variant="borderless"] .ui-chat-bubble-body {
1473
+ background: transparent;
1474
+ }
1475
+
1476
+ .ui-chat-bubble[data-variant="borderless"][data-tone="default"] .ui-chat-bubble-body {
1477
+ padding-inline: 0;
1478
+ }
1479
+
1480
+ .ui-chat-bubble[data-placement="end"][data-variant="filled"] .ui-chat-bubble-body {
1481
+ background: var(--chat-bubble-end-background, hsl(var(--primary) / 0.1));
1482
+ color: var(--chat-bubble-end-foreground, hsl(var(--foreground)));
1483
+ }
1484
+
1485
+ .ui-chat-bubble[data-size="xs"] {
1486
+ --chat-bubble-padding-block: var(--space-1);
1487
+ --chat-bubble-padding-inline: var(--space-2);
1488
+ }
1489
+
1490
+ .ui-chat-bubble[data-size="sm"] {
1491
+ --chat-bubble-padding-block: var(--space-1);
1492
+ --chat-bubble-padding-inline: var(--space-3);
1493
+ }
1494
+
1495
+ .ui-chat-bubble[data-size="lg"] {
1496
+ --chat-bubble-padding-block: var(--space-3);
1497
+ --chat-bubble-padding-inline: var(--space-4);
1498
+ }
1499
+
1500
+ .ui-chat-bubble[data-tone="info"] .ui-chat-bubble-body {
1501
+ border: var(--stroke-hairline) solid hsl(var(--info) / var(--chat-bubble-tone-border-alpha));
1502
+ background: hsl(var(--info) / var(--chat-bubble-tone-background-alpha));
1503
+ }
1504
+
1505
+ .ui-chat-bubble[data-tone="success"] .ui-chat-bubble-body {
1506
+ border: var(--stroke-hairline) solid hsl(var(--success) / var(--chat-bubble-tone-border-alpha));
1507
+ background: hsl(var(--success) / var(--chat-bubble-tone-background-alpha));
1508
+ }
1509
+
1510
+ .ui-chat-bubble[data-tone="warning"] .ui-chat-bubble-body {
1511
+ border: var(--stroke-hairline) solid hsl(var(--warning) / var(--chat-bubble-tone-border-alpha));
1512
+ background: hsl(var(--warning) / var(--chat-bubble-tone-background-alpha));
1513
+ }
1514
+
1515
+ .ui-chat-bubble[data-tone="destructive"] .ui-chat-bubble-body {
1516
+ border: var(--stroke-hairline) solid
1517
+ hsl(var(--destructive) / var(--chat-bubble-tone-border-alpha));
1518
+ background: hsl(var(--destructive) / var(--chat-bubble-tone-background-alpha));
1519
+ }
1520
+
1521
+ .ui-chat-bubble-caret {
1522
+ display: inline-block;
1523
+ inline-size: var(--chat-bubble-typing-caret-width);
1524
+ block-size: var(--chat-bubble-typing-caret-height);
1525
+ margin-inline-start: var(--space-1);
1526
+ background: var(--chat-bubble-typing-caret-color, hsl(var(--muted-foreground)));
1527
+ vertical-align: text-bottom;
1528
+ }
1529
+
1530
+ .ui-chat-bubble-skeleton {
1531
+ display: grid;
1532
+ gap: var(--skeleton-row-gap);
1533
+ }
1534
+
1535
+ .ui-chat-bubble-skeleton-line {
1536
+ block-size: var(--skeleton-block-height);
1537
+ inline-size: var(--chat-bubble-max-inline-size);
1538
+ max-inline-size: 100%;
1539
+ }
1540
+
1541
+ .ui-chat-bubble-skeleton-line--short {
1542
+ inline-size: var(--chat-bubble-skeleton-short-inline-size);
1543
+ }
1544
+
1545
+ .ui-chat-bubble-list {
1546
+ position: relative;
1547
+ display: flex;
1548
+ min-block-size: 0;
1549
+ flex-direction: column;
1550
+
1551
+ block-size: 100%;
1552
+ }
1553
+
1554
+ .ui-chat-bubble-list-scroller {
1555
+ min-block-size: 0;
1556
+ flex: 1 1 auto;
1557
+ }
1558
+
1559
+ .ui-chat-bubble-list-feed {
1560
+ display: flex;
1561
+ flex-direction: column;
1562
+ gap: var(--chat-bubble-list-gap);
1563
+ }
1564
+
1565
+ .ui-chat-bubble-list-jump {
1566
+ position: absolute;
1567
+ display: flex;
1568
+ inset-inline: 0;
1569
+ inset-block-end: var(--chat-bubble-list-jump-inset);
1570
+ justify-content: center;
1571
+ pointer-events: none;
1572
+ }
1573
+
1574
+ .ui-chat-bubble-list-jump > * {
1575
+ pointer-events: auto;
1576
+ }
1577
+ }
1578
+
1579
+ @layer components {
1580
+ .ui-tree {
1581
+ display: flex;
1582
+ flex-direction: column;
1583
+ font-size: var(--tree-node-font-size);
1584
+ }
1585
+
1586
+ .ui-tree-node {
1587
+ display: flex;
1588
+ align-items: center;
1589
+ gap: var(--tree-node-gap);
1590
+
1591
+ min-block-size: var(--tree-node-height, var(--control-height));
1592
+ border-radius: var(--tree-node-radius);
1593
+ padding-inline: var(--tree-node-padding-inline);
1594
+
1595
+ padding-inline-start: calc(
1596
+ var(--tree-node-padding-inline) + var(--tree-node-level, 0) * var(--tree-indent-width)
1597
+ );
1598
+ cursor: pointer;
1599
+ }
1600
+
1601
+ .ui-tree-node:hover {
1602
+ background: var(--tree-node-hover-background, hsl(var(--accent)));
1603
+ }
1604
+
1605
+ .ui-tree-node[data-selected="true"] {
1606
+ background: var(--tree-node-selected-background, hsl(var(--accent)));
1607
+ color: var(--tree-node-selected-foreground, hsl(var(--accent-foreground)));
1608
+ font-weight: var(--font-weight-medium);
1609
+ }
1610
+
1611
+ .ui-tree-node[data-disabled] {
1612
+ cursor: not-allowed;
1613
+ opacity: var(--disabled-opacity);
1614
+ }
1615
+
1616
+ .ui-tree-switcher {
1617
+ display: inline-flex;
1618
+ flex: none;
1619
+ align-items: center;
1620
+ justify-content: center;
1621
+ inline-size: var(--tree-switcher-size);
1622
+ block-size: var(--tree-switcher-size);
1623
+ color: var(--tree-switcher-color, hsl(var(--muted-foreground)));
1624
+ }
1625
+
1626
+ .ui-tree-switcher > svg {
1627
+ inline-size: var(--tree-icon-size);
1628
+ block-size: var(--tree-icon-size);
1629
+ }
1630
+
1631
+ .ui-tree-switcher[data-leaf] {
1632
+ cursor: default;
1633
+ }
1634
+
1635
+ .ui-tree-check {
1636
+ display: inline-flex;
1637
+ flex: none;
1638
+ align-items: center;
1639
+ }
1640
+
1641
+ .ui-tree-icon {
1642
+ display: inline-flex;
1643
+ flex: none;
1644
+ align-items: center;
1645
+ color: hsl(var(--muted-foreground));
1646
+ }
1647
+
1648
+ .ui-tree-icon > svg {
1649
+ inline-size: var(--tree-icon-size);
1650
+ block-size: var(--tree-icon-size);
1651
+ }
1652
+
1653
+ .ui-tree-label {
1654
+ overflow: hidden;
1655
+ flex: 1;
1656
+ text-overflow: ellipsis;
1657
+ white-space: nowrap;
1658
+ }
1659
+
1660
+ .ui-tree-group {
1661
+ display: flex;
1662
+ flex-direction: column;
1663
+ }
1664
+
1665
+ .ui-tree[data-show-line="true"] .ui-tree-group {
1666
+ position: relative;
1667
+ }
1668
+
1669
+ .ui-tree[data-show-line="true"] .ui-tree-group::before {
1670
+ position: absolute;
1671
+ inset-block: 0;
1672
+
1673
+ inset-inline-start: calc(
1674
+ var(--tree-node-padding-inline) + (var(--tree-node-level, 1) - 1) * var(--tree-indent-width) +
1675
+ var(--tree-switcher-size) / 2
1676
+ );
1677
+ border-inline-start: 1px solid var(--tree-line-color, hsl(var(--border)));
1678
+ content: "";
1679
+ }
1680
+
1681
+ .ui-tree-loading {
1682
+ display: flex;
1683
+ align-items: center;
1684
+ min-block-size: var(--tree-node-height, var(--control-height));
1685
+ padding-inline-start: calc(
1686
+ var(--tree-node-padding-inline) + var(--tree-node-level, 0) * var(--tree-indent-width) +
1687
+ var(--tree-switcher-size)
1688
+ );
1689
+ }
1690
+
1691
+ .ui-tree-loading-bar {
1692
+ block-size: var(--tree-icon-size);
1693
+ inline-size: var(--tree-loading-bar-inline-size);
1694
+ }
1695
+
1696
+ .ui-tree-empty {
1697
+ padding-block: var(--space-4);
1698
+ padding-inline: var(--tree-node-padding-inline);
1699
+ color: hsl(var(--muted-foreground));
1700
+ }
1701
+
1702
+ .ui-tree[data-size="xs"] {
1703
+ --tree-node-height: var(--control-height-xs);
1704
+ --tree-node-font-size: var(--font-size-xs);
1705
+ }
1706
+
1707
+ .ui-tree[data-size="sm"] {
1708
+ --tree-node-height: var(--control-height-sm);
1709
+ }
1710
+
1711
+ .ui-tree[data-size="lg"] {
1712
+ --tree-node-height: var(--control-height-lg);
1713
+ }
1714
+
1715
+ .ui-tree[data-variant="directory"] .ui-tree-node[data-selected="true"] {
1716
+ background: var(--tree-node-selected-background, hsl(var(--primary) / 0.12));
1717
+ }
1718
+ }
@@ -480,4 +480,68 @@
480
480
  max-block-size: var(--branch-scope-picker-list-max-height);
481
481
  overflow-y: auto;
482
482
  }
483
+
484
+ .ui-chat-composer {
485
+ display: flex;
486
+ flex-direction: column;
487
+ gap: var(--chat-composer-gap);
488
+ inline-size: 100%;
489
+ padding-block: var(--chat-composer-padding-block);
490
+ padding-inline: var(--chat-composer-padding-inline);
491
+ border-width: var(--control-border-width);
492
+ border-style: solid;
493
+ border-radius: var(--chat-composer-radius, var(--control-radius));
494
+ }
495
+
496
+ .ui-chat-composer[data-disabled] {
497
+ cursor: not-allowed;
498
+ opacity: var(--disabled-opacity);
499
+ }
500
+
501
+ .ui-chat-composer-header {
502
+ padding-block-end: var(--chat-composer-gap);
503
+ border-block-end: var(
504
+ --chat-composer-header-border,
505
+ var(--control-border-width) solid hsl(var(--border))
506
+ );
507
+ }
508
+
509
+ .ui-chat-composer-row {
510
+ display: flex;
511
+ align-items: flex-end;
512
+ gap: var(--chat-composer-row-gap);
513
+ }
514
+
515
+ .ui-chat-composer-prefix,
516
+ .ui-chat-composer-actions {
517
+ display: flex;
518
+ flex-shrink: 0;
519
+ align-items: center;
520
+ gap: var(--chat-composer-row-gap);
521
+ }
522
+
523
+ .ui-chat-composer-field {
524
+ flex: 1 1 auto;
525
+ min-inline-size: 0;
526
+ }
527
+
528
+ .ui-chat-composer .ui-textarea-autogrow::after {
529
+ min-block-size: var(--chat-composer-min-height, var(--control-height));
530
+ max-block-size: var(--chat-composer-max-height, calc(var(--control-height) * 5));
531
+ }
532
+
533
+ .ui-chat-composer-footer {
534
+ font-size: var(--chat-composer-footer-font-size);
535
+ }
536
+
537
+ }
538
+
539
+ @layer components {
540
+
541
+ .ui-chat-suggestion-item-text {
542
+ display: flex;
543
+ flex-direction: column;
544
+ min-inline-size: 0;
545
+ text-align: start;
546
+ }
483
547
  }