jev-devtools 0.1.3 → 0.3.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 (52) hide show
  1. package/README.md +50 -4
  2. package/THIRD_PARTY_NOTICES.txt +27 -0
  3. package/lib/flow/index.d.ts +82 -0
  4. package/lib/flow/index.js +588 -0
  5. package/lib/server/flows.d.ts +25 -0
  6. package/lib/server/flows.js +115 -0
  7. package/lib/server/index.d.ts +8 -0
  8. package/lib/server/index.js +163 -9
  9. package/lib/server/recorder.d.ts +12 -2
  10. package/lib/server/recorder.js +47 -9
  11. package/lib/src/ChoiceProbabilities.d.ts +4 -0
  12. package/lib/src/ChoiceProbabilities.js +19 -0
  13. package/lib/src/ConnectedInspector.js +46 -29
  14. package/lib/src/DiagramContent.d.ts +6 -0
  15. package/lib/src/DiagramContent.js +32 -0
  16. package/lib/src/FlowOverview.d.ts +7 -0
  17. package/lib/src/FlowOverview.js +228 -0
  18. package/lib/src/JevDevtools.d.ts +6 -1
  19. package/lib/src/JevDevtools.js +52 -48
  20. package/lib/src/JevDrawer.d.ts +3 -2
  21. package/lib/src/JevDrawer.js +12 -3
  22. package/lib/src/Questions.d.ts +5 -0
  23. package/lib/src/Questions.js +174 -0
  24. package/lib/src/TraceContent.d.ts +11 -0
  25. package/lib/src/TraceContent.js +32 -0
  26. package/lib/src/TraceDiagram.d.ts +4 -1
  27. package/lib/src/TraceDiagram.js +111 -25
  28. package/lib/src/condition-inputs.d.ts +9 -0
  29. package/lib/src/condition-inputs.js +100 -0
  30. package/lib/src/flow-condition.d.ts +4 -0
  31. package/lib/src/flow-condition.js +47 -0
  32. package/lib/src/flow-model.d.ts +7 -2
  33. package/lib/src/flow-model.js +3 -12
  34. package/lib/src/flow-protocol.d.ts +68 -0
  35. package/lib/src/flow-protocol.js +1 -0
  36. package/lib/src/flow-stream.d.ts +8 -0
  37. package/lib/src/flow-stream.js +80 -0
  38. package/lib/src/index.d.ts +1 -1
  39. package/lib/src/inspector-styles.js +1 -1
  40. package/lib/src/inspector.css +725 -8
  41. package/lib/src/protocol.d.ts +18 -0
  42. package/lib/src/trace-store.d.ts +6 -0
  43. package/lib/src/trace-store.js +66 -0
  44. package/lib/src/trace-stream.d.ts +2 -0
  45. package/lib/src/trace-stream.js +65 -0
  46. package/lib/src/useDiagramViewport.d.ts +5 -0
  47. package/lib/src/useDiagramViewport.js +34 -6
  48. package/package.json +7 -2
  49. package/skills/setup-jev-devtools/SKILL.md +6 -2
  50. package/skills/setup-jev-devtools/references/flows.md +150 -0
  51. package/skills/setup-jev-devtools/references/nextjs.md +1 -1
  52. package/skills/setup-jev-devtools/references/verify.md +3 -1
@@ -831,7 +831,11 @@
831
831
  min-height: 100px;
832
832
  overflow: hidden;
833
833
  background-color: #0d0a0f;
834
- background-image: radial-gradient(#463449 0.8px, transparent 0.8px);
834
+ background-image: radial-gradient(
835
+ rgb(70 52 73 / var(--diagram-grid-opacity, 1))
836
+ calc(0.8px * var(--diagram-grid-weight, 1)),
837
+ transparent calc(0.8px * var(--diagram-grid-weight, 1))
838
+ );
835
839
  background-size: 20px 20px;
836
840
  border-block: 1px solid #302634;
837
841
  cursor: grab;
@@ -889,7 +893,7 @@
889
893
  position: absolute;
890
894
  border: 1.3px solid #f5f3f6;
891
895
  border-radius: 14px;
892
- padding: 20px;
896
+ padding: 16px;
893
897
  background: #0d0a0f;
894
898
  overflow: hidden;
895
899
  }
