@almadar/std 16.241.0 → 16.242.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 (109) hide show
  1. package/behaviors/behaviors-registry.json +4650 -535
  2. package/behaviors/lolo/agent/atoms/std-agent-memory.lolo +38 -1
  3. package/behaviors/lolo/agent/atoms/std-agent-session.lolo +1074 -47
  4. package/behaviors/lolo/agent/atoms/std-agent-tool-loop.lolo +8 -7
  5. package/behaviors/lolo/agent/organisms/std-agent-assistant.lolo +56 -37
  6. package/behaviors/lolo/infra/atoms/std-page-open.lolo +59 -0
  7. package/behaviors/lolo/infra/atoms/std-page-search.lolo +134 -0
  8. package/behaviors/lolo/infra/atoms/std-page-treat.lolo +59 -0
  9. package/behaviors/lolo/infra/atoms/std-page-watch.lolo +86 -0
  10. package/behaviors/lolo/ui/core/atoms/std-book-reader.lolo +25 -1
  11. package/behaviors/lolo/ui/core/atoms/std-card-grid.lolo +9 -0
  12. package/behaviors/lolo/ui/core/atoms/std-doc-page.lolo +153 -0
  13. package/behaviors/lolo/ui/learning/atoms/std-learn-arrangement.lolo +124 -92
  14. package/behaviors/lolo/ui/learning/atoms/std-learn-classify.lolo +114 -55
  15. package/behaviors/lolo/ui/learning/atoms/std-learn-compare.lolo +40 -14
  16. package/behaviors/lolo/ui/learning/atoms/std-learn-coupled-sim.lolo +363 -123
  17. package/behaviors/lolo/ui/learning/atoms/std-learn-derivation.lolo +93 -48
  18. package/behaviors/lolo/ui/learning/atoms/std-learn-diagram.lolo +60 -28
  19. package/behaviors/lolo/ui/learning/atoms/std-learn-doser.lolo +193 -96
  20. package/behaviors/lolo/ui/learning/atoms/std-learn-estimate.lolo +75 -32
  21. package/behaviors/lolo/ui/learning/atoms/std-learn-goal-seek.lolo +142 -86
  22. package/behaviors/lolo/ui/learning/atoms/std-learn-grid-sim.lolo +266 -98
  23. package/behaviors/lolo/ui/learning/atoms/std-learn-hotspot.lolo +103 -65
  24. package/behaviors/lolo/ui/learning/atoms/std-learn-live-sim.lolo +223 -109
  25. package/behaviors/lolo/ui/learning/atoms/std-learn-measure.lolo +232 -64
  26. package/behaviors/lolo/ui/learning/atoms/std-learn-param-explorer.lolo +69 -29
  27. package/behaviors/lolo/ui/learning/atoms/std-learn-perturb.lolo +363 -123
  28. package/behaviors/lolo/ui/learning/atoms/std-learn-predict.lolo +73 -41
  29. package/behaviors/lolo/ui/learning/atoms/std-learn-sample-accumulator.lolo +96 -38
  30. package/behaviors/lolo/ui/learning/atoms/std-learn-sandbox.lolo +65 -45
  31. package/behaviors/lolo/ui/learning/atoms/std-learn-scatter-fit.lolo +243 -117
  32. package/behaviors/lolo/ui/learning/atoms/std-learn-scenario.lolo +76 -28
  33. package/behaviors/lolo/ui/learning/atoms/std-learn-sim-3d.lolo +228 -109
  34. package/behaviors/lolo/ui/learning/atoms/std-learn-speed-drill.lolo +95 -44
  35. package/behaviors/lolo/ui/learning/atoms/std-learn-stepper.lolo +199 -125
  36. package/behaviors/lolo/ui/learning/atoms/std-learn-tour-3d.lolo +92 -48
  37. package/behaviors/lolo/ui/learning/atoms/std-learn-trace-player.lolo +239 -78
  38. package/behaviors/lolo/ui/learning/atoms/std-learn-transport.lolo +147 -38
  39. package/behaviors/lolo/ui/learning/atoms/std-learn-tree.lolo +123 -58
  40. package/behaviors/lolo/ui/learning/atoms/ui-algo-graph-canvas.lolo +22 -0
  41. package/behaviors/lolo/ui/learning/atoms/ui-algorithm-canvas.lolo +26 -0
  42. package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +26 -0
  43. package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +27 -1
  44. package/behaviors/lolo/ui/learning/atoms/ui-learning-canvas.lolo +27 -1
  45. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +29 -9
  46. package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +26 -0
  47. package/behaviors/lolo-behavior-contracts.json +1 -1
  48. package/behaviors/registry/agent/atoms/std-agent-memory.orb +372 -2
  49. package/behaviors/registry/agent/atoms/std-agent-session.orb +4752 -348
  50. package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +54 -42
  51. package/behaviors/registry/agent/organisms/std-agent-assistant.orb +356 -122
  52. package/behaviors/registry/factory-signatures.json +1 -1
  53. package/behaviors/registry/infra/atoms/std-page-open.orb +435 -0
  54. package/behaviors/registry/infra/atoms/std-page-search.orb +867 -0
  55. package/behaviors/registry/infra/atoms/std-page-treat.orb +494 -0
  56. package/behaviors/registry/infra/atoms/std-page-watch.orb +554 -0
  57. package/behaviors/registry/ui/core/atoms/std-book-reader.orb +119 -0
  58. package/behaviors/registry/ui/core/atoms/std-card-grid.orb +61 -0
  59. package/behaviors/registry/ui/core/atoms/std-doc-page.orb +594 -0
  60. package/behaviors/registry/ui/learning/atoms/std-learn-arrangement.orb +903 -369
  61. package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1002 -232
  62. package/behaviors/registry/ui/learning/atoms/std-learn-compare.orb +253 -74
  63. package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +3624 -921
  64. package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +685 -144
  65. package/behaviors/registry/ui/learning/atoms/std-learn-diagram.orb +404 -52
  66. package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +1787 -210
  67. package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +699 -71
  68. package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +1102 -578
  69. package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +2760 -872
  70. package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +689 -152
  71. package/behaviors/registry/ui/learning/atoms/std-learn-live-sim.orb +1431 -633
  72. package/behaviors/registry/ui/learning/atoms/std-learn-measure.orb +2485 -512
  73. package/behaviors/registry/ui/learning/atoms/std-learn-param-explorer.orb +501 -197
  74. package/behaviors/registry/ui/learning/atoms/std-learn-perturb.orb +3642 -928
  75. package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +705 -125
  76. package/behaviors/registry/ui/learning/atoms/std-learn-sample-accumulator.orb +624 -114
  77. package/behaviors/registry/ui/learning/atoms/std-learn-sandbox.orb +405 -153
  78. package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +1911 -611
  79. package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +436 -128
  80. package/behaviors/registry/ui/learning/atoms/std-learn-sim-3d.orb +2482 -485
  81. package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +896 -192
  82. package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +2001 -759
  83. package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +734 -228
  84. package/behaviors/registry/ui/learning/atoms/std-learn-trace-player.orb +2501 -764
  85. package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +1591 -173
  86. package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +883 -122
  87. package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +176 -0
  88. package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +211 -0
  89. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +211 -0
  90. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +212 -1
  91. package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +212 -1
  92. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +203 -9
  93. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +211 -0
  94. package/behaviors/signatures.lolo +325 -655
  95. package/dist/behaviors/exports-reader.js +16092 -9747
  96. package/dist/behaviors/functions/index.d.ts +1052 -136
  97. package/dist/behaviors/functions/index.js +16063 -9745
  98. package/dist/behaviors/index.d.ts +1 -1
  99. package/dist/behaviors/index.js +16093 -9748
  100. package/dist/behaviors/query.js +16092 -9747
  101. package/dist/behaviors-embeddings.hash.json +3 -3
  102. package/dist/behaviors-embeddings.json +45 -25
  103. package/dist/behaviors-registry.json +4650 -535
  104. package/dist/index.d.ts +1 -1
  105. package/dist/index.js +16093 -9748
  106. package/dist/knob-embeddings.hash.json +3 -3
  107. package/dist/knob-embeddings.json +607 -263
  108. package/dist/registry/factory-signatures.json +1 -1
  109. package/package.json +3 -3
