@almadar/std 16.241.0 → 16.243.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 +136 -0
  8. package/behaviors/lolo/infra/atoms/std-page-treat.lolo +59 -0
  9. package/behaviors/lolo/infra/atoms/std-page-watch.lolo +88 -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 +885 -0
  55. package/behaviors/registry/infra/atoms/std-page-treat.orb +494 -0
  56. package/behaviors/registry/infra/atoms/std-page-watch.orb +572 -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
@@ -201,6 +201,11 @@
201
201
  "name": "feedback",
202
202
  "type": "string"
203
203
  },
204
+ {
205
+ "default": -1.0,
206
+ "name": "pickedIndex",
207
+ "type": "number"
208
+ },
204
209
  {
205
210
  "items": {
206
211
  "type": "node"
@@ -326,6 +331,13 @@
326
331
  "tier": "domain",
327
332
  "type": "number"
328
333
  },
334
+ "summary": {
335
+ "default": "",
336
+ "description": "One line under the title saying what is being drilled (keep it under ~65 characters). Empty shows no line.",
337
+ "label": "Concept",
338
+ "tier": "presentation",
339
+ "type": "string"
340
+ },
329
341
  "timeLimit": {
330
342
  "default": 6.0,
331
343
  "description": "Seconds the learner has to answer each item before it counts as a miss.",
@@ -395,6 +407,10 @@
395
407
  "kind": "set",
396
408
  "resource": "@entity.options"
397
409
  },
410
+ {
411
+ "kind": "set",
412
+ "resource": "@entity.pickedIndex"
413
+ },
398
414
  {
399
415
  "kind": "set",
400
416
  "resource": "@entity.promptText"
@@ -545,6 +561,7 @@
545
561
  "feedback",
546
562
  "itemIndex",
547
563
  "options",
564
+ "pickedIndex",
548
565
  "promptText",
549
566
  "remaining",
550
567
  "running",
@@ -757,6 +774,11 @@
757
774
  "@entity.verdict",
758
775
  ""
759
776
  ],
777
+ [
778
+ "set",
779
+ "@entity.pickedIndex",
780
+ -1.0
781
+ ],
760
782
  [
761
783
  "set",
762
784
  "@entity.score",
@@ -837,9 +859,78 @@
837
859
  {
838
860
  "children": [
839
861
  {
840
- "content": "@entity.title",
841
- "type": "typography",
842
- "variant": "h4"
862
+ "align": "start",
863
+ "children": [
864
+ {
865
+ "children": [
866
+ {
867
+ "content": "@entity.title",
868
+ "type": "typography",
869
+ "variant": "h4"
870
+ },
871
+ [
872
+ "if",
873
+ [
874
+ "==",
875
+ "@config.summary",
876
+ ""
877
+ ],
878
+ null,
879
+ {
880
+ "color": "muted",
881
+ "content": "@config.summary",
882
+ "type": "typography",
883
+ "variant": "body2"
884
+ }
885
+ ]
886
+ ],
887
+ "direction": "vertical",
888
+ "gap": "xs",
889
+ "type": "stack"
890
+ },
891
+ {
892
+ "label": [
893
+ "if",
894
+ "@entity.done",
895
+ "Round complete",
896
+ [
897
+ "str/concat",
898
+ "@entity.score",
899
+ " pts · streak ",
900
+ "@entity.streak"
901
+ ]
902
+ ],
903
+ "type": "badge",
904
+ "variant": [
905
+ "if",
906
+ "@entity.done",
907
+ "primary",
908
+ [
909
+ "if",
910
+ [
911
+ "==",
912
+ "@entity.verdict",
913
+ "correct"
914
+ ],
915
+ "success",
916
+ [
917
+ "if",
918
+ [
919
+ "==",
920
+ "@entity.verdict",
921
+ ""
922
+ ],
923
+ "neutral",
924
+ "error"
925
+ ]
926
+ ]
927
+ ]
928
+ }
929
+ ],
930
+ "direction": "horizontal",
931
+ "gap": "md",
932
+ "justify": "between",
933
+ "type": "stack"
843
934
  },
844
935
  {
845
936
  "label": [
@@ -892,7 +983,21 @@
892
983
  ],
893
984
  "showPercentage": false,
894
985
  "type": "progress-bar",
895
- "value": "@entity.remaining"
986
+ "value": "@entity.remaining",
987
+ "variant": [
988
+ "if",
989
+ [
990
+ "<",
991
+ "@entity.remaining",
992
+ [
993
+ "*",
994
+ "@config.timeLimit",
995
+ 3.0
996
+ ]
997
+ ],
998
+ "warning",
999
+ "primary"
1000
+ ]
896
1001
  },
897
1002
  {
898
1003
  "children": "@entity.view",
@@ -922,32 +1027,116 @@
922
1027
  "index": "@i"
923
1028
  },
924
1029
  "disabled": [
925
- "if",
926
- "@entity.running",
927
- false,
928
- true
1030
+ "not",
1031
+ "@entity.running"
929
1032
  ],
930
1033
  "label": [
931
1034
  "array/nth",
932
1035
  "@entity.options",
933
1036
  "@i"
934
1037
  ],
935
- "size": "sm",
1038
+ "size": "lg",
936
1039
  "type": "button",
937
- "variant": "secondary"
1040
+ "variant": [
1041
+ "if",
1042
+ "@entity.running",
1043
+ "secondary",
1044
+ [
1045
+ "if",
1046
+ [
1047
+ "==",
1048
+ "@i",
1049
+ "@entity.correctIndex"
1050
+ ],
1051
+ "success",
1052
+ [
1053
+ "if",
1054
+ [
1055
+ "==",
1056
+ "@i",
1057
+ "@entity.pickedIndex"
1058
+ ],
1059
+ "danger",
1060
+ "ghost"
1061
+ ]
1062
+ ]
1063
+ ]
938
1064
  }
939
1065
  ]
940
1066
  ],
941
- "direction": "horizontal",
942
- "gap": "xs",
1067
+ "direction": "vertical",
1068
+ "gap": "sm",
943
1069
  "type": "stack"
944
1070
  },