@@ -900,19 +904,20 @@
900
904
  500 10px ui-monospace,
901
905
  monospace;
902
906
  letter-spacing: 1px;
903
- margin: 0 0 10px;
907
+ margin: 0 0 7px;
904
908
  }
905
909
  .jev-devtools .lab-card h3 {
906
- font-size: 18px;
907
- font-weight: 500;
908
- line-height: 1.25;
909
- margin: 0 0 16px;
910
+ font-size: 16px;
911
+ font-weight: 600;
912
+ line-height: 1.3;
913
+ letter-spacing: -0.2px;
914
+ margin: 0 0 10px;
910
915
  overflow: hidden;
911
916
  white-space: nowrap;
912
917
  text-overflow: ellipsis;
913
918
  }
914
919
  .jev-devtools .lab-card p {
915
- font-size: 15px;
920
+ font-size: 13px;
916
921
  line-height: 1.4;
917
922
  margin: 10px 0;
918
923
  }
@@ -1040,3 +1045,715 @@
1040
1045
  width: auto;
1041
1046
  max-width: none;
1042
1047
  }
1048
+
1049
+ .jev-devtools .detail-body-questions {
1050
+ display: flex;
1051
+ flex-direction: column;
1052
+ overflow: auto;
1053
+ }
1054
+ .jev-devtools .questions-list {
1055
+ display: flex;
1056
+ flex-direction: column;
1057
+ flex: 1;
1058
+ min-height: 180px;
1059
+ }
1060
+ .jev-devtools .questions-navigation {
1061
+ display: flex;
1062
+ align-items: end;
1063
+ gap: 8px;
1064
+ flex-wrap: wrap;
1065
+ flex-shrink: 0;
1066
+ }
1067
+ .jev-devtools .questions-navigation label {
1068
+ display: flex;
1069
+ align-items: center;
1070
+ gap: 8px;
1071
+ white-space: nowrap;
1072
+ flex: 1;
1073
+ min-width: 240px;
1074
+ max-width: 480px;
1075
+ font-size: 11px;
1076
+ color: #bc9db5;
1077
+ }
1078
+ .jev-devtools .questions-navigation select {
1079
+ display: block;
1080
+ min-width: 0;
1081
+ }
1082
+ .jev-devtools .questions-navigation > span {
1083
+ align-self: center;
1084
+ color: #a89bac;
1085
+ }
1086
+ .jev-devtools .questions-help {
1087
+ margin: 8px 0;
1088
+ flex-shrink: 0;
1089
+ }
1090
+ .jev-devtools .questions-viewport {
1091
+ flex: 1;
1092
+ min-height: 0;
1093
+ overflow: auto;
1094
+ overflow-anchor: none;
1095
+ scrollbar-gutter: stable;
1096
+ padding: 3px;
1097
+ }
1098
+ .jev-devtools .questions-spacer {
1099
+ position: relative;
1100
+ width: 100%;
1101
+ }
1102
+ .jev-devtools .questions-row {
1103
+ position: absolute;
1104
+ top: 0;
1105
+ left: 0;
1106
+ width: 100%;
1107
+ padding-bottom: 14px;
1108
+ }
1109
+ .jev-devtools .questions-row .standalone {
1110
+ margin-bottom: 0;
1111
+ }
1112
+ .jev-devtools .questions-viewport:focus-visible,
1113
+ .jev-devtools .questions-row article:focus-visible {
1114
+ outline: 2px solid #e551ba;
1115
+ outline-offset: -2px;
1116
+ }
1117
+
1118
+ /* Reserve measured card geometry while rapid scrolling uses a light preview. */
1119
+ .jev-devtools .questions-row[data-preview="true"] article {
1120
+ height: 100%;
1121
+ }
1122
+ .jev-devtools .question-scroll-preview p {
1123
+ margin-top: 16px;
1124
+ }
1125
+
1126
+ /* The full distribution stays at reading size, outside the zoomable canvas. */
1127
+ .jev-devtools .lab-flow-viewport[hidden] {
1128
+ display: none;
1129
+ }
1130
+ .jev-devtools .lab-choice-browser {
1131
+ display: flex;
1132
+ flex-direction: column;
1133
+ flex: 1;
1134
+ min-height: 0;
1135
+ padding: 8px 16px;
1136
+ gap: 10px;
1137
+ }
1138
+ .jev-devtools .lab-choice-controls {
1139
+ display: flex;
1140
+ gap: 12px;
1141
+ align-items: end;
1142
+ flex-wrap: wrap;
1143
+ font-size: 12px;
1144
+ }
1145
+ .jev-devtools .lab-choice-controls label {
1146
+ display: grid;
1147
+ gap: 5px;
1148
+ }
1149
+ .jev-devtools .lab-choice-table-scroll {
1150
+ overflow: auto;
1151
+ overscroll-behavior: contain;
1152
+ min-height: 0;
1153
+ flex: 1;
1154
+ }
1155
+ .jev-devtools .lab-choice-browser table {
1156
+ width: 100%;
1157
+ border-collapse: collapse;
1158
+ font-size: 13px;
1159
+ }
1160
+ .jev-devtools .lab-choice-browser caption {
1161
+ text-align: left;
1162
+ padding: 8px 0;
1163
+ color: #aaa0af;
1164
+ }
1165
+ .jev-devtools .lab-choice-browser th,
1166
+ .jev-devtools .lab-choice-browser td {
1167
+ padding: 9px 12px;
1168
+ border-bottom: 1px solid #302634;
1169
+ text-align: left;
1170
+ }
1171
+ .jev-devtools .lab-choice-browser th {
1172
+ overflow-wrap: anywhere;
1173
+ max-width: 320px;
1174
+ }
1175
+ .jev-devtools .lab-choice-browser td {
1176
+ font-variant-numeric: tabular-nums;
1177
+ }
1178
+ .jev-devtools .lab-choice-browser code {
1179
+ white-space: normal;
1180
+ overflow-wrap: anywhere;
1181
+ }
1182
+ .jev-devtools .lab-choice-returned {
1183
+ display: block;
1184
+ font-size: 10px;
1185
+ color: #e551ba;
1186
+ }
1187
+ .jev-devtools .lab-choice-pagination {
1188
+ display: flex;
1189
+ align-items: center;
1190
+ gap: 12px;
1191
+ justify-content: space-between;
1192
+ font-size: 12px;
1193
+ }
1194
+ .jev-devtools .lab-choice-remainder button {
1195
+ margin-top: 7px;
1196
+ }
1197
+
1198
+ .jev-devtools .lab-flow-compact .lab-output {
1199
+ padding: 12px;
1200
+ height: 104px;
1201
+ }
1202
+ .jev-devtools .lab-flow-compact .lab-output .lab-eyebrow {
1203
+ margin-bottom: 6px;
1204
+ }
1205
+ .jev-devtools .lab-flow-compact .lab-output h3 {
1206
+ font-size: 16px;
1207
+ margin-bottom: 8px;
1208
+ }
1209
+ .jev-devtools .lab-flow-compact .lab-output p {
1210
+ font-size: 12px;
1211
+ margin: 4px 0;
1212
+ }
1213
+ .jev-devtools .lab-flow-compact .lab-result {
1214
+ display: -webkit-box;
1215
+ -webkit-line-clamp: 2;
1216
+ -webkit-box-orient: vertical;
1217
+ overflow: hidden;
1218
+ overflow-wrap: anywhere;
1219
+ }
1220
+ .jev-devtools .lab-choice-remainder {
1221
+ padding: 12px;
1222
+ }
1223
+ .jev-devtools .lab-choice-remainder .lab-small {
1224
+ margin: 8px 0 0;
1225
+ font-size: 11px;
1226
+ }
1227
+
1228
+ .jev-devtools .detail-body.detail-body-flow {
1229
+ flex-direction: column;
1230
+ }
1231
+ .jev-devtools .detail-body-flow > .warning,
1232
+ .jev-devtools .detail-body-flow > .error-banner {
1233
+ flex-shrink: 0;
1234
+ margin: 6px 16px;
1235
+ }
1236
+ .jev-devtools .lab-choice-browser {
1237
+ overflow: auto;
1238
+ }
1239
+ .jev-devtools .lab-choice-table-scroll {
1240
+ flex: 1 0 110px;
1241
+ }
1242
+
1243
+ /* Only freshly revealed branches enter; pan/zoom remains on the canvas. */
1244
+ .jev-devtools .lab-card-enter {
1245
+ animation: jev-card-enter 280ms cubic-bezier(0.2, 0.8, 0.2, 1) backwards;
1246
+ }
1247
+ .jev-devtools .lab-branch-enter {
1248
+ stroke-dasharray: 1;
1249
+ animation: jev-branch-enter 280ms ease-out backwards;
1250
+ }
1251
+ @keyframes jev-card-enter {
1252
+ from {
1253
+ opacity: 0;
1254
+ transform: translateX(-16px) scale(0.96);
1255
+ }
1256
+ }
1257
+ @keyframes jev-branch-enter {
1258
+ from {
1259
+ opacity: 0;
1260
+ stroke-dashoffset: 1;
1261
+ }
1262
+ to {
1263
+ opacity: 1;
1264
+ stroke-dashoffset: 0;
1265
+ }
1266
+ }
1267
+ @media (prefers-reduced-motion: reduce) {
1268
+ .jev-devtools .lab-card-enter,
1269
+ .jev-devtools .lab-branch-enter {
1270
+ animation: none;
1271
+ }
1272
+ }
1273
+
1274
+ /* Connected requests share one camera and one opt-in full request detail. */
1275
+ .whole-flow {
1276
+ min-width: 0;
1277
+ overflow: auto;
1278
+ }
1279
+ .flow-overview-viewport {
1280
+ position: relative;
1281
+ min-height: 240px;
1282
+ flex: 1 0 260px;
1283
+ overflow: hidden;
1284
+ touch-action: none;
1285
+ cursor: grab;
1286
+ background-image: radial-gradient(
1287
+ rgb(83 67 87 / var(--diagram-grid-opacity, 1))
1288
+ calc(1px * var(--diagram-grid-weight, 1)),
1289
+ transparent calc(1px * var(--diagram-grid-weight, 1))
1290
+ );
1291
+ background-size: 20px 20px;
1292
+ }
1293
+ .flow-overview-viewport[data-panning] {
1294
+ cursor: grabbing;
1295
+ }
1296
+ .flow-overview-canvas {
1297
+ position: absolute;
1298
+ transform-origin: 0 0;
1299
+ }
1300
+ .flow-connections {
1301
+ position: absolute;
1302
+ inset: 0;
1303
+ color: #c0b8c4;
1304
+ pointer-events: none;
1305
+ }
1306
+ .flow-step {
1307
+ position: absolute;
1308
+ width: 220px;
1309
+ min-height: 98px;
1310
+ display: flex;
1311
+ flex-direction: column;
1312
+ gap: 8px;
1313
+ text-align: left;
1314
+ padding: 14px;
1315
+ border: 1px solid #736476;
1316
+ border-radius: 12px;
1317
+ background: #151017;
1318
+ color: inherit;
1319
+ }
1320
+ .flow-step strong {
1321
+ overflow: hidden;
1322
+ text-overflow: ellipsis;
1323
+ white-space: nowrap;
1324
+ width: 100%;
1325
+ }
1326
+ .flow-step-description {
1327
+ overflow-wrap: anywhere;
1328
+ font-size: 12px;
1329
+ }
1330
+ .flow-step.flow-request {
1331
+ display: block;
1332
+ padding: 0;
1333
+ background: #0d0a0f;
1334
+ /* Skip offscreen paint/layout while preserving each question/expansion state. */
1335
+ content-visibility: auto;
1336
+ contain-intrinsic-size: auto 640px;
1337
+ }
1338
+ .flow-request-heading {
1339
+ width: 100%;
1340
+ height: 64px;
1341
+ display: flex;
1342
+ align-items: center;
1343
+ justify-content: space-between;
1344
+ text-align: left;
1345
+ padding: 12px 20px;
1346
+ border: 0;
1347
+ border-bottom: 1px solid #342a38;
1348
+ border-radius: 12px 12px 0 0;
1349
+ background: transparent;
1350
+ color: inherit;
1351
+ }
1352
+ .flow-request-heading .eyebrow {
1353
+ display: block;
1354
+ margin-bottom: 4px;
1355
+ }
1356
+ .jev-devtools .lab-flow-embedded {
1357
+ width: 1120px;
1358
+ display: block;
1359
+ }
1360
+ .jev-devtools .lab-flow-surface {
1361
+ position: relative;
1362
+ width: 1120px;
1363
+ }
1364
+ .jev-devtools .lab-flow-surface[hidden] {
1365
+ display: none;
1366
+ }
1367
+ .jev-devtools .lab-flow-embedded .lab-flow-canvas {
1368
+ will-change: auto;
1369
+ }
1370
+ .jev-devtools .lab-flow-embedded .lab-choice-browser {
1371
+ height: 520px;
1372
+ }
1373
+ .flow-step.selected {
1374
+ outline: 2px solid #e551ba;
1375
+ outline-offset: 3px;
1376
+ }
1377
+ .flow-step[data-status="completed"] {
1378
+ border-color: #e551ba;
1379
+ }
1380
+ .flow-step[data-status="running"] {
1381
+ border-color: #e551ba;
1382
+ background: #2b1728;
1383
+ }
1384
+ .flow-step[data-status="untaken"],
1385
+ .flow-step[data-status="blocked"] {
1386
+ color: #948797;
1387
+ border-color: #403746;
1388
+ background: #151017;
1389
+ }
1390
+ .flow-step[data-status="error"] {
1391
+ border-color: #f17c78;
1392
+ }
1393
+ .flow-step[data-status="cancelled"] {
1394
+ border-style: dashed;
1395
+ }
1396
+ .flow-selection {
1397
+ padding: 12px 20px;
1398
+ border-top: 1px solid #342a38;
1399
+ }
1400
+ .flow-selection p {
1401
+ margin: 6px 0;
1402
+ overflow-wrap: anywhere;
1403
+ }
1404
+ .flow-request-detail {
1405
+ min-height: 450px;
1406
+ border-top: 1px solid #534357;
1407
+ }
1408
+ .flow-request-detail > .request-detail {
1409
+ min-height: 450px;
1410
+ }
1411
+
1412
+ .flow-card-heading,
1413
+ .flow-card-footer,
1414
+ .flow-join-summary,
1415
+ .flow-lane {
1416
+ display: flex;
1417
+ align-items: center;
1418
+ justify-content: space-between;
1419
+ gap: 8px;
1420
+ width: 100%;
1421
+ }
1422
+ .flow-card-heading {
1423
+ justify-content: flex-start;
1424
+ }
1425
+ .flow-kind-icon {
1426
+ width: 26px;
1427
+ height: 26px;
1428
+ color: #e551ba;
1429
+ flex-shrink: 0;
1430
+ }
1431
+ .flow-kind-icon svg {
1432
+ width: 100%;
1433
+ height: 100%;
1434
+ }
1435
+ .flow-card-heading .eyebrow {
1436
+ font-size: 10px;
1437
+ }
1438
+ .flow-status {
1439
+ margin-left: auto;
1440
+ font-size: 10px;
1441
+ border-radius: 20px;
1442
+ padding: 4px 8px;
1443
+ background: #342031;
1444
+ color: #f0b7e0;
1445
+ }
1446
+ .flow-step[data-status="untaken"] .flow-status {
1447
+ background: #241e28;
1448
+ color: #948797;
1449
+ }
1450
+ .flow-step[data-status="untaken"] .flow-kind-icon {
1451
+ color: #948797;
1452
+ }
1453
+ .flow-step > strong {
1454
+ white-space: normal;
1455
+ font-size: 18px;
1456
+ line-height: 1.25;
1457
+ display: -webkit-box;
1458
+ -webkit-line-clamp: 2;
1459
+ -webkit-box-orient: vertical;
1460
+ overflow-wrap: anywhere;
1461
+ }
1462
+ .flow-step-description {
1463
+ line-height: 1.5;
1464
+ color: #b9aebf;
1465
+ display: -webkit-box;
1466
+ -webkit-line-clamp: 3;
1467
+ -webkit-box-orient: vertical;
1468
+ overflow: hidden;
1469
+ }
1470
+ .flow-card-footer {
1471
+ margin-top: auto;
1472
+ padding-top: 10px;
1473
+ border-top: 1px solid #342a38;
1474
+ font-size: 10px;
1475
+ color: #a092a7;
1476
+ }
1477
+ .flow-card-footer code {
1478
+ max-width: 45%;
1479
+ overflow: hidden;
1480
+ text-overflow: ellipsis;
1481
+ white-space: nowrap;
1482
+ }
1483
+ .flow-card-footer small {
1484
+ text-align: right;
1485
+ }
1486
+ .flow-join-summary {
1487
+ margin-top: 4px;
1488
+ font-size: 11px;
1489
+ color: #c9b9cd;
1490
+ }
1491
+ .flow-join-summary > span {
1492
+ color: #ef9ed9;
1493
+ font-variant-numeric: tabular-nums;
1494
+ }
1495
+ .flow-lanes {
1496
+ display: flex;
1497
+ flex-direction: column;
1498
+ gap: 4px;
1499
+ width: 100%;
1500
+ }
1501
+ .flow-lane {
1502
+ border-radius: 5px;
1503
+ background: #211923;
1504
+ padding: 6px 8px;
1505
+ font-size: 11px;
1506
+ min-height: 28px;
1507
+ }
1508
+ .flow-lane > span {
1509
+ overflow: hidden;
1510
+ text-overflow: ellipsis;
1511
+ white-space: nowrap;
1512
+ }
1513
+ .flow-lane > span > span {
1514
+ color: #ef9ed9;
1515
+ margin-right: 4px;
1516
+ }
1517
+ .flow-lane small {
1518
+ color: #b9aebf;
1519
+ }
1520
+ .flow-lane-details {
1521
+ padding-left: 18px;
1522
+ font-size: 12px;
1523
+ }
1524
+ .flow-request-heading > span:first-child {
1525
+ min-width: 0;
1526
+ max-width: 80%;
1527
+ }
1528
+ .flow-request-description {
1529
+ display: -webkit-box;
1530
+ -webkit-line-clamp: 2;
1531
+ -webkit-box-orient: vertical;
1532
+ overflow: hidden;
1533
+ font-size: 12px;
1534
+ line-height: 1.5;
1535
+ color: #b9aebf;
1536
+ margin-top: 5px;
1537
+ overflow-wrap: anywhere;
1538
+ }
1539
+
1540
+ /* Structured context stays within the card; its gestures never move the camera. */
1541
+ .jev-devtools .lab-content-card {
1542
+ display: flex;
1543
+ flex-direction: column;
1544
+ padding: 14px;
1545
+ }
1546
+ .jev-devtools .lab-content-card h3 {
1547
+ font-size: 14px;
1548
+ margin-bottom: 8px;
1549
+ flex-shrink: 0;
1550
+ }
1551
+ .jev-devtools .lab-content-card .lab-eyebrow {
1552
+ font-size: 9px;
1553
+ margin-bottom: 5px;
1554
+ flex-shrink: 0;
1555
+ }
1556
+ .jev-devtools .diagram-content {
1557
+ min-height: 0;
1558
+ flex: 1;
1559
+ overflow: auto;
1560
+ overscroll-behavior: contain;
1561
+ touch-action: pan-y;
1562
+ scrollbar-width: thin;
1563
+ scrollbar-color: #514256 transparent;
1564
+ padding-right: 4px;
1565
+ font-size: 12px;
1566
+ line-height: 1.5;
1567
+ color: #d5cdd9;
1568
+ cursor: auto;
1569
+ user-select: text;
1570
+ }
1571
+ .jev-devtools .diagram-content:focus-visible {
1572
+ outline: 1px solid #e551ba;
1573
+ outline-offset: -1px;
1574
+ border-radius: 3px;
1575
+ }
1576
+ .jev-devtools .diagram-property {
1577
+ display: flex;
1578
+ justify-content: space-between;
1579
+ align-items: baseline;
1580
+ gap: 8px;
1581
+ padding: 5px 0;
1582
+ border-bottom: 1px solid #261e2a;
1583
+ }
1584
+ .jev-devtools .diagram-property-text {
1585
+ display: block;
1586
+ }
1587
+ .jev-devtools .diagram-property-key {
1588
+ font:
1589
+ 10px/1.5 ui-monospace,
1590
+ monospace;
1591
+ color: #c8a8c8;
1592
+ overflow-wrap: anywhere;
1593
+ min-width: 0;
1594
+ }
1595
+ .jev-devtools .diagram-property-text > .diagram-property-key {
1596
+ display: block;
1597
+ margin-bottom: 2px;
1598
+ }
1599
+ .jev-devtools .diagram-text-value {
1600
+ display: block;
1601
+ white-space: pre-wrap;
1602
+ overflow-wrap: anywhere;
1603
+ }
1604
+ .jev-devtools .diagram-text-preview {
1605
+ display: -webkit-box;
1606
+ -webkit-line-clamp: 3;
1607
+ -webkit-box-orient: vertical;
1608
+ overflow: hidden;
1609
+ }
1610
+ .jev-devtools .diagram-value-number {
1611
+ color: #a6d6ca;
1612
+ font:
1613
+ 11px/1.5 ui-monospace,
1614
+ monospace;
1615
+ font-variant-numeric: tabular-nums;
1616
+ overflow-wrap: anywhere;
1617
+ }
1618
+ .jev-devtools .diagram-value-boolean {
1619
+ color: #c4b1ed;
1620
+ font:
1621
+ 11px/1.5 ui-monospace,
1622
+ monospace;
1623
+ }
1624
+ .jev-devtools .diagram-value-empty {
1625
+ color: #9c8ca4;
1626
+ font:
1627
+ 10px/1.5 ui-monospace,
1628
+ monospace;
1629
+ }
1630
+ .jev-devtools .diagram-property-disclosure {
1631
+ width: 100%;
1632
+ display: flex;
1633
+ align-items: baseline;
1634
+ gap: 5px;
1635
+ padding: 6px 0;
1636
+ border: 0;
1637
+ border-bottom: 1px solid #261e2a;
1638
+ border-radius: 0;
1639
+ background: transparent;
1640
+ text-align: left;
1641
+ color: inherit;
1642
+ }
1643
+ .jev-devtools .diagram-property-disclosure:hover {
1644
+ background: #211723;
1645
+ }
1646
+ .jev-devtools .diagram-property-caret {
1647
+ color: #ab8aab;
1648
+ flex-shrink: 0;
1649
+ }
1650
+ .jev-devtools .diagram-property-type {
1651
+ color: #9c8ca4;
1652
+ font:
1653
+ 10px/1.5 ui-monospace,
1654
+ monospace;
1655
+ margin-left: auto;
1656
+ flex-shrink: 0;
1657
+ }
1658
+ .jev-devtools .diagram-property-children {
1659
+ margin-left: 4px;
1660
+ padding-left: 9px;
1661
+ border-left: 1px solid #49324b;
1662
+ }
1663
+ .jev-devtools .diagram-content-toggle {
1664
+ display: block;
1665
+ padding: 3px 0;
1666
+ border: 0;
1667
+ border-radius: 0;
1668
+ background: transparent;
1669
+ color: #e9a4d7;
1670
+ font-size: 10px;
1671
+ text-align: left;
1672
+ }
1673
+ .jev-devtools .diagram-content-toggle:hover {
1674
+ color: #ffd9f3;
1675
+ text-decoration: underline;
1676
+ }
1677
+
1678
+ /* Noul is a probability of true; its two outputs carry p and 1-p.
1679
+ Keep the fill opaque, with readable text even at zero probability. */
1680
+ .jev-devtools .lab-noul-output {
1681
+ border-color: rgb(
1682
+ 245 243 246 / calc(0.35 + 0.65 * var(--lab-noul-probability, 1))
1683
+ );
1684
+ }
1685
+ .jev-devtools .lab-noul-output > h3,
1686
+ .jev-devtools .lab-noul-output > p {
1687
+ opacity: calc(0.65 + 0.35 * var(--lab-noul-probability, 1));
1688
+ }
1689
+
1690
+ .flow-condition-rule {
1691
+ display: block;
1692
+ padding: 10px 12px;
1693
+ border: 1px solid #49324b;
1694
+ border-radius: 6px;
1695
+ background: #211723;
1696
+ width: 100%;
1697
+ }
1698
+ .flow-condition-label {
1699
+ display: block;
1700
+ font-size: 10px;
1701
+ color: #ba9dbe;
1702
+ margin-bottom: 5px;
1703
+ }
1704
+ .flow-condition-rule code {
1705
+ display: -webkit-box;
1706
+ -webkit-line-clamp: 3;
1707
+ -webkit-box-orient: vertical;
1708
+ overflow: hidden;
1709
+ overflow-wrap: anywhere;
1710
+ font:
1711
+ 12px/1.6 ui-monospace,
1712
+ monospace;
1713
+ color: #f2d7eb;
1714
+ }
1715
+
1716
+ .flow-condition-incoming {
1717
+ display: block;
1718
+ padding-bottom: 10px;
1719
+ margin-bottom: 10px;
1720
+ border-bottom: 1px solid #49324b;
1721
+ }
1722
+ .flow-condition-input {
1723
+ display: flex;
1724
+ justify-content: space-between;
1725
+ align-items: baseline;
1726
+ gap: 12px;
1727
+ font-size: 12px;
1728
+ padding: 3px 0;
1729
+ }
1730
+ .flow-condition-input > span {
1731
+ overflow: hidden;
1732
+ text-overflow: ellipsis;
1733
+ white-space: nowrap;
1734
+ }
1735
+ .flow-condition-input > b {
1736
+ font-size: 17px;
1737
+ font-weight: 600;
1738
+ color: #f2d7eb;
1739
+ overflow: hidden;
1740
+ text-overflow: ellipsis;
1741
+ white-space: nowrap;
1742
+ max-width: 65%;
1743
+ }
1744
+ .flow-input-details {
1745
+ font-size: 12px;
1746
+ }
1747
+ .flow-input-details > div {
1748
+ display: flex;
1749
+ gap: 16px;
1750
+ margin: 6px 0;
1751
+ }
1752
+ .flow-input-details code {
1753
+ color: #a092a7;
1754
+ margin-left: 8px;
1755
+ }
1756
+ .flow-input-details dd {
1757
+ margin: 0;
1758
+ overflow-wrap: anywhere;
1759
+ }