@@ -253,6 +253,16 @@
253
253
  "required": false,
254
254
  "type": "string"
255
255
  },
256
+ "fillStyle": {
257
+ "name": "fillStyle",
258
+ "required": false,
259
+ "type": "string"
260
+ },
261
+ "fillTone": {
262
+ "name": "fillTone",
263
+ "required": false,
264
+ "type": "string"
265
+ },
256
266
  "fontSize": {
257
267
  "name": "fontSize",
258
268
  "required": false,
@@ -328,11 +338,26 @@
328
338
  "required": false,
329
339
  "type": "number"
330
340
  },
341
+ "stroke": {
342
+ "name": "stroke",
343
+ "required": false,
344
+ "type": "string"
345
+ },
331
346
  "text": {
332
347
  "name": "text",
333
348
  "required": false,
334
349
  "type": "string"
335
350
  },
351
+ "textSize": {
352
+ "name": "textSize",
353
+ "required": false,
354
+ "type": "string"
355
+ },
356
+ "tone": {
357
+ "name": "tone",
358
+ "required": false,
359
+ "type": "string"
360
+ },
336
361
  "type": {
337
362
  "name": "type",
338
363
  "required": true,
@@ -450,7 +475,8 @@
450
475
  "type": "boolean"
451
476
  },
452
477
  "backgroundColor": {
453
- "default": "#f8fafc",
478
+ "default": "",
479
+ "description": "Canvas ground (tone name, token or colour); empty uses the theme's drawing ground.",
454
480
  "label": "Background Color",
455
481
  "tier": "presentation",
456
482
  "type": "string"
@@ -458,12 +484,12 @@
458
484
  "categories": {
459
485
  "default": [
460
486
  {
461
- "color": "#94a3b8",
487
+ "color": "series-1",
462
488
  "label": "Category A",
463
489
  "value": "a"
464
490
  },
465
491
  {
466
- "color": "#64748b",
492
+ "color": "series-2",
467
493
  "label": "Category B",
468
494
  "value": "b"
469
495
  }
@@ -495,7 +521,7 @@
495
521
  "type": "[LearnClassifyOption]"
496
522
  },
497
523
  "correctColor": {
498
- "default": "#16a34a",
524
+ "default": "success",
499
525
  "description": "Fill color for the correct category once the learner has picked.",
500
526
  "label": "Correct Highlight Color",
501
527
  "tier": "presentation",
@@ -509,7 +535,7 @@
509
535
  "type": "number"
510
536
  },
511
537
  "incorrectColor": {
512
- "default": "#dc2626",
538
+ "default": "error",
513
539
  "description": "Fill color for the learner's picked category when it does not match the correct category.",
514
540
  "label": "Incorrect Highlight Color",
515
541
  "tier": "presentation",
@@ -651,6 +677,20 @@
651
677
  "tier": "domain",
652
678
  "type": "boolean"
653
679
  },
680
+ "summary": {
681
+ "default": "",
682
+ "description": "One line under the title saying what is being classified (keep it under ~65 characters). Empty shows no line.",
683
+ "label": "Concept",
684
+ "tier": "presentation",
685
+ "type": "string"
686
+ },
687
+ "taper": {
688
+ "default": 0.0,
689
+ "description": "How far the category rungs narrow toward the top: 0 = equal-width rungs (no implied order), 1 = a full pyramid for hierarchies (needs, levels). Long category names need 0.",
690
+ "label": "Taper",
691
+ "tier": "presentation",
692
+ "type": "number"
693
+ },
654
694
  "title": {
655
695
  "default": "Classify",
656
696
  "description": "Title shown above the instrument.",
@@ -1195,9 +1235,21 @@
1195
1235
  [
1196
1236
  "minWidth",
1197
1237
  [
1198
- "*",
1199
- "@plotWidth",
1200
- 0.3
1238
+ "-",
1239
+ "@maxWidth",
1240
+ [
1241
+ "*",
1242
+ "@config.taper",
1243
+ [
1244
+ "-",
1245
+ "@maxWidth",
1246
+ [
1247
+ "*",
1248
+ "@plotWidth",
1249
+ 0.3
1250
+ ]
1251
+ ]
1252
+ ]
1201
1253
  ]
1202
1254
  ],
1203
1255
  [
@@ -1210,9 +1262,13 @@
1210
1262
  "@minWidth"
1211
1263
  ],
1212
1264
  [
1213
- "-",
1214
- "@categoryCount",
1215
- 1.0
1265
+ "math/max",
1266
+ 1.0,
1267
+ [
1268
+ "-",
1269
+ "@categoryCount",
1270
+ 1.0
1271
+ ]
1216
1272
  ]
1217
1273
  ]
1218
1274
  ],
@@ -1349,14 +1405,15 @@
1349
1405
  [
1350
1406
  "baseRect",
1351
1407
  {
1352
- "color": "@fillColor",
1353
- "fill": "@fillColor",
1408
+ "fillStyle": "tint",
1409
+ "fillTone": "@fillColor",
1354
1410
  "height": "@tierHeight",
1355
1411
  "id": [
1356
1412
  "str/concat",
1357
1413
  "category-",
1358
1414
  "@i"
1359
1415
  ],
1416
+ "tone": "@fillColor",
1360
1417
  "type": "rect",
1361
1418
  "width": "@w",
1362
1419
  "x": "@x",
@@ -1374,16 +1431,16 @@
1374
1431
  [
1375
1432
  "@baseRect",
1376
1433
  {
1377
- "color": "#0f172a",
1378
- "fill": "transparent",
1434
+ "fillStyle": "outline",
1379
1435
  "height": "@tierHeight",
1380
1436
  "id": [
1381
1437
  "str/concat",
1382
1438
  "category-pick-ring-",
1383
1439
  "@i"
1384
1440
  ],
1385
- "lineWidth": 3.0,
1386
1441
  "opacity": 1.0,
1442
+ "stroke": "bold",
1443
+ "tone": "ink",
1387
1444
  "type": "rect",
1388
1445
  "width": "@w",
1389
1446
  "x": "@x",
@@ -1440,8 +1497,6 @@
1440
1497
  ],
1441
1498
  {
1442
1499
  "align": "center",
1443
- "color": "#0f172a",
1444
- "fontSize": 13.0,
1445
1500
  "id": [
1446
1501
  "str/concat",
1447
1502
  "category-label-",
@@ -1452,6 +1507,8 @@
1452
1507
  "@category",
1453
1508
  "label"
1454
1509
  ],
1510
+ "textSize": "sm",
1511
+ "tone": "label",
1455
1512
  "type": "text",
1456
1513
  "x": "@centerX",
1457
1514
  "y": [
@@ -1538,6 +1595,7 @@
1538
1595
  },
1539
1596
  {
1540
1597
  "action": "RETRY",
1598
+ "icon": "rotate-ccw",
1541
1599
  "label": "@config.retryLabel",
1542
1600
  "type": "button",
1543
1601
  "variant": "primary"
@@ -1589,6 +1647,11 @@
1589
1647
  "edges": [],
1590
1648
  "height": "@config.height",
1591
1649
  "interactive": "@config.interactive",
1650
+ "keyMap": {
1651
+ "ArrowRight": "ADVANCE",
1652
+ "KeyR": "RETRY",
1653
+ "Space": "TOGGLE_RUN"
1654
+ },
1592
1655
  "nodes": [],
1593
1656
  "shapes": "@backdropShapes",
1594
1657
  "type": "biology-canvas",
@@ -1610,6 +1673,14 @@
1610
1673
  "options",
1611
1674
  []
1612
1675
  ]
1676
+ ],
1677
+ [
1678
+ "locked",
1679
+ [
1680
+ "!=",
1681
+ "@entity.selectedCategory",
1682
+ ""
1683
+ ]
1613
1684
  ]
1614
1685
  ],
1615
1686
  [
@@ -1637,26 +1708,48 @@
1637
1708
  "category"
1638
1709
  ]
1639
1710
  },
1711
+ "disabled": "@locked",
1640
1712
  "label": [
1641
1713
  "object/get",
1642
1714
  "@o",
1643
1715
  "label"
1644
1716
  ],
1645
- "size": "sm",
1717
+ "size": "lg",
1646
1718
  "type": "button",
1647
1719
  "variant": [
1648
1720
  "if",
1649
1721
  [
1650
- "==",
1651
- "@entity.selectedCategory",
1722
+ "not",
1723
+ "@locked"
1724
+ ],
1725
+ "secondary",
1726
+ [
1727
+ "if",
1652
1728
  [
1653
- "object/get",
1654
- "@o",
1655
- "category"
1729
+ "==",
1730
+ [
1731
+ "object/get",
1732
+ "@o",
1733
+ "category"
1734
+ ],
1735
+ "@entity.correctCategory"
1736
+ ],
1737
+ "success",
1738
+ [
1739
+ "if",
1740
+ [
1741
+ "==",
1742
+ [
1743
+ "object/get",
1744
+ "@o",
1745
+ "category"
1746
+ ],
1747
+ "@entity.selectedCategory"
1748
+ ],
1749
+ "danger",
1750
+ "ghost"
1656
1751
  ]
1657
- ],
1658
- "primary",
1659
- "secondary"
1752
+ ]
1660
1753
  ]
1661
1754
  }
