thurview 0.5.1 → 0.7.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.
package/dist/ui/app.css CHANGED
@@ -854,7 +854,48 @@ kbd {
854
854
  font-size: 12.5px;
855
855
  }
856
856
 
857
- /* Map */
857
+ /* Map. The tab opens with what it is for, because a reader who has to guess
858
+ reads it once and never returns. */
859
+ .map-intro {
860
+ max-width: 72ch;
861
+ margin-bottom: 18px;
862
+ }
863
+ .map-intro h2 {
864
+ font-family: var(--font-mono);
865
+ font-size: 15px;
866
+ margin: 0 0 5px;
867
+ }
868
+ .map-intro p {
869
+ margin: 0;
870
+ color: var(--fg2);
871
+ font-size: 13px;
872
+ line-height: 1.55;
873
+ }
874
+ .map-route {
875
+ display: flex;
876
+ flex-wrap: wrap;
877
+ align-items: center;
878
+ gap: 8px;
879
+ margin-top: 12px;
880
+ font-size: 12px;
881
+ }
882
+ .map-group {
883
+ margin-bottom: 22px;
884
+ }
885
+ .map-group h3,
886
+ .map-edges h3 {
887
+ font-family: var(--font-mono);
888
+ font-size: 11px;
889
+ font-weight: 700;
890
+ text-transform: uppercase;
891
+ letter-spacing: 0.08em;
892
+ color: var(--muted);
893
+ margin: 0 0 10px;
894
+ }
895
+ .map-note {
896
+ font-size: 12px;
897
+ margin-bottom: 10px;
898
+ }
858
899
  .map-layout {
859
900
  display: flex;
860
901
  height: 100%;
@@ -929,22 +970,41 @@ kbd {
929
970
  font-size: 12.5px;
930
971
  color: var(--fg2);
931
972
  }
932
- .map-node .children {
973
+ .map-node .meta {
933
974
  font-family: var(--font-mono);
934
975
  font-size: 11px;
935
976
  color: var(--muted);
936
- margin-top: 8px;
977
+ margin-top: 10px;
978
+ display: flex;
979
+ flex-wrap: wrap;
980
+ align-items: center;
981
+ gap: 6px 10px;
982
+ }
983
+ .map-node .meta .warn-text {
984
+ color: var(--warn);
985
+ }
986
+ .map-node .meta button.drill {
987
+ padding: 3px 8px;
988
+ font-size: 11px;
937
989
  }
938
990
  .map-node.added {
939
991
  border-color: var(--ok);
940
992
  }
941
993
  .map-node.removed {
942
994
  border-color: var(--del);
943
- opacity: 0.7;
944
995
  }
945
996
  .map-node.changed {
946
997
  border-color: var(--warn);
947
998
  }
999
+ /* Untouched parts stay on the board - they are the context that makes the
1000
+ change readable - but they must not compete with it for attention. */
1001
+ .map-node.quiet {
1002
+ opacity: 0.6;
1003
+ background: transparent;
1004
+ }
1005
+ .map-node.quiet:hover {
1006
+ opacity: 1;
1007
+ }
948
1008
  .map-node .status {
949
1009
  position: absolute;
950
1010
  top: 8px;
@@ -955,17 +1015,43 @@ kbd {
955
1015
  font-size: 13px;
956
1016
  }
957
1017
  .map-edges .edge {
958
- padding: 5px 0;
1018
+ padding: 5px 0 5px 10px;
959
1019
  border-top: 1px solid var(--line);
1020
+ border-left: 2px solid transparent;
960
1021
  display: flex;
1022
+ flex-wrap: wrap;
961
1023
  gap: 8px;
962
1024
  font-family: var(--font-mono);
963
1025
  font-size: 12px;
964
1026
  }
1027
+ /* A link into a changed part is the seam a reviewer has to check; one between
1028
+ two untouched parts is only there to place it. */
1029
+ .map-edges .edge.hot {
1030
+ border-left-color: var(--warn);
1031
+ }
1032
+ .map-edges .edge:not(.hot) {
1033
+ opacity: 0.6;
1034
+ }
965
1035
  .map-edges .edge b {
966
1036
  cursor: pointer;
967
1037
  color: var(--link);
968
1038
  }
1039
+ .map-side .neighbours {
1040
+ font-size: 12px;
1041
+ }
1042
+ .map-side .neighbour {
1043
+ display: flex;
1044
+ flex-wrap: wrap;
1045
+ align-items: center;
1046
+ gap: 6px;
1047
+ padding: 4px 0;
1048
+ border-top: 1px solid var(--line);
1049
+ }
1050
+ .map-side .neighbour .nb {
1051
+ font-family: var(--font-mono);
1052
+ color: var(--link);
1053
+ cursor: pointer;
1054
+ }
969
1055
  .map-side .file {
970
1056
  font-family: var(--font-mono);
971
1057
  font-size: 12px;
@@ -1341,6 +1427,118 @@ kbd {
1341
1427
  font-family: var(--font-mono);
1342
1428
  font-size: 13px;
1343
1429
  }
1430
+ /* An empty state that explains itself runs to a paragraph, and a paragraph the
1431
+ width of the viewport is unreadable. */
1432
+ .empty-state p {
1433
+ max-width: 62ch;
1434
+ margin: 0 auto 8px;
1435
+ line-height: 1.6;
1436
+ }
1437
+
1438
+ /* ---- Interface delta ----
1439
+ Above the document, because "what does this let us do now" is the reader's
1440
+ first question and today they reconstruct it from the diff. Derived at
1441
+ publish, so the empty state carries as much weight as a removal: a refactor
1442
+ says so in the verdict line rather than showing an empty box. Removed rows
1443
+ read first and warmest, changed next, added last. */
1444
+ .ifd {
1445
+ max-width: 1200px;
1446
+ margin: 20px auto 0;
1447
+ padding: 0 24px;
1448
+ }
1449
+ .ifd .block-actions {
1450
+ position: static;
1451
+ opacity: 1;
1452
+ }
1453
+ .ifd-head {
1454
+ display: flex;
1455
+ align-items: center;
1456
+ gap: 8px;
1457
+ padding: 8px 12px;
1458
+ background: var(--bg2);
1459
+ border: 1px solid var(--line);
1460
+ border-radius: var(--radius) var(--radius) 0 0;
1461
+ font-size: 12px;
1462
+ }
1463
+ .ifd-head .t {
1464
+ font-family: var(--font-display);
1465
+ font-weight: 600;
1466
+ text-transform: var(--heading-transform);
1467
+ color: var(--fg);
1468
+ }
1469
+ .ifd-head .spacer {
1470
+ flex: 1;
1471
+ }
1472
+ .ifd-head .heading-toggle {
1473
+ margin-left: 0;
1474
+ }
1475
+ .ifd-body {
1476
+ border: 1px solid var(--line);
1477
+ border-top: 0;
1478
+ border-radius: 0 0 var(--radius) var(--radius);
1479
+ background: var(--bg-code);
1480
+ padding: 4px 0 8px;
1481
+ }
1482
+ .ifd-body > button {
1483
+ margin: 4px 12px;
1484
+ }
1485
+ .ifd-verdict {
1486
+ margin: 8px 12px;
1487
+ color: var(--fg2);
1488
+ font-size: 13px;
1489
+ }
1490
+ .ifd-entry {
1491
+ display: flex;
1492
+ align-items: baseline;
1493
+ gap: 10px;
1494
+ padding: 7px 12px;
1495
+ border-top: 1px solid var(--line2);
1496
+ cursor: pointer;
1497
+ }
1498
+ .ifd-entry:hover {
1499
+ background: var(--bg3);
1500
+ }
1501
+ .ifd-entry > .badge {
1502
+ flex: 0 0 auto;
1503
+ min-width: 66px;
1504
+ justify-content: center;
1505
+ }
1506
+ .ifd-removed {
1507
+ background: var(--del-bg);
1508
+ }
1509
+ .ifd-added {
1510
+ background: var(--add-bg);
1511
+ }
1512
+ .ifd-what {
1513
+ flex: 1;
1514
+ min-width: 0;
1515
+ }
1516
+ .ifd-name {
1517
+ font-family: var(--font-mono);
1518
+ font-size: 12.5px;
1519
+ color: var(--fg);
1520
+ overflow-wrap: anywhere;
1521
+ }
1522
+ .ifd-was {
1523
+ font-size: 12px;
1524
+ color: var(--muted);
1525
+ text-decoration: line-through;
1526
+ overflow-wrap: anywhere;
1527
+ }
1528
+ .ifd-cap {
1529
+ font-size: 12.5px;
1530
+ color: var(--fg2);
1531
+ margin-top: 3px;
1532
+ }
1533
+ .ifd-where {
1534
+ flex: 0 1 auto;
1535
+ min-width: 0;
1536
+ overflow: hidden;
1537
+ text-overflow: ellipsis;
1538
+ white-space: nowrap;
1539
+ font-size: 11.5px;
1540
+ color: var(--muted);
1541
+ }
1344
1542
 
1345
1543
  /* ---- Small screens ----
1346
1544
  One column below 900px: the table-of-contents rail, the split diff and the
@@ -1382,6 +1580,14 @@ kbd {
1382
1580
  padding: 5px 7px;
1383
1581
  }
1384
1582
 
1583
+ .ifd {
1584
+ padding: 0 14px;
1585
+ }
1586
+ /* the path is the first thing to go: the declaration is what the reader needs */
1587
+ .ifd-where {
1588
+ display: none;
1589
+ }
1590
+
1385
1591
  /* The rail is dropped rather than squeezed; headings stay reachable by scrolling. */
1386
1592
  .doc-layout {
1387
1593
  grid-template-columns: minmax(0, 1fr);