1071
+ [
1072
+ "if",
1073
+ [
1074
+ "or",
1075
+ [
1076
+ "==",
1077
+ "@entity.feedback",
1078
+ ""
1079
+ ],
1080
+ "@entity.done"
1081
+ ],
1082
+ null,
1083
+ {
1084
+ "children": [
1085
+ {
1086
+ "label": [
1087
+ "if",
1088
+ [
1089
+ "==",
1090
+ "@entity.verdict",
1091
+ "correct"
1092
+ ],
1093
+ "Correct",
1094
+ [
1095
+ "if",
1096
+ [
1097
+ "==",
1098
+ "@entity.verdict",
1099
+ "timeout"
1100
+ ],
1101
+ "Time's up",
1102
+ "Incorrect"
1103
+ ]
1104
+ ],
1105
+ "type": "badge",
1106
+ "variant": [
1107
+ "if",
1108
+ [
1109
+ "==",
1110
+ "@entity.verdict",
1111
+ "correct"
1112
+ ],
1113
+ "success",
1114
+ "error"
1115
+ ]
1116
+ },
1117
+ {
1118
+ "content": "@entity.feedback",
1119
+ "type": "typography",
1120
+ "variant": "body"
1121
+ }
1122
+ ],
1123
+ "direction": "vertical",
1124
+ "gap": "xs",
1125
+ "type": "stack"
1126
+ }
1127
+ ],
1128
+ [
1129
+ "if",
1130
+ "@entity.done",
1131
+ {
1132
+ "content": "@entity.feedback",
1133
+ "type": "typography",
1134
+ "variant": "body"
1135
+ },
1136
+ null
1137
+ ],
945
1138
  {
946
- "content": "@entity.feedback",
947
- "type": "typography",
948
- "variant": "caption"
949
- },
950
- {
1139
+ "align": "center",
951
1140
  "children": [
952
1141
  {
953
1142
  "action": "NEXT",
@@ -977,6 +1166,7 @@
977
1166
  false,
978
1167
  true
979
1168
  ],
1169
+ "icon": "chevron-right",
980
1170
  "label": "@config.nextLabel",
981
1171
  "type": "button",
982
1172
  "variant": "primary"
@@ -989,39 +1179,26 @@
989
1179
  false,
990
1180
  true
991
1181
  ],
1182
+ "icon": "rotate-ccw",
992
1183
  "label": "@config.retryLabel",
993
1184
  "type": "button",
994
1185
  "variant": "ghost"
1186
+ },
1187
+ {
1188
+ "color": "muted",
1189
+ "content": [
1190
+ "str/concat",
1191
+ "Best streak ",
1192
+ "@entity.bestStreak"
1193
+ ],
1194
+ "type": "typography",
1195
+ "variant": "caption"
995
1196
  }
996
1197
  ],
997
1198
  "direction": "horizontal",
998
1199
  "gap": "sm",