1662
1755
  ]
@@ -1679,184 +1772,161 @@
1679
1772
  "value"
1680
1773
  ]
1681
1774
  },
1775
+ "disabled": "@locked",
1682
1776
  "label": [
1683
1777
  "object/get",
1684
1778
  "@c",
1685
1779
  "label"
1686
1780
  ],
1687
- "size": "sm",
1781
+ "size": "lg",
1688
1782
  "type": "button",
1689
1783
  "variant": [
1690
1784
  "if",
1691
1785
  [
1692
- "==",
1693
- "@entity.selectedCategory",
1786
+ "not",
1787
+ "@locked"
1788
+ ],
1789
+ "secondary",
1790
+ [
1791
+ "if",
1694
1792
  [
1695
- "object/get",
1696
- "@c",
1697
- "value"
1793
+ "==",
1794
+ [
1795
+ "object/get",
1796
+ "@c",
1797
+ "value"
1798
+ ],
1799
+ "@entity.correctCategory"
1800
+ ],
1801
+ "success",
1802
+ [
1803
+ "if",
1804
+ [
1805
+ "==",
1806
+ [
1807
+ "object/get",
1808
+ "@c",
1809
+ "value"
1810
+ ],
1811
+ "@entity.selectedCategory"
1812
+ ],
1813
+ "danger",
1814
+ "ghost"
1698
1815
  ]
1699
- ],
1700
- "primary",
1701
- "secondary"
1816
+ ]
1702
1817
  ]
1703
1818
  }
1704
1819
  ]
1705
1820
  ]
1706
1821
  ]
1707
1822
  ],
1708
- "direction": "horizontal",
1709
- "gap": "xs",
1823
+ "direction": "vertical",
1824
+ "gap": "sm",
1710
1825
  "type": "stack"
1711
1826
  },
