@godxjp/ui 20.2.1 → 21.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 (59) hide show
  1. package/dist/components/data-display/chat-bubble.d.ts +30 -0
  2. package/dist/components/data-display/chat-bubble.js +229 -0
  3. package/dist/components/data-display/descriptions.js +4 -1
  4. package/dist/components/data-display/index.d.ts +4 -2
  5. package/dist/components/data-display/index.js +5 -2
  6. package/dist/components/data-display/popover.js +3 -2
  7. package/dist/components/data-display/scroll-area.js +26 -1
  8. package/dist/components/data-display/tree.d.ts +8 -0
  9. package/dist/components/data-display/tree.js +426 -0
  10. package/dist/components/data-entry/chat-composer.d.ts +50 -0
  11. package/dist/components/data-entry/chat-composer.js +163 -0
  12. package/dist/components/data-entry/chat-suggestion.d.ts +28 -0
  13. package/dist/components/data-entry/chat-suggestion.js +285 -0
  14. package/dist/components/data-entry/index.d.ts +4 -0
  15. package/dist/components/data-entry/index.js +4 -0
  16. package/dist/components/data-entry/textarea.js +3 -1
  17. package/dist/components/data-entry/tree-utils.d.ts +10 -48
  18. package/dist/components/data-entry/tree-utils.js +1 -154
  19. package/dist/i18n/messages/en.json +45 -0
  20. package/dist/i18n/messages/ja.json +43 -0
  21. package/dist/i18n/messages/vi.json +44 -0
  22. package/dist/lib/tree.d.ts +53 -0
  23. package/dist/lib/tree.js +155 -0
  24. package/dist/props/components/data-display.prop.d.ts +187 -1
  25. package/dist/props/components/data-entry.prop.d.ts +127 -0
  26. package/dist/props/registry.d.ts +140 -3
  27. package/dist/props/registry.js +202 -3
  28. package/dist/styles/control.css +7 -0
  29. package/dist/styles/data-display-layout.css +309 -55
  30. package/dist/styles/data-entry-layout.css +64 -0
  31. package/dist/styles/shell-layout.css +2 -1
  32. package/dist/tokens/base.css +3 -0
  33. package/dist/tokens/components/chat-bubble.css +36 -0
  34. package/dist/tokens/components/chat-composer.css +19 -0
  35. package/dist/tokens/components/data-display.css +0 -6
  36. package/dist/tokens/components/descriptions.css +4 -0
  37. package/dist/tokens/components/shell.css +1 -0
  38. package/dist/tokens/components/tree.css +27 -0
  39. package/docs/FRAME-COVERAGE-LEDGER.md +1 -1
  40. package/docs/FRAME-COVERAGE-REPORT.md +8 -3
  41. package/docs/data-display/chat-bubble.tsx +397 -0
  42. package/docs/data-display/timeline.tsx +46 -0
  43. package/docs/data-display/tree.tsx +394 -0
  44. package/docs/data-entry/chat-composer.tsx +464 -0
  45. package/docs/data-entry/chat-suggestion.tsx +301 -0
  46. package/docs/roadmap/ai-chat-components.md +207 -0
  47. package/docs/roadmap/antd-parity.md +154 -0
  48. package/docs/roadmap/badge-tag-chip-count.md +172 -0
  49. package/docs/roadmap/list-masonry.md +159 -0
  50. package/docs/roadmap/parity-audit-data-display-feedback.md +567 -0
  51. package/docs/roadmap/parity-audit-data-entry.md +344 -0
  52. package/docs/roadmap/parity-audit-layout-navigation-general.md +464 -0
  53. package/docs/roadmap/parity-backlog.md +79 -0
  54. package/docs/roadmap/tree-components.md +151 -0
  55. package/docs/showcase/table-tree-rows.tsx +4 -4
  56. package/package.json +5 -3
  57. package/dist/components/data-display/tree-list.d.ts +0 -13
  58. package/dist/components/data-display/tree-list.js +0 -26
  59. package/docs/data-display/tree-list.tsx +0 -107