999
- "type": "stack"
1000
- },
1001
- {
1002
- "label": "Score",
1003
- "max": 0.0,
1004
- "type": "stat-display",
1005
- "value": "@entity.score"
1006
- },
1007
- {
1008
- "content": [
1009
- "str/concat",
1010
- "Streak: ",
1011
- [
1012
- "str/concat",
1013
- "",
1014
- "@entity.streak"
1015
- ],
1016
- " · best: ",
1017
- [
1018
- "str/concat",
1019
- "",
1020
- "@entity.bestStreak"
1021
- ]
1022
- ],
1023
- "type": "typography",
1024
- "variant": "caption"
1200
+ "type": "stack",
1201
+ "wrap": true
1025
1202
  }
1026
1203
  ],
1027
1204
  "direction": "vertical",
@@ -1044,6 +1221,48 @@
1044
1221
  ],
1045
1222
  "to": "idle"
1046
1223
  },
1224
+ {
1225
+ "effects": [
1226
+ [
1227
+ "set",
1228
+ "@entity.active",
1229
+ false
1230
+ ],
1231
+ [
1232
+ "set",
1233
+ "@entity.running",
1234
+ false
1235
+ ],
1236
+ [
1237
+ "render-ui",
1238
+ "main",
1239
+ null
1240
+ ]
1241
+ ],
1242
+ "event": "MODE_SELECTED",
1243
+ "eventId": "evt_01M07581K79NFK2TV53DRCRDW8",
1244
+ "from": "idle",
1245
+ "guard": [
1246
+ "and",
1247
+ [
1248
+ "not",
1249
+ [
1250
+ "==",
1251
+ "@config.matchMode",
1252
+ ""
1253
+ ]
1254
+ ],
1255
+ [
1256
+ "not",
1257
+ [
1258
+ "==",
1259
+ "@payload.mode",
1260
+ "@config.matchMode"
1261
+ ]
1262
+ ]
1263
+ ],
1264
+ "to": "idle"
1265
+ },
1047
1266
  {
1048
1267
  "effects": [
1049
1268
  [
@@ -1102,6 +1321,11 @@
1102
1321
  "@entity.verdict",
1103
1322
  ""
1104
1323
  ],
1324
+ [
1325
+ "set",
1326
+ "@entity.pickedIndex",
1327
+ -1.0
1328
+ ],
1105
1329
  [
1106
1330
  "set",
1107
1331
  "@entity.score",
@@ -1182,9 +1406,78 @@
1182
1406
  {
1183
1407
  "children": [
1184
1408
  {
1185
- "content": "@entity.title",
1186
- "type": "typography",
1187
- "variant": "h4"
1409
+ "align": "start",
1410
+ "children": [
1411
+ {
1412
+ "children": [
1413
+ {
1414
+ "content": "@entity.title",
1415
+ "type": "typography",
1416
+ "variant": "h4"
1417
+ },
1418
+ [
1419
+ "if",
1420
+ [
1421
+ "==",
1422
+ "@config.summary",
1423
+ ""
1424
+ ],
1425
+ null,
1426
+ {
1427
+ "color": "muted",
1428
+ "content": "@config.summary",
1429
+ "type": "typography",
1430
+ "variant": "body2"
1431
+ }
1432
+ ]
1433
+ ],
1434
+ "direction": "vertical",
1435
+ "gap": "xs",
1436
+ "type": "stack"
1437
+ },
1438
+ {
1439
+ "label": [
1440
+ "if",
1441
+ "@entity.done",
1442
+ "Round complete",
1443
+ [
1444
+ "str/concat",
1445
+ "@entity.score",
1446
+ " pts · streak ",
1447
+ "@entity.streak"
1448
+ ]
1449
+ ],
1450
+ "type": "badge",
1451
+ "variant": [
1452
+ "if",
1453
+ "@entity.done",
1454
+ "primary",
1455
+ [
1456
+ "if",
1457
+ [
1458
+ "==",
1459
+ "@entity.verdict",
1460
+ "correct"
1461
+ ],
1462
+ "success",
1463
+ [
1464
+ "if",
1465
+ [
1466
+ "==",
1467
+ "@entity.verdict",
1468
+ ""
1469
+ ],
1470
+ "neutral",
1471
+ "error"
1472
+ ]
1473
+ ]
1474
+ ]
1475
+ }
1476
+ ],
1477
+ "direction": "horizontal",
1478
+ "gap": "md",
1479
+ "justify": "between",
1480
+ "type": "stack"
1188
1481
  },
1189
1482
  {
1190
1483
  "label": [
@@ -1237,7 +1530,21 @@
1237
1530
  ],
1238
1531
  "showPercentage": false,
1239
1532
  "type": "progress-bar",
1240
- "value": "@entity.remaining"
1533
+ "value": "@entity.remaining",
1534
+ "variant": [
1535
+ "if",
1536
+ [
1537
+ "<",
1538
+ "@entity.remaining",
1539
+ [
1540
+ "*",
1541
+ "@config.timeLimit",
1542
+ 3.0
1543
+ ]
1544
+ ],
1545
+ "warning",
1546
+ "primary"
1547
+ ]
1241
1548
  },
1242
1549
  {
1243
1550
  "children": "@entity.view",
@@ -1267,61 +1574,146 @@
1267
1574
  "index": "@i"
1268
1575
  },
1269
1576
  "disabled": [
1270
- "if",
1271
- "@entity.running",
1272
- false,
1273
- true
1577
+ "not",
1578
+ "@entity.running"
1274
1579
  ],
1275
1580
  "label": [
1276
1581
  "array/nth",
1277
1582
  "@entity.options",
1278
1583
  "@i"
1279
1584
  ],
1280
- "size": "sm",
1585
+ "size": "lg",
1281
1586
  "type": "button",
1282
- "variant": "secondary"
1587
+ "variant": [
1588
+ "if",
1589
+ "@entity.running",
1590
+ "secondary",
1591
+ [
1592
+ "if",
1593
+ [
1594
+ "==",
1595
+ "@i",
1596
+ "@entity.correctIndex"
1597
+ ],
1598
+ "success",
1599
+ [
1600
+ "if",
1601
+ [
1602
+ "==",
1603
+ "@i",
1604
+ "@entity.pickedIndex"
1605
+ ],
1606
+ "danger",
1607
+ "ghost"
1608
+ ]
1609
+ ]
1610
+ ]
1283
1611
  }
1284
1612
  ]
1285
1613
  ],
1286
- "direction": "horizontal",
1287
- "gap": "xs",
1614
+ "direction": "vertical",
1615
+ "gap": "sm",
1288
1616
  "type": "stack"
1289
1617
  },
1290
- {
1291
- "content": "@entity.feedback",
1292
- "type": "typography",
1293
- "variant": "caption"
1294
- },
1295
- {
1296
- "children": [
1297
- {
1298
- "action": "NEXT",
1299
- "disabled": [
1300
- "if",
1301
- [
1302
- "and",
1618
+ [
1619
+ "if",
1620
+ [
1621
+ "or",
1622
+ [
1623
+ "==",
1624
+ "@entity.feedback",
1625
+ ""
1626
+ ],
1627
+ "@entity.done"
1628
+ ],
1629
+ null,
1630
+ {
1631
+ "children": [
1632
+ {
1633
+ "label": [
1634
+ "if",
1303
1635
  [
1304
1636
  "==",
1305
- "@entity.running",
1306
- false
1637
+ "@entity.verdict",
1638
+ "correct"
1307
1639
  ],
1640
+ "Correct",
1308
1641
  [
1309
- "and",
1642
+ "if",
1310
1643
  [
1311
- "!=",
1644
+ "==",
1312
1645
  "@entity.verdict",
1313
- ""
1646
+ "timeout"
1314
1647
  ],
1315
- [
1316
- "==",
1317
- "@entity.done",
1318
- false
1319
- ]
1648
+ "Time's up",
1649
+ "Incorrect"
1320
1650
  ]
1321
1651
  ],
1322
- false,
1323
- true
1652
+ "type": "badge",
1653
+ "variant": [
1654
+ "if",
1655
+ [
1656
+ "==",
1657
+ "@entity.verdict",
1658
+ "correct"
1659
+ ],
1660
+ "success",
1661
+ "error"
1662
+ ]
1663
+ },
1664
+ {
1665
+ "content": "@entity.feedback",
1666
+ "type": "typography",
1667
+ "variant": "body"
1668
+ }
1669
+ ],
1670
+ "direction": "vertical",
1671
+ "gap": "xs",
1672
+ "type": "stack"
1673
+ }
1674
+ ],
1675
+ [
1676
+ "if",
1677
+ "@entity.done",
1678
+ {
1679
+ "content": "@entity.feedback",
1680
+ "type": "typography",
1681
+ "variant": "body"
1682
+ },
1683
+ null
1684
+ ],
1685
+ {
1686
+ "align": "center",
1687
+ "children": [
1688
+ {
1689
+ "action": "NEXT",
1690
+ "disabled": [
1691
+ "if",
1692
+ [
1693
+ "and",
1694
+ [
1695
+ "==",
1696
+ "@entity.running",
1697
+ false
1698
+ ],
1699
+ [
1700
+ "and",
1701
+ [
1702
+ "!=",
1703
+ "@entity.verdict",
1704
+ ""
1705
+ ],
1706
+ [
1707
+ "==",
1708
+ "@entity.done",
1709
+ false
1710
+ ]
1711
+ ]
1712
+ ],
1713
+ false,
1714
+ true
1324
1715
  ],
1716
+ "icon": "chevron-right",
1325
1717
  "label": "@config.nextLabel",
1326
1718
  "type": "button",
1327
1719
  "variant": "primary"
@@ -1334,39 +1726,26 @@
1334
1726
  false,
1335
1727
  true
1336
1728
  ],
1729
+ "icon": "rotate-ccw",
1337
1730
  "label": "@config.retryLabel",
1338
1731
  "type": "button",
1339
1732
  "variant": "ghost"
1733
+ },
1734
+ {
1735
+ "color": "muted",
1736
+ "content": [
1737
+ "str/concat",
1738
+ "Best streak ",
1739
+ "@entity.bestStreak"
1740
+ ],
1741
+ "type": "typography",
1742
+ "variant": "caption"
1340
1743
  }
1341
1744
  ],
1342
1745
  "direction": "horizontal",
1343
1746
  "gap": "sm",
1344
- "type": "stack"
1345
- },
1346
- {
1347
- "label": "Score",
1348
- "max": 0.0,
1349
- "type": "stat-display",
1350
- "value": "@entity.score"
1351
- },
1352
- {
1353
- "content": [
1354
- "str/concat",
1355
- "Streak: ",
1356
- [
1357
- "str/concat",
1358
- "",
1359
- "@entity.streak"
1360
- ],
1361
- " · best: ",
1362
- [
1363
- "str/concat",
1364
- "",
1365
- "@entity.bestStreak"
1366
- ]
1367
- ],
1368
- "type": "typography",
1369
- "variant": "caption"
1747
+ "type": "stack",
1748
+ "wrap": true
1370
1749
  }
1371
1750
  ],
1372
1751
  "direction": "vertical",
@@ -1464,6 +1843,11 @@
1464
1843
  "@entity.running",
1465
1844
  false
1466
1845
  ],
1846
+ [
1847
+ "set",
1848
+ "@entity.pickedIndex",
1849
+ "@payload.index"
1850
+ ],
1467
1851
  [
1468
1852
  "set",
1469
1853
  "@entity.verdict",
@@ -1691,6 +2075,11 @@
1691
2075
  "@entity.verdict",
1692
2076
  ""
1693
2077
  ],
2078
+ [
2079
+ "set",
2080
+ "@entity.pickedIndex",
2081
+ -1.0
2082
+ ],
1694
2083
  [
1695
2084
  "set",
1696
2085
  "@entity.promptText",
@@ -1803,9 +2192,78 @@
1803
2192
  {
1804
2193
  "children": [
1805
2194
  {
1806
- "content": "@entity.title",
1807
- "type": "typography",
1808
- "variant": "h4"
2195
+ "align": "start",
2196
+ "children": [
2197
+ {
2198
+ "children": [
2199
+ {
2200
+ "content": "@entity.title",
2201
+ "type": "typography",
2202
+ "variant": "h4"
2203
+ },
2204
+ [
2205
+ "if",
2206
+ [
2207
+ "==",
2208
+ "@config.summary",
2209
+ ""
2210
+ ],
2211
+ null,
2212
+ {
2213
+ "color": "muted",
2214
+ "content": "@config.summary",
2215
+ "type": "typography",
2216
+ "variant": "body2"
2217
+ }
2218
+ ]
2219
+ ],
2220
+ "direction": "vertical",
2221
+ "gap": "xs",
2222
+ "type": "stack"
2223
+ },
2224
+ {
2225
+ "label": [
2226
+ "if",
2227
+ "@entity.done",
2228
+ "Round complete",
2229
+ [
2230
+ "str/concat",
2231
+ "@entity.score",
2232
+ " pts · streak ",
2233
+ "@entity.streak"
2234
+ ]
2235
+ ],
2236
+ "type": "badge",
2237
+ "variant": [
2238
+ "if",
2239
+ "@entity.done",
2240
+ "primary",
2241
+ [
2242
+ "if",
2243
+ [
2244
+ "==",
2245
+ "@entity.verdict",
2246
+ "correct"
2247
+ ],
2248
+ "success",
2249
+ [
2250
+ "if",
2251
+ [
2252
+ "==",
2253
+ "@entity.verdict",
2254
+ ""
2255
+ ],
2256
+ "neutral",
2257
+ "error"
2258
+ ]
2259
+ ]
2260
+ ]
2261
+ }
2262
+ ],
2263
+ "direction": "horizontal",
2264
+ "gap": "md",
2265
+ "justify": "between",
2266
+ "type": "stack"
1809
2267
  },
1810
2268
  {
1811
2269
  "label": [
@@ -1858,7 +2316,21 @@
1858
2316
  ],
1859
2317
  "showPercentage": false,
1860
2318
  "type": "progress-bar",
1861
- "value": "@entity.remaining"
2319
+ "value": "@entity.remaining",
2320
+ "variant": [
2321
+ "if",
2322
+ [
2323
+ "<",
2324
+ "@entity.remaining",
2325
+ [
2326
+ "*",
2327
+ "@config.timeLimit",
2328
+ 3.0
2329
+ ]
2330
+ ],
2331
+ "warning",
2332
+ "primary"
2333
+ ]
1862
2334
  },
1863
2335
  {
1864
2336
  "children": "@entity.view",
@@ -1888,32 +2360,116 @@
1888
2360
  "index": "@i"
1889
2361
  },
1890
2362
  "disabled": [
1891
- "if",
1892
- "@entity.running",
1893
- false,
1894
- true
2363
+ "not",
2364
+ "@entity.running"
1895
2365
  ],
1896
2366
  "label": [
1897
2367
  "array/nth",
1898
2368
  "@entity.options",
1899
2369
  "@i"
1900
2370
  ],
1901
- "size": "sm",
2371
+ "size": "lg",
1902
2372
  "type": "button",
1903
- "variant": "secondary"
2373
+ "variant": [
2374
+ "if",
2375
+ "@entity.running",
2376
+ "secondary",
2377
+ [
2378
+ "if",
2379
+ [
2380
+ "==",
2381
+ "@i",
2382
+ "@entity.correctIndex"
2383
+ ],
2384
+ "success",
2385
+ [
2386
+ "if",
2387
+ [
2388
+ "==",
2389
+ "@i",
2390
+ "@entity.pickedIndex"
2391
+ ],
2392
+ "danger",
2393
+ "ghost"
2394
+ ]
2395
+ ]
2396
+ ]
1904
2397
  }
1905
2398
  ]
1906
2399
  ],
1907
- "direction": "horizontal",
1908
- "gap": "xs",
2400
+ "direction": "vertical",
2401
+ "gap": "sm",
1909
2402
  "type": "stack"
1910
2403
  },
2404
+ [
2405
+ "if",
2406
+ [
2407
+ "or",
2408
+ [
2409
+ "==",
2410
+ "@entity.feedback",
2411
+ ""
2412
+ ],
2413
+ "@entity.done"
2414
+ ],
2415
+ null,
2416
+ {
2417
+ "children": [
2418
+ {
2419
+ "label": [
2420
+ "if",
2421
+ [
2422
+ "==",
2423
+ "@entity.verdict",
2424
+ "correct"
2425
+ ],
2426
+ "Correct",
2427
+ [
2428
+ "if",
2429
+ [
2430
+ "==",
2431
+ "@entity.verdict",
2432
+ "timeout"
2433
+ ],
2434
+ "Time's up",
2435
+ "Incorrect"
2436
+ ]
2437
+ ],
2438
+ "type": "badge",
2439
+ "variant": [
2440
+ "if",
2441
+ [
2442
+ "==",
2443
+ "@entity.verdict",
2444
+ "correct"
2445
+ ],
2446
+ "success",
2447
+ "error"
2448
+ ]
2449
+ },
2450
+ {
2451
+ "content": "@entity.feedback",
2452
+ "type": "typography",
2453
+ "variant": "body"
2454
+ }
2455
+ ],
2456
+ "direction": "vertical",
2457
+ "gap": "xs",
2458
+ "type": "stack"
2459
+ }
2460
+ ],
2461
+ [
2462
+ "if",
2463
+ "@entity.done",
2464
+ {
2465
+ "content": "@entity.feedback",
2466
+ "type": "typography",
2467
+ "variant": "body"
2468
+ },
2469
+ null
2470
+ ],
1911
2471
  {
1912
- "content": "@entity.feedback",
1913
- "type": "typography",
1914
- "variant": "caption"
1915
- },
1916
- {
2472
+ "align": "center",
1917
2473
  "children": [
1918
2474
  {
1919
2475
  "action": "NEXT",
@@ -1943,6 +2499,7 @@
1943
2499
  false,
1944
2500
  true
1945
2501
  ],
2502
+ "icon": "chevron-right",
1946
2503
  "label": "@config.nextLabel",
1947
2504
  "type": "button",
1948
2505
  "variant": "primary"
@@ -1955,39 +2512,26 @@
1955
2512
  false,
1956
2513
  true
1957
2514
  ],
2515
+ "icon": "rotate-ccw",
1958
2516
  "label": "@config.retryLabel",
1959
2517
  "type": "button",
1960
2518
  "variant": "ghost"
2519
+ },
2520
+ {
2521
+ "color": "muted",
2522
+ "content": [
2523
+ "str/concat",
2524
+ "Best streak ",
2525
+ "@entity.bestStreak"
2526
+ ],
2527
+ "type": "typography",
2528
+ "variant": "caption"
1961
2529
  }
1962
2530
  ],
1963
2531
  "direction": "horizontal",
1964
2532
  "gap": "sm",
1965
- "type": "stack"
1966
- },
1967
- {
1968
- "label": "Score",
1969
- "max": 0.0,
1970
- "type": "stat-display",
1971
- "value": "@entity.score"
1972
- },
1973
- {
1974
- "content": [
1975
- "str/concat",
1976
- "Streak: ",
1977
- [
1978
- "str/concat",
1979
- "",
1980
- "@entity.streak"
1981
- ],
1982
- " · best: ",
1983
- [
1984
- "str/concat",
1985
- "",
1986
- "@entity.bestStreak"
1987
- ]
1988
- ],
1989
- "type": "typography",
1990
- "variant": "caption"
2533
+ "type": "stack",
2534
+ "wrap": true
1991
2535
  }