1712
- {
1713
- "children": [
1714
- "array/concat",
1715
- [
1716
- "if",
1717
- [
1718
- "!=",
1719
- "@entity.verdict",
1720
- ""
1721
- ],
1722
- [
1723
- {
1724
- "label": [
1725
- "if",
1726
- [
1727
- "==",
1728
- "@entity.verdict",
1729
- "correct"
1730
- ],
1731
- "Correct",
1732
- "Incorrect"
1827
+ [
1828
+ "if",
1829
+ [
1830
+ "==",
1831
+ "@entity.verdict",
1832
+ ""
1833
+ ],
1834
+ null,
1835
+ {
1836
+ "children": [
1837
+ {
1838
+ "label": [
1839
+ "if",
1840
+ [
1841
+ "==",
1842
+ "@entity.verdict",
1843
+ "correct"
1733
1844
  ],
1734
- "type": "badge",
1735
- "variant": [
1736
- "if",
1737
- [
1738
- "==",
1739
- "@entity.verdict",
1740
- "correct"
1741
- ],
1742
- "success",
1743
- "danger"
1744
- ]
1745
- }
1746
- ],
1747
- []
1748
- ],
1749
- [
1845
+ "Correct",
1846
+ "Incorrect"
1847
+ ],
1848
+ "type": "badge",
1849
+ "variant": [
1850
+ "if",
1851
+ [
1852
+ "==",
1853
+ "@entity.verdict",
1854
+ "correct"
1855
+ ],
1856
+ "success",
1857
+ "error"
1858
+ ]
1859
+ },
1750
1860
  {
1751
1861
  "content": "@entity.feedback",
1752
1862
  "type": "typography",
1753
- "variant": "caption"
1863
+ "variant": "body"
1754
1864
  }
1755
- ]
1756
- ],
1757
- "direction": "horizontal",
1758
- "gap": "xs",
1759
- "type": "stack"
1760
- },
1865
+ ],
1866
+ "direction": "vertical",
1867
+ "gap": "xs",
1868
+ "type": "stack"
1869
+ }
1870
+ ],
1761
1871
  {
1872
+ "align": "center",
1762
1873
  "children": [
1763
1874
  {
1764
1875
  "action": "ADVANCE",
1765
1876
  "disabled": [
1766
- "if",
1767
- [
1768
- "==",
1769
- "@entity.selectedCategory",
1770
- ""
1771
- ],
1772
- true,
1773
- false
1877
+ "==",
1878
+ "@entity.selectedCategory",
1879
+ ""
1774
1880
  ],
1881
+ "icon": "chevron-right",
1775
1882
  "label": "@config.advanceLabel",
1776
1883
  "type": "button",
1777
1884
  "variant": "primary"
1778
1885
  },
1779
- {
1780
- "action": "TOGGLE_RUN",
1781
- "label": [
1782
- "if",
1783
- "@entity.running",
1784
- "Pause",
1785
- "Auto"
1786
- ],
1787
- "type": "button",
1788
- "variant": "ghost"
1789
- }
1790
- ],
1791
- "direction": "horizontal",
1792
- "gap": "sm",
1793
- "type": "stack"
1794
- },
1795
- {
1796
- "label": [
1797
- "if",
1798
- [
1799
- ">",
1800
- "@config.passScore",
1801
- 0.0
1802
- ],
1803
1886
  [
1804
- "str/concat",
1805
- "Score — pass at ",
1806
- "@config.passScore"
1807
- ],
1808
- "Score"
1809
- ],
1810
- "max": [
1811
- "if",
1812
- [
1813
- "or",
1814
- [
1815
- "!=",
1816
- "@config.pointsPerCorrect",
1817
- 1.0
1818
- ],
1819
- [
1820
- ">",
1821
- "@config.penaltyPerMiss",
1822
- 0.0
1823
- ]
1887
+ "if",
1888
+ "@entity.running",
1889
+ {
1890
+ "action": "TOGGLE_RUN",
1891
+ "aria-pressed": "true",
1892
+ "icon": "pause",
1893
+ "label": "Pause",
1894
+ "type": "button",
1895
+ "variant": "ghost"
1896
+ },
1897
+ {
1898
+ "action": "TOGGLE_RUN",
1899
+ "aria-pressed": "false",
1900
+ "icon": "play",
1901
+ "label": "Auto",
1902
+ "type": "button",
1903
+ "variant": "ghost"
1904
+ }
1824
1905
  ],
1825
1906
  [
1826
1907
  "if",
1827
1908
  [
1828
1909
  ">",
1829
- "@config.scoreCap",
1910
+ "@config.passScore",
1830
1911
  0.0
1831
1912
  ],
1832
- "@config.scoreCap",
1833
- [
1834
- "*",
1835
- "@entity.totalItems",
1836
- "@config.pointsPerCorrect"
1837
- ]
1838
- ],
1839
- "@entity.attemptedCount"
1913
+ {
1914
+ "color": "muted",
1915
+ "content": [
1916
+ "str/concat",
1917
+ "Pass at ",
1918
+ "@config.passScore"
1919
+ ],
1920
+ "type": "typography",
1921
+ "variant": "caption"
1922
+ },
1923
+ null
1924
+ ]
1840
1925
  ],
1841
- "type": "stat-display",
1842
- "value": [
1843
- "if",
1844
- [
1845
- "or",
1846
- [
1847
- "!=",
1848
- "@config.pointsPerCorrect",
1849
- 1.0
1850
- ],
1851
- [
1852
- ">",
1853
- "@config.penaltyPerMiss",
1854
- 0.0
1855
- ]
1856
- ],
1857
- "@entity.score",
1858
- "@entity.correctCount"
1859
- ]
1926
+ "direction": "horizontal",
1927
+ "gap": "sm",
1928
+ "type": "stack",
1929
+ "wrap": true
1860
1930
  }
1861
1931
  ]
1862
1932
  ]