@@ -251,61 +251,6 @@
251
251
  background: hsl(var(--muted-foreground));
252
252
  }
253
253
 
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
254
  .ui-timeline {
310
255
  display: flex;
311
256
  flex-direction: column;
@@ -395,6 +340,10 @@
395
340
  }
396
341
 
397
342
  .ui-timeline-title {
343
+
344
+ min-inline-size: 0;
345
+ flex: 1 1 0%;
346
+
398
347
  font-weight: var(--font-weight-medium);
399
348
  }
400
349
 
@@ -795,6 +744,10 @@
795
744
 
796
745
  @layer components {
797
746
 
747
+ [data-slot="scroll-area-viewport"][data-orientation="vertical"] > * {
748
+ display: block !important;
749
+ }
750
+
798
751
  .ui-scroll-area-bar {
799
752
  padding: var(--scroll-area-bar-padding);
800
753
  }
@@ -1399,3 +1352,304 @@
1399
1352
  font-size: var(--prose-code-font-size);
1400
1353
  }
1401
1354
  }
1355
+
1356
+ @layer components {
1357
+
1358
+ .ui-chat-bubble {
1359
+ display: flex;
1360
+ align-items: flex-start;
1361
+ gap: var(--chat-bubble-gap);
1362
+ min-inline-size: 0;
1363
+ }
1364
+
1365
+ .ui-chat-bubble[data-placement="end"] {
1366
+ flex-direction: row-reverse;
1367
+ }
1368
+
1369
+ .ui-chat-bubble-avatar {
1370
+ display: inline-flex;
1371
+ flex: none;
1372
+ inline-size: var(--chat-bubble-avatar-size, var(--control-height));
1373
+ block-size: var(--chat-bubble-avatar-size, var(--control-height));
1374
+ }
1375
+
1376
+ .ui-chat-bubble-avatar > .ui-avatar {
1377
+ inline-size: 100%;
1378
+ block-size: 100%;
1379
+ }
1380
+
1381
+ .ui-chat-bubble-column {
1382
+ display: flex;
1383
+ min-inline-size: 0;
1384
+ max-inline-size: min(var(--chat-bubble-max-inline-size), 100%);
1385
+ flex-direction: column;
1386
+ gap: var(--space-1);
1387
+ }
1388
+
1389
+ .ui-chat-bubble[data-placement="end"] .ui-chat-bubble-column {
1390
+ align-items: flex-end;
1391
+ }
1392
+
1393
+ .ui-chat-bubble-body {
1394
+ min-inline-size: 0;
1395
+ border-radius: var(--chat-bubble-radius);
1396
+ padding-block: var(--chat-bubble-padding-block);
1397
+ padding-inline: var(--chat-bubble-padding-inline);
1398
+ background: var(--chat-bubble-background, hsl(var(--muted)));
1399
+ color: var(--chat-bubble-foreground, hsl(var(--foreground)));
1400
+
1401
+ overflow-wrap: anywhere;
1402
+ }
1403
+
1404
+ .ui-chat-bubble[data-variant="outlined"] .ui-chat-bubble-body {
1405
+ border: var(--stroke-hairline) solid var(--chat-bubble-border-color, hsl(var(--border)));
1406
+ background: transparent;
1407
+ }
1408
+
1409
+ .ui-chat-bubble[data-variant="borderless"] .ui-chat-bubble-body {
1410
+ background: transparent;
1411
+ }
1412
+
1413
+ .ui-chat-bubble[data-variant="borderless"][data-tone="default"] .ui-chat-bubble-body {
1414
+ padding-inline: 0;
1415
+ }
1416
+
1417
+ .ui-chat-bubble[data-placement="end"][data-variant="filled"] .ui-chat-bubble-body {
1418
+ background: var(--chat-bubble-end-background, hsl(var(--primary) / 0.1));
1419
+ color: var(--chat-bubble-end-foreground, hsl(var(--foreground)));
1420
+ }
1421
+
1422
+ .ui-chat-bubble[data-size="xs"] {
1423
+ --chat-bubble-padding-block: var(--space-1);
1424
+ --chat-bubble-padding-inline: var(--space-2);
1425
+ }
1426
+
1427
+ .ui-chat-bubble[data-size="sm"] {
1428
+ --chat-bubble-padding-block: var(--space-1);
1429
+ --chat-bubble-padding-inline: var(--space-3);
1430
+ }
1431
+
1432
+ .ui-chat-bubble[data-size="lg"] {
1433
+ --chat-bubble-padding-block: var(--space-3);
1434
+ --chat-bubble-padding-inline: var(--space-4);
1435
+ }
1436
+
1437
+ .ui-chat-bubble[data-tone="info"] .ui-chat-bubble-body {
1438
+ border: var(--stroke-hairline) solid hsl(var(--info) / var(--chat-bubble-tone-border-alpha));
1439
+ background: hsl(var(--info) / var(--chat-bubble-tone-background-alpha));
1440
+ }
1441
+
1442
+ .ui-chat-bubble[data-tone="success"] .ui-chat-bubble-body {
1443
+ border: var(--stroke-hairline) solid hsl(var(--success) / var(--chat-bubble-tone-border-alpha));
1444
+ background: hsl(var(--success) / var(--chat-bubble-tone-background-alpha));
1445
+ }
1446
+
1447
+ .ui-chat-bubble[data-tone="warning"] .ui-chat-bubble-body {
1448
+ border: var(--stroke-hairline) solid hsl(var(--warning) / var(--chat-bubble-tone-border-alpha));
1449
+ background: hsl(var(--warning) / var(--chat-bubble-tone-background-alpha));
1450
+ }
1451
+
1452
+ .ui-chat-bubble[data-tone="destructive"] .ui-chat-bubble-body {
1453
+ border: var(--stroke-hairline) solid
1454
+ hsl(var(--destructive) / var(--chat-bubble-tone-border-alpha));
1455
+ background: hsl(var(--destructive) / var(--chat-bubble-tone-background-alpha));
1456
+ }
1457
+
1458
+ .ui-chat-bubble-caret {
1459
+ display: inline-block;
1460
+ inline-size: var(--chat-bubble-typing-caret-width);
1461
+ block-size: var(--chat-bubble-typing-caret-height);
1462
+ margin-inline-start: var(--space-1);
1463
+ background: var(--chat-bubble-typing-caret-color, hsl(var(--muted-foreground)));
1464
+ vertical-align: text-bottom;
1465
+ }
1466
+
1467
+ .ui-chat-bubble-skeleton {
1468
+ display: grid;
1469
+ gap: var(--skeleton-row-gap);
1470
+ }
1471
+
1472
+ .ui-chat-bubble-skeleton-line {
1473
+ block-size: var(--skeleton-block-height);
1474
+ inline-size: var(--chat-bubble-max-inline-size);
1475
+ max-inline-size: 100%;
1476
+ }
1477
+
1478
+ .ui-chat-bubble-skeleton-line--short {
1479
+ inline-size: var(--chat-bubble-skeleton-short-inline-size);
1480
+ }
1481
+
1482
+ .ui-chat-bubble-list {
1483
+ position: relative;
1484
+ display: flex;
1485
+ min-block-size: 0;
1486
+ flex-direction: column;
1487
+
1488
+ block-size: 100%;
1489
+ }
1490
+
1491
+ .ui-chat-bubble-list-scroller {
1492
+ min-block-size: 0;
1493
+ flex: 1 1 auto;
1494
+ }
1495
+
1496
+ .ui-chat-bubble-list-feed {
1497
+ display: flex;
1498
+ flex-direction: column;
1499
+ gap: var(--chat-bubble-list-gap);
1500
+ }
1501
+
1502
+ .ui-chat-bubble-list-jump {
1503
+ position: absolute;
1504
+ display: flex;
1505
+ inset-inline: 0;
1506
+ inset-block-end: var(--chat-bubble-list-jump-inset);
1507
+ justify-content: center;
1508
+ pointer-events: none;
1509
+ }
1510
+
1511
+ .ui-chat-bubble-list-jump > * {
1512
+ pointer-events: auto;
1513
+ }
1514
+ }
1515
+
1516
+ @layer components {
1517
+ .ui-tree {
1518
+ display: flex;
1519
+ flex-direction: column;
1520
+ font-size: var(--tree-node-font-size);
1521
+ }
1522
+
1523
+ .ui-tree-node {
1524
+ display: flex;
1525
+ align-items: center;
1526
+ gap: var(--tree-node-gap);
1527
+
1528
+ min-block-size: var(--tree-node-height, var(--control-height));
1529
+ border-radius: var(--tree-node-radius);
1530
+ padding-inline: var(--tree-node-padding-inline);
1531
+
1532
+ padding-inline-start: calc(
1533
+ var(--tree-node-padding-inline) + var(--tree-node-level, 0) * var(--tree-indent-width)
1534
+ );
1535
+ cursor: pointer;
1536
+ }
1537
+
1538
+ .ui-tree-node:hover {
1539
+ background: var(--tree-node-hover-background, hsl(var(--accent)));
1540
+ }
1541
+
1542
+ .ui-tree-node[data-selected="true"] {
1543
+ background: var(--tree-node-selected-background, hsl(var(--accent)));
1544
+ color: var(--tree-node-selected-foreground, hsl(var(--accent-foreground)));
1545
+ font-weight: var(--font-weight-medium);
1546
+ }
1547
+
1548
+ .ui-tree-node[data-disabled] {
1549
+ cursor: not-allowed;
1550
+ opacity: var(--disabled-opacity);
1551
+ }
1552
+
1553
+ .ui-tree-switcher {
1554
+ display: inline-flex;
1555
+ flex: none;
1556
+ align-items: center;
1557
+ justify-content: center;
1558
+ inline-size: var(--tree-switcher-size);
1559
+ block-size: var(--tree-switcher-size);
1560
+ color: var(--tree-switcher-color, hsl(var(--muted-foreground)));
1561
+ }
1562
+
1563
+ .ui-tree-switcher > svg {
1564
+ inline-size: var(--tree-icon-size);
1565
+ block-size: var(--tree-icon-size);
1566
+ }
1567
+
1568
+ .ui-tree-switcher[data-leaf] {
1569
+ cursor: default;
1570
+ }
1571
+
1572
+ .ui-tree-check {
1573
+ display: inline-flex;
1574
+ flex: none;
1575
+ align-items: center;
1576
+ }
1577
+
1578
+ .ui-tree-icon {
1579
+ display: inline-flex;
1580
+ flex: none;
1581
+ align-items: center;
1582
+ color: hsl(var(--muted-foreground));
1583
+ }
1584
+
1585
+ .ui-tree-icon > svg {
1586
+ inline-size: var(--tree-icon-size);
1587
+ block-size: var(--tree-icon-size);
1588
+ }
1589
+
1590
+ .ui-tree-label {
1591
+ overflow: hidden;
1592
+ flex: 1;
1593
+ text-overflow: ellipsis;
1594
+ white-space: nowrap;
1595
+ }
1596
+
1597
+ .ui-tree-group {
1598
+ display: flex;
1599
+ flex-direction: column;
1600
+ }
1601
+
1602
+ .ui-tree[data-show-line="true"] .ui-tree-group {
1603
+ position: relative;
1604
+ }
1605
+
1606
+ .ui-tree[data-show-line="true"] .ui-tree-group::before {
1607
+ position: absolute;
1608
+ inset-block: 0;
1609
+
1610
+ inset-inline-start: calc(
1611
+ var(--tree-node-padding-inline) + (var(--tree-node-level, 1) - 1) * var(--tree-indent-width) +
1612
+ var(--tree-switcher-size) / 2
1613
+ );
1614
+ border-inline-start: 1px solid var(--tree-line-color, hsl(var(--border)));
1615
+ content: "";
1616
+ }
1617
+
1618
+ .ui-tree-loading {
1619
+ display: flex;
1620
+ align-items: center;
1621
+ min-block-size: var(--tree-node-height, var(--control-height));
1622
+ padding-inline-start: calc(
1623
+ var(--tree-node-padding-inline) + var(--tree-node-level, 0) * var(--tree-indent-width) +
1624
+ var(--tree-switcher-size)
1625
+ );
1626
+ }
1627
+
1628
+ .ui-tree-loading-bar {
1629
+ block-size: var(--tree-icon-size);
1630
+ inline-size: var(--tree-loading-bar-inline-size);
1631
+ }
1632
+
1633
+ .ui-tree-empty {
1634
+ padding-block: var(--space-4);
1635
+ padding-inline: var(--tree-node-padding-inline);
1636
+ color: hsl(var(--muted-foreground));
1637
+ }
1638
+
1639
+ .ui-tree[data-size="xs"] {
1640
+ --tree-node-height: var(--control-height-xs);
1641
+ --tree-node-font-size: var(--font-size-xs);
1642
+ }
1643
+
1644
+ .ui-tree[data-size="sm"] {
1645
+ --tree-node-height: var(--control-height-sm);
1646
+ }
1647
+
1648
+ .ui-tree[data-size="lg"] {
1649
+ --tree-node-height: var(--control-height-lg);
1650
+ }
1651
+
1652
+ .ui-tree[data-variant="directory"] .ui-tree-node[data-selected="true"] {
1653
+ background: var(--tree-node-selected-background, hsl(var(--primary) / 0.12));
1654
+ }
1655
+ }
@@ -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
  }