1992
2536
  ],
1993
2537
  "direction": "vertical",
@@ -2083,6 +2627,11 @@
2083
2627
  "@entity.verdict",
2084
2628
  ""
2085
2629
  ],
2630
+ [
2631
+ "set",
2632
+ "@entity.pickedIndex",
2633
+ -1.0
2634
+ ],
2086
2635
  [
2087
2636
  "set",
2088
2637
  "@entity.score",
@@ -2163,9 +2712,78 @@
2163
2712
  {
2164
2713
  "children": [
2165
2714
  {
2166
- "content": "@entity.title",
2167
- "type": "typography",
2168
- "variant": "h4"
2715
+ "align": "start",
2716
+ "children": [
2717
+ {
2718
+ "children": [
2719
+ {
2720
+ "content": "@entity.title",
2721
+ "type": "typography",
2722
+ "variant": "h4"
2723
+ },
2724
+ [
2725
+ "if",
2726
+ [
2727
+ "==",
2728
+ "@config.summary",
2729
+ ""
2730
+ ],
2731
+ null,
2732
+ {
2733
+ "color": "muted",
2734
+ "content": "@config.summary",
2735
+ "type": "typography",
2736
+ "variant": "body2"
2737
+ }
2738
+ ]
2739
+ ],
2740
+ "direction": "vertical",
2741
+ "gap": "xs",
2742
+ "type": "stack"
2743
+ },
2744
+ {
2745
+ "label": [
2746
+ "if",
2747
+ "@entity.done",
2748
+ "Round complete",
2749
+ [
2750
+ "str/concat",
2751
+ "@entity.score",
2752
+ " pts · streak ",
2753
+ "@entity.streak"
2754
+ ]
2755
+ ],
2756
+ "type": "badge",
2757
+ "variant": [
2758
+ "if",
2759
+ "@entity.done",
2760
+ "primary",
2761
+ [
2762
+ "if",
2763
+ [
2764
+ "==",
2765
+ "@entity.verdict",
2766
+ "correct"
2767
+ ],
2768
+ "success",
2769
+ [
2770
+ "if",
2771
+ [
2772
+ "==",
2773
+ "@entity.verdict",
2774
+ ""
2775
+ ],
2776
+ "neutral",
2777
+ "error"
2778
+ ]
2779
+ ]
2780
+ ]
2781
+ }
2782
+ ],
2783
+ "direction": "horizontal",
2784
+ "gap": "md",
2785
+ "justify": "between",
2786
+ "type": "stack"
2169
2787
  },
2170
2788
  {
2171
2789
  "label": [
@@ -2218,7 +2836,21 @@
2218
2836
  ],
2219
2837
  "showPercentage": false,
2220
2838
  "type": "progress-bar",
2221
- "value": "@entity.remaining"
2839
+ "value": "@entity.remaining",
2840
+ "variant": [
2841
+ "if",
2842
+ [
2843
+ "<",
2844
+ "@entity.remaining",
2845
+ [
2846
+ "*",
2847
+ "@config.timeLimit",
2848
+ 3.0
2849
+ ]
2850
+ ],
2851
+ "warning",
2852
+ "primary"
2853
+ ]
2222
2854
  },
2223
2855
  {
2224
2856
  "children": "@entity.view",
@@ -2248,32 +2880,116 @@
2248
2880
  "index": "@i"
2249
2881
  },
2250
2882
  "disabled": [
2251
- "if",
2252
- "@entity.running",
2253
- false,
2254
- true
2883
+ "not",
2884
+ "@entity.running"
2255
2885
  ],
2256
2886
  "label": [
2257
2887
  "array/nth",
2258
2888
  "@entity.options",
2259
2889
  "@i"
2260
2890
  ],
2261
- "size": "sm",
2891
+ "size": "lg",
2262
2892
  "type": "button",
2263
- "variant": "secondary"
2893
+ "variant": [
2894
+ "if",
2895
+ "@entity.running",
2896
+ "secondary",
2897
+ [
2898
+ "if",
2899
+ [
2900
+ "==",
2901
+ "@i",
2902
+ "@entity.correctIndex"
2903
+ ],
2904
+ "success",
2905
+ [
2906
+ "if",
2907
+ [
2908
+ "==",
2909
+ "@i",
2910
+ "@entity.pickedIndex"
2911
+ ],
2912
+ "danger",
2913
+ "ghost"
2914
+ ]
2915
+ ]
2916
+ ]
2264
2917
  }
2265
2918
  ]
2266
2919
  ],