@@ -1888,9 +1958,100 @@
1888
1958
  {
1889
1959
  "children": [
1890
1960
  {
1891
- "content": "@entity.title",
1892
- "type": "typography",
1893
- "variant": "h4"
1961
+ "align": "start",
1962
+ "children": [
1963
+ {
1964
+ "children": [
1965
+ {
1966
+ "content": "@entity.title",
1967
+ "type": "typography",
1968
+ "variant": "h4"
1969
+ },
1970
+ [
1971
+ "if",
1972
+ [
1973
+ "==",
1974
+ "@config.summary",
1975
+ ""
1976
+ ],
1977
+ null,
1978
+ {
1979
+ "color": "muted",
1980
+ "content": "@config.summary",
1981
+ "type": "typography",
1982
+ "variant": "body2"
1983
+ }
1984
+ ]
1985
+ ],
1986
+ "direction": "vertical",
1987
+ "gap": "xs",
1988
+ "type": "stack"
1989
+ },
1990
+ {
1991
+ "label": [
1992
+ "if",
1993
+ "@entity.roundComplete",
1994
+ "Round complete",
1995
+ [
1996
+ "if",
1997
+ [
1998
+ "or",
1999
+ [
2000
+ "!=",
2001
+ "@config.pointsPerCorrect",
2002
+ 1.0
2003
+ ],
2004
+ [
2005
+ ">",
2006
+ "@config.penaltyPerMiss",
2007
+ 0.0
2008
+ ]
2009
+ ],
2010
+ [
2011
+ "str/concat",
2012
+ "Score ",
2013
+ "@entity.score"
2014
+ ],
2015
+ [
2016
+ "str/concat",
2017
+ "@entity.correctCount",
2018
+ " / ",
2019
+ "@entity.attemptedCount",
2020
+ " correct"
2021
+ ]
2022
+ ]
2023
+ ],
2024
+ "type": "badge",
2025
+ "variant": [
2026
+ "if",
2027
+ "@entity.roundComplete",
2028
+ "primary",
2029
+ [
2030
+ "if",
2031
+ [
2032
+ "==",
2033
+ "@entity.verdict",
2034
+ "correct"
2035
+ ],
2036
+ "success",
2037
+ [
2038
+ "if",
2039
+ [
2040
+ "==",
2041
+ "@entity.verdict",
2042
+ "incorrect"
2043
+ ],
2044
+ "error",
2045
+ "neutral"
2046
+ ]
2047
+ ]
2048
+ ]
2049
+ }
2050
+ ],
2051
+ "direction": "horizontal",
2052
+ "gap": "md",
2053
+ "justify": "between",
2054
+ "type": "stack"
1894
2055
  },
1895
2056
  {
1896
2057
  "label": [
@@ -1948,6 +2109,48 @@
1948
2109
  ],
1949
2110
  "to": "idle"
1950
2111
  },
2112
+ {
2113
+ "effects": [
2114
+ [
2115
+ "set",
2116
+ "@entity.active",
2117
+ false
2118
+ ],
2119
+ [
2120
+ "set",
2121
+ "@entity.running",
2122
+ false
2123
+ ],
2124
+ [
2125
+ "render-ui",
2126
+ "main",
2127
+ null
2128
+ ]
2129
+ ],
2130
+ "event": "MODE_SELECTED",
2131
+ "eventId": "evt_01KZEFWYXQWVDTDPHMGJ8KGQN8",
2132
+ "from": "idle",
2133
+ "guard": [
2134
+ "and",
2135
+ [
2136
+ "not",
2137
+ [
2138
+ "==",
2139
+ "@config.matchMode",
2140
+ ""
2141
+ ]
2142
+ ],
2143
+ [
2144
+ "not",
2145
+ [
2146
+ "==",
2147
+ "@payload.mode",
2148
+ "@config.matchMode"
2149
+ ]
2150
+ ]
2151
+ ],
2152
+ "to": "idle"
2153
+ },
1951
2154
  {
1952
2155
  "effects": [
1953
2156
  [
@@ -2167,9 +2370,21 @@
2167
2370
  [
2168
2371
  "minWidth",
2169
2372
  [
2170
- "*",
2171
- "@plotWidth",
2172
- 0.3
2373
+ "-",
2374
+ "@maxWidth",
2375
+ [
2376
+ "*",
2377
+ "@config.taper",
2378
+ [
2379
+ "-",
2380
+ "@maxWidth",
2381
+ [
2382
+ "*",
2383
+ "@plotWidth",
2384
+ 0.3
2385
+ ]
2386
+ ]
2387
+ ]
2173
2388
  ]
2174
2389
  ],
2175
2390
  [
@@ -2182,9 +2397,13 @@
2182
2397
  "@minWidth"
2183
2398
  ],
2184
2399
  [
2185
- "-",
2186
- "@categoryCount",
2187
- 1.0
2400
+ "math/max",
2401
+ 1.0,
2402
+ [
2403
+ "-",
2404
+ "@categoryCount",
2405
+ 1.0
2406
+ ]
2188
2407
  ]
2189
2408
  ]
2190
2409
  ],
@@ -2321,14 +2540,15 @@
2321
2540
  [
2322
2541
  "baseRect",
2323
2542
  {
2324
- "color": "@fillColor",
2325
- "fill": "@fillColor",
2543
+ "fillStyle": "tint",
2544
+ "fillTone": "@fillColor",
2326
2545
  "height": "@tierHeight",
2327
2546
  "id": [
2328
2547
  "str/concat",
2329
2548
  "category-",
2330
2549
  "@i"
2331
2550
  ],
2551
+ "tone": "@fillColor",
2332
2552
  "type": "rect",
2333
2553
  "width": "@w",
2334
2554
  "x": "@x",
@@ -2346,16 +2566,16 @@
2346
2566
  [
2347
2567
  "@baseRect",
2348
2568
  {
2349
- "color": "#0f172a",
2350
- "fill": "transparent",
2569
+ "fillStyle": "outline",
2351
2570
  "height": "@tierHeight",
2352
2571
  "id": [
2353
2572
  "str/concat",
2354
2573
  "category-pick-ring-",
2355
2574
  "@i"
2356
2575
  ],
2357
- "lineWidth": 3.0,
2358
2576
  "opacity": 1.0,
2577
+ "stroke": "bold",
2578
+ "tone": "ink",
2359
2579
  "type": "rect",
2360
2580
  "width": "@w",
2361
2581
  "x": "@x",
@@ -2412,8 +2632,6 @@
2412
2632
  ],
2413
2633
  {
2414
2634
  "align": "center",
2415
- "color": "#0f172a",
2416
- "fontSize": 13.0,
2417
2635
  "id": [
2418
2636
  "str/concat",
2419
2637
  "category-label-",
@@ -2424,6 +2642,8 @@
2424
2642
  "@category",
2425
2643
  "label"
2426
2644
  ],
2645
+ "textSize": "sm",
2646
+ "tone": "label",
2427
2647
  "type": "text",
2428
2648
  "x": "@centerX",
2429
2649
  "y": [
@@ -2510,6 +2730,7 @@
2510
2730
  },
2511
2731
  {
2512
2732
  "action": "RETRY",
2733
+ "icon": "rotate-ccw",
2513
2734
  "label": "@config.retryLabel",
2514
2735
  "type": "button",
2515
2736
  "variant": "primary"
@@ -2561,6 +2782,11 @@
2561
2782
  "edges": [],
2562
2783
  "height": "@config.height",
2563
2784
  "interactive": "@config.interactive",
2785
+ "keyMap": {
2786
+ "ArrowRight": "ADVANCE",
2787
+ "KeyR": "RETRY",
2788
+ "Space": "TOGGLE_RUN"
2789
+ },
2564
2790
  "nodes": [],
2565
2791
  "shapes": "@backdropShapes",
2566
2792
  "type": "biology-canvas",
@@ -2860,9 +3086,100 @@
2860
3086
  {
2861
3087
  "children": [
2862
3088
  {
2863
- "content": "@entity.title",
2864
- "type": "typography",
2865
- "variant": "h4"
3089
+ "align": "start",
3090
+ "children": [
3091
+ {
3092
+ "children": [
3093
+ {
3094
+ "content": "@entity.title",
3095
+ "type": "typography",
3096
+ "variant": "h4"
3097
+ },
3098
+ [
3099
+ "if",
3100
+ [
3101
+ "==",
3102
+ "@config.summary",
3103
+ ""
3104
+ ],
3105
+ null,
3106
+ {
3107
+ "color": "muted",
3108
+ "content": "@config.summary",
3109
+ "type": "typography",
3110
+ "variant": "body2"
3111
+ }
3112
+ ]
3113
+ ],
3114
+ "direction": "vertical",
3115
+ "gap": "xs",
3116
+ "type": "stack"
3117
+ },
3118
+ {
3119
+ "label": [
3120
+ "if",
3121
+ "@entity.roundComplete",
3122
+ "Round complete",
3123
+ [
3124
+ "if",
3125
+ [
3126
+ "or",
3127
+ [
3128
+ "!=",
3129
+ "@config.pointsPerCorrect",
3130
+ 1.0
3131
+ ],
3132
+ [
3133
+ ">",
3134
+ "@config.penaltyPerMiss",
3135
+ 0.0
3136
+ ]
3137
+ ],
3138
+ [
3139
+ "str/concat",
3140
+ "Score ",
3141
+ "@entity.score"
3142
+ ],
3143
+ [
3144
+ "str/concat",
3145
+ "@entity.correctCount",
3146
+ " / ",
3147
+ "@entity.attemptedCount",
3148
+ " correct"
3149
+ ]
3150
+ ]
3151
+ ],
3152
+ "type": "badge",
3153
+ "variant": [
3154
+ "if",
3155
+ "@entity.roundComplete",
3156
+ "primary",
3157
+ [
3158
+ "if",
3159
+ [
3160
+ "==",
3161
+ "@entity.verdict",
3162
+ "correct"
3163
+ ],
3164
+ "success",
3165
+ [
3166
+ "if",
3167
+ [
3168
+ "==",
3169
+ "@entity.verdict",
3170
+ "incorrect"
3171
+ ],
3172
+ "error",
3173
+ "neutral"
3174
+ ]
3175
+ ]
3176
+ ]
3177
+ }
3178
+ ],
3179
+ "direction": "horizontal",
3180
+ "gap": "md",
3181
+ "justify": "between",
3182
+ "type": "stack"
2866
3183
  },
2867
3184
  {
2868
3185
  "label": [
@@ -3215,9 +3532,21 @@
3215
3532
  [
3216
3533
  "minWidth",
3217
3534
  [
3218
- "*",
3219
- "@plotWidth",
3220
- 0.3
3535
+ "-",
3536
+ "@maxWidth",
3537
+ [
3538
+ "*",
3539
+ "@config.taper",
3540
+ [
3541
+ "-",
3542
+ "@maxWidth",
3543
+ [
3544
+ "*",
3545
+ "@plotWidth",
3546
+ 0.3
3547
+ ]
3548
+ ]
3549
+ ]
3221
3550
  ]
3222
3551
  ],
3223
3552
  [
@@ -3230,9 +3559,13 @@
3230
3559
  "@minWidth"
3231
3560
  ],
3232
3561
  [
3233
- "-",
3234
- "@categoryCount",
3235
- 1.0
3562
+ "math/max",
3563
+ 1.0,
3564
+ [
3565
+ "-",
3566
+ "@categoryCount",
3567
+ 1.0
3568
+ ]
3236
3569
  ]
3237
3570
  ]
3238
3571
  ],
@@ -3369,14 +3702,15 @@
3369
3702
  [
3370
3703
  "baseRect",
3371
3704
  {
3372
- "color": "@fillColor",
3373
- "fill": "@fillColor",
3705
+ "fillStyle": "tint",
3706
+ "fillTone": "@fillColor",
3374
3707
  "height": "@tierHeight",
3375
3708
  "id": [
3376
3709
  "str/concat",
3377
3710
  "category-",
3378
3711
  "@i"
3379
3712
  ],
3713
+ "tone": "@fillColor",
3380
3714
  "type": "rect",
3381
3715
  "width": "@w",
3382
3716
  "x": "@x",
@@ -3394,16 +3728,16 @@
3394
3728
  [
3395
3729
  "@baseRect",
3396
3730
  {
3397
- "color": "#0f172a",
3398
- "fill": "transparent",
3731
+ "fillStyle": "outline",
3399
3732
  "height": "@tierHeight",
3400
3733
  "id": [
3401
3734
  "str/concat",
3402
3735
  "category-pick-ring-",
3403
3736
  "@i"
3404
3737
  ],
3405
- "lineWidth": 3.0,
3406
3738
  "opacity": 1.0,
3739
+ "stroke": "bold",
3740
+ "tone": "ink",
3407
3741
  "type": "rect",
3408
3742
  "width": "@w",
3409
3743
  "x": "@x",
@@ -3460,8 +3794,6 @@
3460
3794
  ],
3461
3795
  {
3462
3796
  "align": "center",
3463
- "color": "#0f172a",
3464
- "fontSize": 13.0,
3465
3797
  "id": [
3466
3798
  "str/concat",
3467
3799
  "category-label-",
@@ -3472,6 +3804,8 @@
3472
3804
  "@category",
3473
3805
  "label"
3474
3806
  ],
3807
+ "textSize": "sm",
3808
+ "tone": "label",
3475
3809
  "type": "text",
3476
3810
  "x": "@centerX",
3477
3811
  "y": [
@@ -3558,6 +3892,7 @@
3558
3892
  },
3559
3893
  {
3560
3894
  "action": "RETRY",
3895
+ "icon": "rotate-ccw",
3561
3896
  "label": "@config.retryLabel",
3562
3897
  "type": "button",
3563
3898
  "variant": "primary"
@@ -3609,6 +3944,11 @@
3609
3944
  "edges": [],
3610
3945
  "height": "@config.height",
3611
3946
  "interactive": "@config.interactive",
3947
+ "keyMap": {
3948
+ "ArrowRight": "ADVANCE",
3949
+ "KeyR": "RETRY",
3950
+ "Space": "TOGGLE_RUN"
3951
+ },
3612
3952
  "nodes": [],
3613
3953
  "shapes": "@backdropShapes",
3614
3954
  "type": "biology-canvas",
@@ -3908,9 +4248,100 @@
3908
4248
  {
3909
4249
  "children": [
3910
4250
  {
3911
- "content": "@entity.title",
3912
- "type": "typography",
3913
- "variant": "h4"
4251
+ "align": "start",
4252
+ "children": [
4253
+ {
4254
+ "children": [
4255
+ {
4256
+ "content": "@entity.title",
4257
+ "type": "typography",
4258
+ "variant": "h4"
4259
+ },
4260
+ [
4261
+ "if",
4262
+ [
4263
+ "==",
4264
+ "@config.summary",
4265
+ ""
4266
+ ],
4267
+ null,
4268
+ {
4269
+ "color": "muted",
4270
+ "content": "@config.summary",
4271
+ "type": "typography",
4272
+ "variant": "body2"
4273
+ }
4274
+ ]
4275
+ ],
4276
+ "direction": "vertical",
4277
+ "gap": "xs",
4278
+ "type": "stack"
4279
+ },
4280
+ {
4281
+ "label": [
4282
+ "if",
4283
+ "@entity.roundComplete",
4284
+ "Round complete",
4285
+ [
4286
+ "if",
4287
+ [
4288
+ "or",
4289
+ [
4290
+ "!=",
4291
+ "@config.pointsPerCorrect",
4292
+ 1.0
4293
+ ],
4294
+ [
4295
+ ">",
4296
+ "@config.penaltyPerMiss",
4297
+ 0.0
4298
+ ]
4299
+ ],
4300
+ [
4301
+ "str/concat",
4302
+ "Score ",
4303
+ "@entity.score"
4304
+ ],
4305
+ [
4306
+ "str/concat",
4307
+ "@entity.correctCount",
4308
+ " / ",
4309
+ "@entity.attemptedCount",
4310
+ " correct"
4311
+ ]
4312
+ ]
4313
+ ],
4314
+ "type": "badge",
4315
+ "variant": [
4316
+ "if",
4317
+ "@entity.roundComplete",
4318
+ "primary",
4319
+ [
4320
+ "if",
4321
+ [
4322
+ "==",
4323
+ "@entity.verdict",
4324
+ "correct"
4325
+ ],
4326
+ "success",
4327
+ [
4328
+ "if",
4329
+ [
4330
+ "==",
4331
+ "@entity.verdict",
4332
+ "incorrect"
4333
+ ],
4334
+ "error",
4335
+ "neutral"
4336
+ ]
4337
+ ]
4338
+ ]
4339
+ }
4340
+ ],
4341
+ "direction": "horizontal",
4342
+ "gap": "md",
4343
+ "justify": "between",
4344
+ "type": "stack"
3914
4345
  },
3915
4346
  {
3916
4347
  "label": [
@@ -4233,9 +4664,21 @@
4233
4664
  [
4234
4665
  "minWidth",
4235
4666
  [
4236
- "*",
4237
- "@plotWidth",
4238
- 0.3
4667
+ "-",
4668
+ "@maxWidth",
4669
+ [
4670
+ "*",
4671
+ "@config.taper",
4672
+ [
4673
+ "-",
4674
+ "@maxWidth",
4675
+ [
4676
+ "*",
4677
+ "@plotWidth",
4678
+ 0.3
4679
+ ]
4680
+ ]
4681
+ ]
4239
4682
  ]
4240
4683
  ],
4241
4684
  [
@@ -4248,9 +4691,13 @@
4248
4691
  "@minWidth"
4249
4692
  ],
4250
4693
  [
4251
- "-",
4252
- "@categoryCount",
4253
- 1.0
4694
+ "math/max",
4695
+ 1.0,
4696
+ [
4697
+ "-",
4698
+ "@categoryCount",
4699
+ 1.0
4700
+ ]
4254
4701
  ]
4255
4702
  ]
4256
4703
  ],
@@ -4387,14 +4834,15 @@
4387
4834
  [
4388
4835
  "baseRect",
4389
4836
  {
4390
- "color": "@fillColor",
4391
- "fill": "@fillColor",
4837
+ "fillStyle": "tint",
4838
+ "fillTone": "@fillColor",
4392
4839
  "height": "@tierHeight",
4393
4840
  "id": [
4394
4841
  "str/concat",
4395
4842
  "category-",
4396
4843
  "@i"
4397
4844
  ],
4845
+ "tone": "@fillColor",
4398
4846
  "type": "rect",
4399
4847
  "width": "@w",
4400
4848
  "x": "@x",
@@ -4412,16 +4860,16 @@
4412
4860
  [
4413
4861
  "@baseRect",
4414
4862
  {
4415
- "color": "#0f172a",
4416
- "fill": "transparent",
4863
+ "fillStyle": "outline",
4417
4864
  "height": "@tierHeight",
4418
4865
  "id": [
4419
4866
  "str/concat",
4420
4867
  "category-pick-ring-",
4421
4868
  "@i"
4422
4869
  ],
4423
- "lineWidth": 3.0,
4424
4870
  "opacity": 1.0,
4871
+ "stroke": "bold",
4872
+ "tone": "ink",
4425
4873
  "type": "rect",
4426
4874
  "width": "@w",
4427
4875
  "x": "@x",
@@ -4478,8 +4926,6 @@
4478
4926
  ],
4479
4927
  {
4480
4928
  "align": "center",
4481
- "color": "#0f172a",
4482
- "fontSize": 13.0,
4483
4929
  "id": [
4484
4930
  "str/concat",
4485
4931
  "category-label-",
@@ -4490,6 +4936,8 @@
4490
4936
  "@category",
4491
4937
  "label"
4492
4938
  ],
4939
+ "textSize": "sm",
4940
+ "tone": "label",
4493
4941
  "type": "text",
4494
4942
  "x": "@centerX",
4495
4943
  "y": [
@@ -4576,6 +5024,7 @@
4576
5024
  },
4577
5025
  {
4578
5026
  "action": "RETRY",
5027
+ "icon": "rotate-ccw",
4579
5028
  "label": "@config.retryLabel",
4580
5029
  "type": "button",
4581
5030
  "variant": "primary"
@@ -4627,6 +5076,11 @@
4627
5076
  "edges": [],
4628
5077
  "height": "@config.height",
4629
5078
  "interactive": "@config.interactive",
5079
+ "keyMap": {
5080
+ "ArrowRight": "ADVANCE",
5081
+ "KeyR": "RETRY",
5082
+ "Space": "TOGGLE_RUN"
5083
+ },
4630
5084
  "nodes": [],
4631
5085
  "shapes": "@backdropShapes",
4632
5086
  "type": "biology-canvas",
@@ -4926,9 +5380,100 @@
4926
5380
  {
4927
5381
  "children": [
4928
5382
  {
4929
- "content": "@entity.title",
4930
- "type": "typography",
4931
- "variant": "h4"
5383
+ "align": "start",
5384
+ "children": [
5385
+ {
5386
+ "children": [
5387
+ {
5388
+ "content": "@entity.title",
5389
+ "type": "typography",
5390
+ "variant": "h4"
5391
+ },
5392
+ [
5393
+ "if",
5394
+ [
5395
+ "==",
5396
+ "@config.summary",
5397
+ ""
5398
+ ],
5399
+ null,
5400
+ {
5401
+ "color": "muted",
5402
+ "content": "@config.summary",
5403
+ "type": "typography",
5404
+ "variant": "body2"
5405
+ }
5406
+ ]
5407
+ ],
5408
+ "direction": "vertical",
5409
+ "gap": "xs",
5410
+ "type": "stack"
5411
+ },
5412
+ {
5413
+ "label": [
5414
+ "if",
5415
+ "@entity.roundComplete",
5416
+ "Round complete",
5417
+ [
5418
+ "if",
5419
+ [
5420
+ "or",
5421
+ [
5422
+ "!=",
5423
+ "@config.pointsPerCorrect",
5424
+ 1.0
5425
+ ],
5426
+ [
5427
+ ">",
5428
+ "@config.penaltyPerMiss",
5429
+ 0.0
5430
+ ]
5431
+ ],
5432
+ [
5433
+ "str/concat",
5434
+ "Score ",
5435
+ "@entity.score"
5436
+ ],
5437
+ [
5438
+ "str/concat",
5439
+ "@entity.correctCount",
5440
+ " / ",
5441
+ "@entity.attemptedCount",
5442
+ " correct"
5443
+ ]
5444
+ ]
5445
+ ],
5446
+ "type": "badge",
5447
+ "variant": [
5448
+ "if",
5449
+ "@entity.roundComplete",
5450
+ "primary",
5451
+ [
5452
+ "if",
5453
+ [
5454
+ "==",
5455
+ "@entity.verdict",
5456
+ "correct"
5457
+ ],
5458
+ "success",
5459
+ [
5460
+ "if",
5461
+ [
5462
+ "==",
5463
+ "@entity.verdict",
5464
+ "incorrect"
5465
+ ],
5466
+ "error",
5467
+ "neutral"
5468
+ ]
5469
+ ]
5470
+ ]
5471
+ }
5472
+ ],
5473
+ "direction": "horizontal",
5474
+ "gap": "md",
5475
+ "justify": "between",
5476
+ "type": "stack"
4932
5477
  },
4933
5478
  {
4934
5479
  "label": [
@@ -5212,9 +5757,21 @@
5212
5757
  [
5213
5758
  "minWidth",
5214
5759
  [
5215
- "*",
5216
- "@plotWidth",
5217
- 0.3
5760
+ "-",
5761
+ "@maxWidth",
5762
+ [
5763
+ "*",
5764
+ "@config.taper",
5765
+ [
5766
+ "-",
5767
+ "@maxWidth",
5768
+ [
5769
+ "*",
5770
+ "@plotWidth",
5771
+ 0.3
5772
+ ]
5773
+ ]
5774
+ ]
5218
5775
  ]
5219
5776
  ],
5220
5777
  [
@@ -5227,9 +5784,13 @@
5227
5784
  "@minWidth"
5228
5785
  ],
5229
5786
  [
5230
- "-",
5231
- "@categoryCount",
5232
- 1.0
5787
+ "math/max",
5788
+ 1.0,
5789
+ [
5790
+ "-",
5791
+ "@categoryCount",
5792
+ 1.0
5793
+ ]
5233
5794
  ]
5234
5795
  ]
5235
5796
  ],
@@ -5366,14 +5927,15 @@
5366
5927
  [
5367
5928
  "baseRect",
5368
5929
  {
5369
- "color": "@fillColor",
5370
- "fill": "@fillColor",
5930
+ "fillStyle": "tint",
5931
+ "fillTone": "@fillColor",
5371
5932
  "height": "@tierHeight",
5372
5933
  "id": [
5373
5934
  "str/concat",
5374
5935
  "category-",
5375
5936
  "@i"
5376
5937
  ],
5938
+ "tone": "@fillColor",
5377
5939
  "type": "rect",
5378
5940
  "width": "@w",
5379
5941
  "x": "@x",
@@ -5391,16 +5953,16 @@
5391
5953
  [
5392
5954
  "@baseRect",
5393
5955
  {
5394
- "color": "#0f172a",
5395
- "fill": "transparent",
5956
+ "fillStyle": "outline",
5396
5957
  "height": "@tierHeight",
5397
5958
  "id": [
5398
5959
  "str/concat",
5399
5960
  "category-pick-ring-",
5400
5961
  "@i"
5401
5962
  ],
5402
- "lineWidth": 3.0,
5403
5963
  "opacity": 1.0,
5964
+ "stroke": "bold",
5965
+ "tone": "ink",
5404
5966
  "type": "rect",
5405
5967
  "width": "@w",
5406
5968
  "x": "@x",
@@ -5457,8 +6019,6 @@
5457
6019
  ],
5458
6020
  {
5459
6021
  "align": "center",
5460
- "color": "#0f172a",
5461
- "fontSize": 13.0,
5462
6022
  "id": [
5463
6023
  "str/concat",
5464
6024
  "category-label-",
@@ -5469,6 +6029,8 @@
5469
6029
  "@category",
5470
6030
  "label"
5471
6031
  ],
6032
+ "textSize": "sm",
6033
+ "tone": "label",
5472
6034
  "type": "text",
5473
6035
  "x": "@centerX",
5474
6036
  "y": [
@@ -5555,6 +6117,7 @@
5555
6117
  },
5556
6118
  {
5557
6119
  "action": "RETRY",
6120
+ "icon": "rotate-ccw",
5558
6121
  "label": "@config.retryLabel",
5559
6122
  "type": "button",
5560
6123
  "variant": "primary"
@@ -5606,6 +6169,11 @@
5606
6169
  "edges": [],
5607
6170
  "height": "@config.height",
5608
6171
  "interactive": "@config.interactive",
6172
+ "keyMap": {
6173
+ "ArrowRight": "ADVANCE",
6174
+ "KeyR": "RETRY",
6175
+ "Space": "TOGGLE_RUN"
6176
+ },
5609
6177
  "nodes": [],
5610
6178
  "shapes": "@backdropShapes",
5611
6179
  "type": "biology-canvas",
@@ -5905,9 +6473,100 @@
5905
6473
  {
5906
6474
  "children": [
5907
6475
  {
5908
- "content": "@entity.title",
5909
- "type": "typography",
5910
- "variant": "h4"
6476
+ "align": "start",
6477
+ "children": [
6478
+ {
6479
+ "children": [
6480
+ {
6481
+ "content": "@entity.title",
6482
+ "type": "typography",
6483
+ "variant": "h4"
6484
+ },
6485
+ [
6486
+ "if",
6487
+ [
6488
+ "==",
6489
+ "@config.summary",
6490
+ ""
6491
+ ],
6492
+ null,
6493
+ {
6494
+ "color": "muted",
6495
+ "content": "@config.summary",
6496
+ "type": "typography",
6497
+ "variant": "body2"
6498
+ }
6499
+ ]
6500
+ ],
6501
+ "direction": "vertical",
6502
+ "gap": "xs",
6503
+ "type": "stack"
6504
+ },
6505
+ {
6506
+ "label": [
6507
+ "if",
6508
+ "@entity.roundComplete",
6509
+ "Round complete",
6510
+ [
6511
+ "if",
6512
+ [
6513
+ "or",
6514
+ [
6515
+ "!=",
6516
+ "@config.pointsPerCorrect",
6517
+ 1.0
6518
+ ],
6519
+ [
6520
+ ">",
6521
+ "@config.penaltyPerMiss",
6522
+ 0.0
6523
+ ]
6524
+ ],
6525
+ [
6526
+ "str/concat",
6527
+ "Score ",
6528
+ "@entity.score"
6529
+ ],
6530
+ [
6531
+ "str/concat",
6532
+ "@entity.correctCount",
6533
+ " / ",
6534
+ "@entity.attemptedCount",
6535
+ " correct"
6536
+ ]
6537
+ ]
6538
+ ],
6539
+ "type": "badge",
6540
+ "variant": [
6541
+ "if",
6542
+ "@entity.roundComplete",
6543
+ "primary",
6544
+ [
6545
+ "if",
6546
+ [
6547
+ "==",
6548
+ "@entity.verdict",
6549
+ "correct"
6550
+ ],
6551
+ "success",
6552
+ [
6553
+ "if",
6554
+ [
6555
+ "==",
6556
+ "@entity.verdict",
6557
+ "incorrect"
6558
+ ],
6559
+ "error",
6560
+ "neutral"
6561
+ ]
6562
+ ]
6563
+ ]
6564
+ }
6565
+ ],
6566
+ "direction": "horizontal",
6567
+ "gap": "md",
6568
+ "justify": "between",
6569
+ "type": "stack"
5911
6570
  },
5912
6571
  {
5913
6572
  "label": [
@@ -6000,9 +6659,100 @@
6000
6659
  {
6001
6660
  "children": [
6002
6661
  {
6003
- "content": "@entity.title",
6004
- "type": "typography",
6005
- "variant": "h4"
6662
+ "align": "start",
6663
+ "children": [
6664
+ {
6665
+ "children": [
6666
+ {
6667
+ "content": "@entity.title",
6668
+ "type": "typography",
6669
+ "variant": "h4"
6670
+ },
6671
+ [
6672
+ "if",
6673
+ [
6674
+ "==",
6675
+ "@config.summary",
6676
+ ""
6677
+ ],
6678
+ null,
6679
+ {
6680
+ "color": "muted",
6681
+ "content": "@config.summary",
6682
+ "type": "typography",
6683
+ "variant": "body2"
6684
+ }
6685
+ ]
6686
+ ],
6687
+ "direction": "vertical",
6688
+ "gap": "xs",
6689
+ "type": "stack"
6690
+ },
6691
+ {
6692
+ "label": [
6693
+ "if",
6694
+ "@entity.roundComplete",
6695
+ "Round complete",
6696
+ [
6697
+ "if",
6698
+ [
6699
+ "or",
6700
+ [
6701
+ "!=",
6702
+ "@config.pointsPerCorrect",
6703
+ 1.0
6704
+ ],
6705
+ [
6706
+ ">",
6707
+ "@config.penaltyPerMiss",
6708
+ 0.0
6709
+ ]
6710
+ ],
6711
+ [
6712
+ "str/concat",
6713
+ "Score ",
6714
+ "@entity.score"
6715
+ ],
6716
+ [
6717
+ "str/concat",
6718
+ "@entity.correctCount",
6719
+ " / ",
6720
+ "@entity.attemptedCount",
6721
+ " correct"
6722
+ ]
6723
+ ]
6724
+ ],
6725
+ "type": "badge",
6726
+ "variant": [
6727
+ "if",
6728
+ "@entity.roundComplete",
6729
+ "primary",
6730
+ [
6731
+ "if",
6732
+ [
6733
+ "==",
6734
+ "@entity.verdict",
6735
+ "correct"
6736
+ ],
6737
+ "success",
6738
+ [
6739
+ "if",
6740
+ [
6741
+ "==",
6742
+ "@entity.verdict",
6743
+ "incorrect"
6744
+ ],
6745
+ "error",
6746
+ "neutral"
6747
+ ]
6748
+ ]
6749
+ ]
6750
+ }
6751
+ ],
6752
+ "direction": "horizontal",
6753
+ "gap": "md",
6754
+ "justify": "between",
6755
+ "type": "stack"
6006
6756
  },
6007
6757
  {
6008
6758
  "label": [
@@ -6332,6 +7082,26 @@
6332
7082
  {
6333
7083
  "name": "opacity",
6334
7084
  "type": "number"
7085
+ },
7086
+ {
7087
+ "name": "tone",
7088
+ "type": "string"
7089
+ },
7090
+ {
7091
+ "name": "fillTone",
7092
+ "type": "string"
7093
+ },
7094
+ {
7095
+ "name": "stroke",
7096
+ "type": "string"
7097
+ },
7098
+ {
7099
+ "name": "textSize",
7100
+ "type": "string"
7101
+ },
7102
+ {
7103
+ "name": "fillStyle",
7104
+ "type": "string"
6335
7105
  }
6336
7106
  ],
6337
7107
  "LearnClassifyShapePoint": [