@@ -12,7 +12,8 @@
12
12
  "sidebar footer";
13
13
  grid-template-columns: var(--app-shell-sidebar-width) minmax(0, 1fr);
14
14
  grid-template-rows: var(--app-shell-bar-height) minmax(0, 1fr) auto;
15
- height: 100vh;
15
+
16
+ height: calc(100vh - var(--app-shell-viewport-inset, 0px));
16
17
  background: hsl(var(--background));
17
18
  }
18
19
 
@@ -22,9 +22,11 @@
22
22
  @import "./components/data-display.css";
23
23
  @import "./components/scroll-area.css";
24
24
  @import "./components/list-row.css";
25
+ @import "./components/chat-bubble.css";
25
26
  @import "./components/logo.css";
26
27
  @import "./components/email.css";
27
28
  @import "./components/data-entry.css";
29
+ @import "./components/chat-composer.css";
28
30
  @import "./components/upload.css";
29
31
  @import "./components/shell.css";
30
32
  @import "./components/separator.css";
@@ -33,3 +35,4 @@
33
35
  @import "./components/error-surface.css";
34
36
  @import "./components/activity.css";
35
37
  @import "./components/text.css";
38
+ @import "./components/tree.css";
@@ -0,0 +1,36 @@
1
+
2
+ :root {
3
+
4
+ --chat-bubble-background: initial;
5
+
6
+ --chat-bubble-foreground: initial;
7
+
8
+ --chat-bubble-border-color: initial;
9
+ --chat-bubble-radius: var(--radius-lg);
10
+
11
+ --chat-bubble-gap: var(--space-3);
12
+
13
+ --chat-bubble-max-inline-size: 34rem;
14
+
15
+ --chat-bubble-avatar-size: initial;
16
+
17
+ --chat-bubble-padding-block: var(--space-2);
18
+ --chat-bubble-padding-inline: var(--space-3);
19
+
20
+ --chat-bubble-list-gap: var(--space-4);
21
+
22
+ --chat-bubble-list-jump-inset: var(--space-3);
23
+
24
+ --chat-bubble-typing-caret-color: initial;
25
+ --chat-bubble-typing-caret-width: var(--stroke-md);
26
+
27
+ --chat-bubble-typing-caret-height: 1em;
28
+
29
+ --chat-bubble-skeleton-short-inline-size: 60%;
30
+
31
+ --chat-bubble-tone-background-alpha: 0.08;
32
+ --chat-bubble-tone-border-alpha: 0.35;
33
+
34
+ --chat-bubble-end-background: initial;
35
+ --chat-bubble-end-foreground: initial;
36
+ }
@@ -0,0 +1,19 @@
1
+
2
+ :root {
3
+
4
+ --chat-composer-min-height: initial;
5
+ --chat-composer-max-height: initial;
6
+
7
+ --chat-composer-gap: var(--space-2);
8
+
9
+ --chat-composer-padding-block: var(--space-2);
10
+ --chat-composer-padding-inline: var(--space-2);
11
+
12
+ --chat-composer-row-gap: var(--space-2);
13
+
14
+ --chat-composer-radius: initial;
15
+
16
+ --chat-composer-header-border: initial;
17
+
18
+ --chat-composer-footer-font-size: var(--font-size-xs);
19
+ }
@@ -31,9 +31,6 @@
31
31
  --prose-code-space-inline: var(--space-1);