2267
- "direction": "horizontal",
2268
- "gap": "xs",
2920
+ "direction": "vertical",
2921
+ "gap": "sm",
2269
2922
  "type": "stack"
2270
2923
  },
2924
+ [
2925
+ "if",
2926
+ [
2927
+ "or",
2928
+ [
2929
+ "==",
2930
+ "@entity.feedback",
2931
+ ""
2932
+ ],
2933
+ "@entity.done"
2934
+ ],
2935
+ null,
2936
+ {
2937
+ "children": [
2938
+ {
2939
+ "label": [
2940
+ "if",
2941
+ [
2942
+ "==",
2943
+ "@entity.verdict",
2944
+ "correct"
2945
+ ],
2946
+ "Correct",
2947
+ [
2948
+ "if",
2949
+ [
2950
+ "==",
2951
+ "@entity.verdict",
2952
+ "timeout"
2953
+ ],
2954
+ "Time's up",
2955
+ "Incorrect"
2956
+ ]
2957
+ ],
2958
+ "type": "badge",
2959
+ "variant": [
2960
+ "if",
2961
+ [
2962
+ "==",
2963
+ "@entity.verdict",
2964
+ "correct"
2965
+ ],
2966
+ "success",
2967
+ "error"
2968
+ ]
2969
+ },
2970
+ {
2971
+ "content": "@entity.feedback",
2972
+ "type": "typography",
2973
+ "variant": "body"
2974
+ }
2975
+ ],
2976
+ "direction": "vertical",
2977
+ "gap": "xs",
2978
+ "type": "stack"
2979
+ }
2980
+ ],
2981
+ [
2982
+ "if",
2983
+ "@entity.done",
2984
+ {
2985
+ "content": "@entity.feedback",
2986
+ "type": "typography",
2987
+ "variant": "body"
2988
+ },
2989
+ null
2990
+ ],
2271
2991
  {
2272
- "content": "@entity.feedback",
2273
- "type": "typography",
2274
- "variant": "caption"
2275
- },
2276
- {
2992
+ "align": "center",
2277
2993
  "children": [
2278
2994
  {
2279
2995
  "action": "NEXT",
@@ -2303,6 +3019,7 @@
2303
3019
  false,
2304
3020
  true
2305
3021
  ],
3022
+ "icon": "chevron-right",
2306
3023
  "label": "@config.nextLabel",
2307
3024
  "type": "button",
2308
3025
  "variant": "primary"
@@ -2315,39 +3032,26 @@
2315
3032
  false,
2316
3033
  true
2317
3034
  ],
3035
+ "icon": "rotate-ccw",
2318
3036
  "label": "@config.retryLabel",
2319
3037
  "type": "button",
2320
3038
  "variant": "ghost"
3039
+ },
3040
+ {
3041
+ "color": "muted",
3042
+ "content": [
3043
+ "str/concat",
3044
+ "Best streak ",
3045
+ "@entity.bestStreak"
3046
+ ],
3047
+ "type": "typography",
3048
+ "variant": "caption"
2321
3049
  }
2322
3050
  ],
2323
3051
  "direction": "horizontal",
2324
3052
  "gap": "sm",
2325
- "type": "stack"
2326
- },
2327
- {
2328
- "label": "Score",
2329
- "max": 0.0,
2330
- "type": "stat-display",
2331
- "value": "@entity.score"
2332
- },
2333
- {
2334
- "content": [
2335
- "str/concat",
2336
- "Streak: ",
2337
- [
2338
- "str/concat",
2339
- "",
2340
- "@entity.streak"
2341
- ],
2342
- " · best: ",
2343
- [
2344
- "str/concat",
2345
- "",
2346
- "@entity.bestStreak"
2347
- ]
2348
- ],
2349
- "type": "typography",
2350
- "variant": "caption"
3053
+ "type": "stack",
3054
+ "wrap": true
2351
3055
  }
2352
3056
  ],
2353
3057
  "direction": "vertical",