32
32
  --prose-code-radius: var(--radius-sm);
33
33
  --prose-image-radius: var(--radius-md);
34
- --tree-item-indent-width: var(--space-5);
35
- --tree-item-title-font-size: var(--font-size-xs);
36
- --tree-item-description-font-size: var(--font-size-xs);
37
34
  --timeline-note-font-size: var(--font-size-xs);
38
35
 
39
36
  --avatar-background: initial;
@@ -80,9 +77,6 @@
80
77
  --timeline-dot-current-background: initial;
81
78
  --timeline-line-completed-background: initial;
82
79
 
83
- --tree-item-active-border: initial;
84
- --tree-item-active-background: initial;
85
-
86
80
  --qr-code-foreground: 0 0% 0%;
87
81
  --qr-code-background: 0 0% 100%;
88
82
  --qr-code-size-xs: 6rem;
@@ -14,6 +14,10 @@
14
14
 
15
15
  --descriptions-value-line-height: calc(1.25 / 0.875);
16
16
 
17
+ --descriptions-label-font-size: var(--descriptions-value-font-size);
18
+
19
+ --descriptions-label-line-height: var(--descriptions-value-line-height);
20
+
17
21
  --descriptions-row-border: none;
18
22
  --descriptions-row-min-height: auto;
19
23
 
@@ -36,6 +36,7 @@
36
36
  --sidebar-gradient: none;
37
37
  --topbar-gradient: none;
38
38
 
39
+ --app-shell-viewport-inset: 0px;
39
40
  --app-shell-bar-height: var(--band-height-2xl);
40
41
 
41
42
  --app-shell-bar-inset: var(--space-page-x);
@@ -0,0 +1,27 @@
1
+
2
+
3
+ :root {
4
+
5
+ --tree-node-height: initial;
6
+
7
+ --tree-indent-width: var(--space-5);
8
+
9
+ --tree-node-padding-inline: var(--space-2);
10
+ --tree-node-gap: var(--space-2);
11
+ --tree-node-radius: var(--radius-sm);
12
+ --tree-node-font-size: var(--font-size-sm);
13
+
14
+ --tree-switcher-size: 1.25rem;
15
+
16
+ --tree-switcher-color: initial;
17
+
18
+ --tree-icon-size: var(--icon-size-md);
19
+
20
+ --tree-line-color: initial;
21
+
22
+ --tree-node-hover-background: initial;
23
+ --tree-node-selected-background: initial;
24
+ --tree-node-selected-foreground: initial;
25
+
26
+ --tree-loading-bar-inline-size: 40%;
27
+ }
@@ -112,7 +112,7 @@ The executed geometry sweep (`pnpm check:frame-geometry`, `scripts/frame-geometr
112
112
 
113
113
  ## Known gaps
114
114
 
115
- The issue's "Initial known gaps to encode" are locked in code (`KNOWN_GAPS` in `scripts/frame-coverage-contract.mjs`) and mirrored into `policy.knownGaps`: Button, Card, Card subcomponents, EmptyState, Progress, Carousel, DataTable, Charts and the Timeline/TreeList/PasswordStrength locale stress. They cannot be deleted, and they cannot be waived through `policy.notApplicable` — they must be **covered** or stay **UNTESTED**.
115
+ The issue's "Initial known gaps to encode" are locked in code (`KNOWN_GAPS` in `scripts/frame-coverage-contract.mjs`) and mirrored into `policy.knownGaps`: Button, Card, Card subcomponents, EmptyState, Progress, Carousel, DataTable, Charts and the Timeline/PasswordStrength locale stress. They cannot be deleted, and they cannot be waived through `policy.notApplicable` — they must be **covered** or stay **UNTESTED**.
116
116
 
117
117
  ## Current state — read this before quoting coverage
118
118
 
@@ -3,8 +3,8 @@
3
3
  > Generated by `scripts/frame-coverage.mjs` (issue #163). Do not edit by hand — run `pnpm check:frame-coverage`.
4
4
  > Standard: [FRAME-COVERAGE-STANDARD.md](./FRAME-COVERAGE-STANDARD.md). A missing dimension is **UNTESTED**, never a pass.
5
5
 
6
- - Public components: **137**
7
- - With ≥1 frame: **133** · zero-frame: **4**
6
+ - Public components: **141**
7
+ - With ≥1 frame: **136** · zero-frame: **5**
8
8
  - Fully covered (every contract axis declared): **0**
9
9
 
10
10
  ## UNTESTED — no `/frame/**` route
@@ -13,6 +13,7 @@
13
13
  - [ ] `CardBar`
14
14
  - [ ] `VisuallyHidden`
15
15
  - [ ] `RangeTimeline`
16
+ - [ ] `ChatBubbleList`
16
17
 
17
18
  ## Per-component contract axes
18
19
 
@@ -113,7 +114,7 @@ Legend: ✓ covered · N/A reasoned skip · · UNTESTED (blank cell = UNTESTED).
113
114
  | Popover | ✓ | N/A | N/A | · | · | · | · | · | · | · |
114
115
  | ScrollArea | ✓ | N/A | N/A | N/A | · | · | · | · | · | · |
115
116
  | Collapsible | ✓ | N/A | · | · | · | · | · | · | · | · |
116
- | TreeList | ✓ | N/A | N/A | N/A | · | · | · | · | · | · |
117
+ | Tree | ✓ | · | · | · | · | · | · | · | · | · |
117
118
  | Tooltip | ✓ | N/A | N/A | · | · | · | · | · | · | · |
118
119
  | PrefetchLink | ✓ | N/A | N/A | N/A | · | · | · | · | · | · |
119
120
  | Avatar | ✓ | ✓ | N/A | N/A | · | · | · | · | · | · |
@@ -157,4 +158,8 @@ Legend: ✓ covered · N/A reasoned skip · · UNTESTED (blank cell = UNTESTED).
157
158
  | PermissionMatrix | ✓ | N/A | · | N/A | · | · | · | · | · | · |
158
159
  | BranchScopePicker | ✓ | N/A | · | · | · | · | · | · | · | · |
159
160
  | ServiceRolePanel | ✓ | N/A | · | · | · | · | · | · | · | · |
161
+ | ChatBubble | ✓ | · | · | N/A | · | · | · | · | · | · |
162
+ | ChatBubbleList | **✗** | N/A | N/A | N/A | · | · | · | · | · | · |
163
+ | ChatComposer | ✓ | · | · | · | · | · | · | · | · | · |
164
+ | ChatSuggestion | ✓ | N/A | N/A | · | · | · | · | · | · | · |
160
165