@almadar/std 16.239.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 (167) hide show
  1. package/behaviors/behaviors-registry.json +4814 -553
  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-board.lolo +53 -6
  11. package/behaviors/lolo/ui/core/atoms/std-book-reader.lolo +25 -1
  12. package/behaviors/lolo/ui/core/atoms/std-card-grid.lolo +9 -0
  13. package/behaviors/lolo/ui/core/atoms/std-doc-page.lolo +153 -0
  14. package/behaviors/lolo/ui/core/atoms/std-site-header.lolo +15 -3
  15. package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +2 -2
  16. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +7 -7
  17. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +1 -1
  18. package/behaviors/lolo/ui/core/molecules/ui-header.lolo +5 -0
  19. package/behaviors/lolo/ui/learning/atoms/std-learn-arrangement.lolo +124 -92
  20. package/behaviors/lolo/ui/learning/atoms/std-learn-classify.lolo +114 -55
  21. package/behaviors/lolo/ui/learning/atoms/std-learn-compare.lolo +40 -14
  22. package/behaviors/lolo/ui/learning/atoms/std-learn-coupled-sim.lolo +363 -123
  23. package/behaviors/lolo/ui/learning/atoms/std-learn-derivation.lolo +93 -48
  24. package/behaviors/lolo/ui/learning/atoms/std-learn-diagram.lolo +60 -28
  25. package/behaviors/lolo/ui/learning/atoms/std-learn-doser.lolo +193 -96
  26. package/behaviors/lolo/ui/learning/atoms/std-learn-estimate.lolo +75 -32
  27. package/behaviors/lolo/ui/learning/atoms/std-learn-goal-seek.lolo +142 -86
  28. package/behaviors/lolo/ui/learning/atoms/std-learn-grid-sim.lolo +266 -98
  29. package/behaviors/lolo/ui/learning/atoms/std-learn-hotspot.lolo +103 -65
  30. package/behaviors/lolo/ui/learning/atoms/std-learn-live-sim.lolo +223 -109
  31. package/behaviors/lolo/ui/learning/atoms/std-learn-measure.lolo +232 -64
  32. package/behaviors/lolo/ui/learning/atoms/std-learn-param-explorer.lolo +69 -29
  33. package/behaviors/lolo/ui/learning/atoms/std-learn-perturb.lolo +363 -123
  34. package/behaviors/lolo/ui/learning/atoms/std-learn-predict.lolo +73 -41
  35. package/behaviors/lolo/ui/learning/atoms/std-learn-sample-accumulator.lolo +96 -38
  36. package/behaviors/lolo/ui/learning/atoms/std-learn-sandbox.lolo +65 -45
  37. package/behaviors/lolo/ui/learning/atoms/std-learn-scatter-fit.lolo +243 -117
  38. package/behaviors/lolo/ui/learning/atoms/std-learn-scenario.lolo +76 -28
  39. package/behaviors/lolo/ui/learning/atoms/std-learn-sim-3d.lolo +228 -109
  40. package/behaviors/lolo/ui/learning/atoms/std-learn-speed-drill.lolo +95 -44
  41. package/behaviors/lolo/ui/learning/atoms/std-learn-stepper.lolo +199 -125
  42. package/behaviors/lolo/ui/learning/atoms/std-learn-tour-3d.lolo +92 -48
  43. package/behaviors/lolo/ui/learning/atoms/std-learn-trace-player.lolo +239 -78
  44. package/behaviors/lolo/ui/learning/atoms/std-learn-transport.lolo +147 -38
  45. package/behaviors/lolo/ui/learning/atoms/std-learn-tree.lolo +123 -58
  46. package/behaviors/lolo/ui/learning/atoms/ui-algo-graph-canvas.lolo +22 -0
  47. package/behaviors/lolo/ui/learning/atoms/ui-algorithm-canvas.lolo +26 -0
  48. package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +26 -0
  49. package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +27 -1
  50. package/behaviors/lolo/ui/learning/atoms/ui-learning-canvas.lolo +27 -1
  51. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +29 -9
  52. package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +26 -0
  53. package/behaviors/lolo-behavior-contracts.json +1 -1
  54. package/behaviors/registry/agent/atoms/std-agent-memory.orb +372 -2
  55. package/behaviors/registry/agent/atoms/std-agent-session.orb +4752 -348
  56. package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +54 -42
  57. package/behaviors/registry/agent/organisms/std-agent-assistant.orb +356 -122
  58. package/behaviors/registry/factory-signatures.json +1 -1
  59. package/behaviors/registry/infra/atoms/std-page-open.orb +435 -0
  60. package/behaviors/registry/infra/atoms/std-page-search.orb +867 -0
  61. package/behaviors/registry/infra/atoms/std-page-treat.orb +494 -0
  62. package/behaviors/registry/infra/atoms/std-page-watch.orb +554 -0
  63. package/behaviors/registry/ui/core/atoms/std-board.orb +110 -14
  64. package/behaviors/registry/ui/core/atoms/std-book-reader.orb +119 -0
  65. package/behaviors/registry/ui/core/atoms/std-card-grid.orb +61 -0
  66. package/behaviors/registry/ui/core/atoms/std-doc-page.orb +594 -0
  67. package/behaviors/registry/ui/core/atoms/std-site-header.orb +40 -2
  68. package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +2 -0
  69. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +24 -0
  70. package/behaviors/registry/ui/core/atoms/std-version-history.orb +8 -1
  71. package/behaviors/registry/ui/core/molecules/ui-header.orb +7 -0
  72. package/behaviors/registry/ui/learning/atoms/std-learn-arrangement.orb +903 -369
  73. package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1002 -232
  74. package/behaviors/registry/ui/learning/atoms/std-learn-compare.orb +253 -74
  75. package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +3624 -921
  76. package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +685 -144
  77. package/behaviors/registry/ui/learning/atoms/std-learn-diagram.orb +404 -52
  78. package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +1787 -210
  79. package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +699 -71
  80. package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +1102 -578
  81. package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +2760 -872
  82. package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +689 -152
  83. package/behaviors/registry/ui/learning/atoms/std-learn-live-sim.orb +1431 -633
  84. package/behaviors/registry/ui/learning/atoms/std-learn-measure.orb +2485 -512
  85. package/behaviors/registry/ui/learning/atoms/std-learn-param-explorer.orb +501 -197
  86. package/behaviors/registry/ui/learning/atoms/std-learn-perturb.orb +3642 -928
  87. package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +705 -125
  88. package/behaviors/registry/ui/learning/atoms/std-learn-sample-accumulator.orb +624 -114
  89. package/behaviors/registry/ui/learning/atoms/std-learn-sandbox.orb +405 -153
  90. package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +1911 -611
  91. package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +436 -128
  92. package/behaviors/registry/ui/learning/atoms/std-learn-sim-3d.orb +2482 -485
  93. package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +896 -192
  94. package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +2001 -759
  95. package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +734 -228
  96. package/behaviors/registry/ui/learning/atoms/std-learn-trace-player.orb +2501 -764
  97. package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +1591 -173
  98. package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +883 -122
  99. package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +176 -0
  100. package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +211 -0
  101. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +211 -0
  102. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +212 -1
  103. package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +212 -1
  104. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +203 -9
  105. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +211 -0
  106. package/behaviors/signatures.lolo +325 -655
  107. package/canonical-operators.json +35 -1
  108. package/dist/behaviors/exports-reader.js +41980 -35508
  109. package/dist/behaviors/functions/index.d.ts +1063 -140
  110. package/dist/behaviors/functions/index.js +41951 -35506
  111. package/dist/behaviors/index.d.ts +1 -1
  112. package/dist/behaviors/index.js +41981 -35509
  113. package/dist/behaviors/query.js +41980 -35508
  114. package/dist/behaviors-embeddings.hash.json +3 -3
  115. package/dist/behaviors-embeddings.json +47 -27
  116. package/dist/behaviors-registry.json +4814 -553
  117. package/dist/index.d.ts +4 -4
  118. package/dist/index.js +42019 -35509
  119. package/dist/knob-embeddings.hash.json +3 -3
  120. package/dist/knob-embeddings.json +623 -263
  121. package/dist/modules/anim.d.ts +1 -1
  122. package/dist/modules/array.d.ts +1 -1
  123. package/dist/modules/async.d.ts +1 -1
  124. package/dist/modules/behavior.d.ts +1 -1
  125. package/dist/modules/browser.d.ts +1 -1
  126. package/dist/modules/composition.d.ts +1 -1
  127. package/dist/modules/contract.d.ts +1 -1
  128. package/dist/modules/core.d.ts +1 -1
  129. package/dist/modules/core.js +2 -0
  130. package/dist/modules/data.d.ts +1 -1
  131. package/dist/modules/ease.d.ts +1 -1
  132. package/dist/modules/format.d.ts +1 -1
  133. package/dist/modules/geo.d.ts +1 -1
  134. package/dist/modules/graph.d.ts +1 -1
  135. package/dist/modules/grid.d.ts +1 -1
  136. package/dist/modules/i18n.d.ts +17 -0
  137. package/dist/modules/i18n.js +22 -0
  138. package/dist/modules/index.d.ts +2 -1
  139. package/dist/modules/index.js +24 -1
  140. package/dist/modules/integration.d.ts +1 -1
  141. package/dist/modules/json.d.ts +1 -1
  142. package/dist/modules/llm.d.ts +1 -1
  143. package/dist/modules/math.d.ts +1 -1
  144. package/dist/modules/memory.d.ts +1 -1
  145. package/dist/modules/nn.d.ts +1 -1
  146. package/dist/modules/noise.d.ts +1 -1
  147. package/dist/modules/object.d.ts +1 -1
  148. package/dist/modules/os.d.ts +1 -1
  149. package/dist/modules/path.d.ts +1 -1
  150. package/dist/modules/prob.d.ts +1 -1
  151. package/dist/modules/session.d.ts +1 -1
  152. package/dist/modules/str.d.ts +1 -1
  153. package/dist/modules/tensor.d.ts +1 -1
  154. package/dist/modules/time.d.ts +1 -1
  155. package/dist/modules/trace.d.ts +1 -1
  156. package/dist/modules/train.d.ts +1 -1
  157. package/dist/modules/validate.d.ts +1 -1
  158. package/dist/modules/vector.d.ts +1 -1
  159. package/dist/modules/workspace.d.ts +1 -1
  160. package/dist/registry/factory-signatures.json +1 -1
  161. package/dist/registry.d.ts +10 -3
  162. package/dist/registry.js +31 -1
  163. package/dist/{types-DLx38UFZ.d.ts → types-Cdb321uM.d.ts} +9 -3
  164. package/i18n/ar.json +1 -0
  165. package/i18n/en.json +1 -0
  166. package/i18n/sl.json +1 -0
  167. package/package.json +3 -3
@@ -358,8 +358,8 @@
358
358
  "type": "boolean"
359
359
  },
360
360
  "backgroundColor": {
361
- "default": "#f8fafc",
362
- "description": "Canvas background color.",
361
+ "default": "",
362
+ "description": "Canvas ground. Empty uses the theme drawing ground.",
363
363
  "label": "Background Color",
364
364
  "tier": "presentation",
365
365
  "type": "string"
@@ -394,6 +394,13 @@
394
394
  "tier": "presentation",
395
395
  "type": "boolean"
396
396
  },
397
+ "summary": {
398
+ "default": "",
399
+ "description": "One line under the title saying what the learner is looking at (keep it under ~65 characters). Empty shows no line.",
400
+ "label": "Concept",
401
+ "tier": "presentation",
402
+ "type": "string"
403
+ },
397
404
  "title": {
398
405
  "default": "Ordered Tree",
399
406
  "description": "Title shown above the canvas.",
@@ -918,14 +925,72 @@
918
925
  {
919
926
  "children": [
920
927
  {
921
- "content": "@entity.title",
922
- "type": "typography",
923
- "variant": "h4"
928
+ "align": "start",
929
+ "children": [
930
+ {
931
+ "children": [
932
+ {
933
+ "content": "@entity.title",
934
+ "type": "typography",
935
+ "variant": "h4"
936
+ },
937
+ [
938
+ "if",
939
+ [
940
+ "==",
941
+ "@config.summary",
942
+ ""
943
+ ],
944
+ null,
945
+ {
946
+ "color": "muted",
947
+ "content": "@config.summary",
948
+ "type": "typography",
949
+ "variant": "body2"
950
+ }
951
+ ]
952
+ ],
953
+ "direction": "vertical",
954
+ "gap": "xs",
955
+ "type": "stack"
956
+ },
957
+ {
958
+ "label": [
959
+ "if",
960
+ "@entity.traversing",
961
+ "Traversing",
962
+ [
963
+ "if",
964
+ "@entity.running",
965
+ "Auto-stepping",
966
+ "Building"
967
+ ]
968
+ ],
969
+ "type": "badge",
970
+ "variant": [
971
+ "if",
972
+ "@entity.traversing",
973
+ "success",
974
+ [
975
+ "if",
976
+ "@entity.running",
977
+ "primary",
978
+ "neutral"
979
+ ]
980
+ ]
981
+ }
982
+ ],
983
+ "direction": "horizontal",
984
+ "gap": "md",
985
+ "justify": "between",
986
+ "type": "stack"
924
987
  },
925
988
  {
989
+ "align": "center",
926
990
  "children": [
927
991
  {
928
992
  "action": "INSERT_VALUE",
993
+ "icon": "plus",
929
994
  "label": "Insert",
930
995
  "type": "button",
931
996
  "variant": "primary"
@@ -938,36 +1003,67 @@
938
1003
  },
939
1004
  {
940
1005
  "action": "RUN_TRAVERSAL",
1006
+ "icon": "step-forward",
941
1007
  "label": "Traverse",
942
1008
  "type": "button",
943
1009
  "variant": "secondary"
944
1010
  },
945
- {
946
- "action": "TOGGLE_RUN",
947
- "label": [
948
- "if",
949
- "@entity.running",
950
- "Pause",
951
- "Run"
952
- ],
953
- "type": "button",
954
- "variant": "secondary"
955
- },
1011
+ [
1012
+ "if",
1013
+ "@entity.running",
1014
+ {
1015
+ "action": "TOGGLE_RUN",
1016
+ "aria-pressed": "true",
1017
+ "icon": "pause",
1018
+ "label": "Pause",
1019
+ "type": "button",
1020
+ "variant": "secondary"
1021
+ },
1022
+ {
1023
+ "action": "TOGGLE_RUN",
1024
+ "aria-pressed": "false",
1025
+ "icon": "play",
1026
+ "label": "Run",
1027
+ "type": "button",
1028
+ "variant": "secondary"
1029
+ }
1030
+ ],
956
1031
  {
957
1032
  "action": "RESET",
1033
+ "icon": "rotate-ccw",
958
1034
  "label": "Reset",
959
1035
  "type": "button",
960
1036
  "variant": "ghost"
1037
+ },
1038
+ {
1039
+ "color": "muted",
1040
+ "content": [
1041
+ "str/concat",
1042
+ [
1043
+ "str/concat",
1044
+ "",
1045
+ "@entity.count"
1046
+ ],
1047
+ " nodes"
1048
+ ],
1049
+ "type": "typography",
1050
+ "variant": "caption"
961
1051
  }
962
1052
  ],
963
1053
  "direction": "horizontal",
964
1054
  "gap": "sm",
965
- "type": "stack"
1055
+ "type": "stack",
1056
+ "wrap": true
966
1057
  },
967
1058
  {
968
1059
  "backgroundColor": "@config.backgroundColor",
969
1060
  "edges": "@entity.edges",
970
1061
  "height": "@config.height",
1062
+ "keyMap": {
1063
+ "ArrowRight": "RUN_TRAVERSAL",
1064
+ "KeyR": "RESET",
1065
+ "Space": "TOGGLE_RUN"
1066
+ },
971
1067
  "layout": "tree",
972
1068
  "nodes": "@entity.nodes",
973
1069
  "root": "n0",
@@ -1010,6 +1106,48 @@
1010
1106
  ],
1011
1107
  "to": "idle"
1012
1108
  },
1109
+ {
1110
+ "effects": [
1111
+ [
1112
+ "set",
1113
+ "@entity.active",
1114
+ false
1115
+ ],
1116
+ [
1117
+ "set",
1118
+ "@entity.running",
1119
+ false
1120
+ ],
1121
+ [
1122
+ "render-ui",
1123
+ "main",
1124
+ null
1125
+ ]
1126
+ ],
1127
+ "event": "MODE_SELECTED",
1128
+ "eventId": "evt_01M0CG89EJ61ZX62ZHT1AD0XJC",
1129
+ "from": "idle",
1130
+ "guard": [
1131
+ "and",
1132
+ [
1133
+ "not",
1134
+ [
1135
+ "==",
1136
+ "@config.matchMode",
1137
+ ""
1138
+ ]
1139
+ ],
1140
+ [
1141
+ "not",
1142
+ [
1143
+ "==",
1144
+ "@payload.mode",
1145
+ "@config.matchMode"
1146
+ ]
1147
+ ]
1148
+ ],
1149
+ "to": "idle"
1150
+ },
1013
1151
  {
1014
1152
  "effects": [
1015
1153
  [
@@ -1105,14 +1243,72 @@
1105
1243
  {
1106
1244
  "children": [
1107
1245
  {
1108
- "content": "@entity.title",
1109
- "type": "typography",
1110
- "variant": "h4"
1246
+ "align": "start",
1247
+ "children": [
1248
+ {
1249
+ "children": [
1250
+ {
1251
+ "content": "@entity.title",
1252
+ "type": "typography",
1253
+ "variant": "h4"
1254
+ },
1255
+ [
1256
+ "if",
1257
+ [
1258
+ "==",
1259
+ "@config.summary",
1260
+ ""
1261
+ ],
1262
+ null,
1263
+ {
1264
+ "color": "muted",
1265
+ "content": "@config.summary",
1266
+ "type": "typography",
1267
+ "variant": "body2"
1268
+ }
1269
+ ]
1270
+ ],
1271
+ "direction": "vertical",
1272
+ "gap": "xs",
1273
+ "type": "stack"
1274
+ },
1275
+ {
1276
+ "label": [
1277
+ "if",
1278
+ "@entity.traversing",
1279
+ "Traversing",
1280
+ [
1281
+ "if",
1282
+ "@entity.running",
1283
+ "Auto-stepping",
1284
+ "Building"
1285
+ ]
1286
+ ],
1287
+ "type": "badge",
1288
+ "variant": [
1289
+ "if",
1290
+ "@entity.traversing",
1291
+ "success",
1292
+ [
1293
+ "if",
1294
+ "@entity.running",
1295
+ "primary",
1296
+ "neutral"
1297
+ ]
1298
+ ]
1299
+ }
1300
+ ],
1301
+ "direction": "horizontal",
1302
+ "gap": "md",
1303
+ "justify": "between",
1304
+ "type": "stack"
1111
1305
  },
1112
1306
  {
1307
+ "align": "center",
1113
1308
  "children": [
1114
1309
  {
1115
1310
  "action": "INSERT_VALUE",
1311
+ "icon": "plus",
1116
1312
  "label": "Insert",
1117
1313
  "type": "button",
1118
1314
  "variant": "primary"
@@ -1125,36 +1321,67 @@
1125
1321
  },
1126
1322
  {
1127
1323
  "action": "RUN_TRAVERSAL",
1324
+ "icon": "step-forward",
1128
1325
  "label": "Traverse",
1129
1326
  "type": "button",
1130
1327
  "variant": "secondary"
1131
1328
  },
1132
- {
1133
- "action": "TOGGLE_RUN",
1134
- "label": [
1135
- "if",
1136
- "@entity.running",
1137
- "Pause",
1138
- "Run"
1139
- ],
1140
- "type": "button",
1141
- "variant": "secondary"
1142
- },
1329
+ [
1330
+ "if",
1331
+ "@entity.running",
1332
+ {
1333
+ "action": "TOGGLE_RUN",
1334
+ "aria-pressed": "true",
1335
+ "icon": "pause",
1336
+ "label": "Pause",
1337
+ "type": "button",
1338
+ "variant": "secondary"
1339
+ },
1340
+ {
1341
+ "action": "TOGGLE_RUN",
1342
+ "aria-pressed": "false",
1343
+ "icon": "play",
1344
+ "label": "Run",
1345
+ "type": "button",
1346
+ "variant": "secondary"
1347
+ }
1348
+ ],
1143
1349
  {
1144
1350
  "action": "RESET",
1351
+ "icon": "rotate-ccw",
1145
1352
  "label": "Reset",
1146
1353
  "type": "button",
1147
1354
  "variant": "ghost"
1355
+ },
1356
+ {
1357
+ "color": "muted",
1358
+ "content": [
1359
+ "str/concat",
1360
+ [
1361
+ "str/concat",
1362
+ "",
1363
+ "@entity.count"
1364
+ ],
1365
+ " nodes"
1366
+ ],
1367
+ "type": "typography",
1368
+ "variant": "caption"
1148
1369
  }
1149
1370
  ],
1150
1371
  "direction": "horizontal",
1151
1372
  "gap": "sm",
1152
- "type": "stack"
1373
+ "type": "stack",
1374
+ "wrap": true
1153
1375
  },
1154
1376
  {
1155
1377
  "backgroundColor": "@config.backgroundColor",
1156
1378
  "edges": "@entity.edges",
1157
1379
  "height": "@config.height",
1380
+ "keyMap": {
1381
+ "ArrowRight": "RUN_TRAVERSAL",
1382
+ "KeyR": "RESET",
1383
+ "Space": "TOGGLE_RUN"
1384
+ },
1158
1385
  "layout": "tree",
1159
1386
  "nodes": "@entity.nodes",
1160
1387
  "root": "n0",
@@ -1931,14 +2158,72 @@
1931
2158
  {
1932
2159
  "children": [
1933
2160
  {
1934
- "content": "@entity.title",
1935
- "type": "typography",
1936
- "variant": "h4"
2161
+ "align": "start",
2162
+ "children": [
2163
+ {
2164
+ "children": [
2165
+ {
2166
+ "content": "@entity.title",
2167
+ "type": "typography",
2168
+ "variant": "h4"
2169
+ },
2170
+ [
2171
+ "if",
2172
+ [
2173
+ "==",
2174
+ "@config.summary",
2175
+ ""
2176
+ ],
2177
+ null,
2178
+ {
2179
+ "color": "muted",
2180
+ "content": "@config.summary",
2181
+ "type": "typography",
2182
+ "variant": "body2"
2183
+ }
2184
+ ]
2185
+ ],
2186
+ "direction": "vertical",
2187
+ "gap": "xs",
2188
+ "type": "stack"
2189
+ },
2190
+ {
2191
+ "label": [
2192
+ "if",
2193
+ "@entity.traversing",
2194
+ "Traversing",
2195
+ [
2196
+ "if",
2197
+ "@entity.running",
2198
+ "Auto-stepping",
2199
+ "Building"
2200
+ ]
2201
+ ],
2202
+ "type": "badge",
2203
+ "variant": [
2204
+ "if",
2205
+ "@entity.traversing",
2206
+ "success",
2207
+ [
2208
+ "if",
2209
+ "@entity.running",
2210
+ "primary",
2211
+ "neutral"
2212
+ ]
2213
+ ]
2214
+ }
2215
+ ],
2216
+ "direction": "horizontal",
2217
+ "gap": "md",
2218
+ "justify": "between",
2219
+ "type": "stack"
1937
2220
  },
1938
2221
  {
2222
+ "align": "center",
1939
2223
  "children": [
1940
2224
  {
1941
2225
  "action": "INSERT_VALUE",
2226
+ "icon": "plus",
1942
2227
  "label": "Insert",
1943
2228
  "type": "button",
1944
2229
  "variant": "primary"
@@ -1951,36 +2236,67 @@
1951
2236
  },
1952
2237
  {
1953
2238
  "action": "RUN_TRAVERSAL",
2239
+ "icon": "step-forward",
1954
2240
  "label": "Traverse",
1955
2241
  "type": "button",
1956
2242
  "variant": "secondary"
1957
2243
  },
1958
- {
1959
- "action": "TOGGLE_RUN",
1960
- "label": [
1961
- "if",
1962
- "@entity.running",
1963
- "Pause",
1964
- "Run"
1965
- ],
1966
- "type": "button",
1967
- "variant": "secondary"
1968
- },
2244
+ [
2245
+ "if",
2246
+ "@entity.running",
2247
+ {
2248
+ "action": "TOGGLE_RUN",
2249
+ "aria-pressed": "true",
2250
+ "icon": "pause",
2251
+ "label": "Pause",
2252
+ "type": "button",
2253
+ "variant": "secondary"
2254
+ },
2255
+ {
2256
+ "action": "TOGGLE_RUN",
2257
+ "aria-pressed": "false",
2258
+ "icon": "play",
2259
+ "label": "Run",
2260
+ "type": "button",
2261
+ "variant": "secondary"
2262
+ }
2263
+ ],
1969
2264
  {
1970
2265
  "action": "RESET",
2266
+ "icon": "rotate-ccw",
1971
2267
  "label": "Reset",
1972
2268
  "type": "button",
1973
2269
  "variant": "ghost"
2270
+ },
2271
+ {
2272
+ "color": "muted",
2273
+ "content": [
2274
+ "str/concat",
2275
+ [
2276
+ "str/concat",
2277
+ "",
2278
+ "@entity.count"
2279
+ ],
2280
+ " nodes"
2281
+ ],
2282
+ "type": "typography",
2283
+ "variant": "caption"
1974
2284
  }
1975
2285
  ],
1976
2286
  "direction": "horizontal",
1977
2287
  "gap": "sm",
1978
- "type": "stack"
2288
+ "type": "stack",
2289
+ "wrap": true
1979
2290
  },
1980
2291
  {
1981
2292
  "backgroundColor": "@config.backgroundColor",
1982
2293
  "edges": "@entity.edges",
1983
2294
  "height": "@config.height",
2295
+ "keyMap": {
2296
+ "ArrowRight": "RUN_TRAVERSAL",
2297
+ "KeyR": "RESET",
2298
+ "Space": "TOGGLE_RUN"
2299
+ },
1984
2300
  "layout": "tree",
1985
2301
  "nodes": "@entity.nodes",
1986
2302
  "root": "n0",
@@ -2257,14 +2573,72 @@
2257
2573
  {
2258
2574
  "children": [
2259
2575
  {
2260
- "content": "@entity.title",
2261
- "type": "typography",
2262
- "variant": "h4"
2576
+ "align": "start",
2577
+ "children": [
2578
+ {
2579
+ "children": [
2580
+ {
2581
+ "content": "@entity.title",
2582
+ "type": "typography",
2583
+ "variant": "h4"
2584
+ },
2585
+ [
2586
+ "if",
2587
+ [
2588
+ "==",
2589
+ "@config.summary",
2590
+ ""
2591
+ ],
2592
+ null,
2593
+ {
2594
+ "color": "muted",
2595
+ "content": "@config.summary",
2596
+ "type": "typography",
2597
+ "variant": "body2"
2598
+ }
2599
+ ]
2600
+ ],
2601
+ "direction": "vertical",
2602
+ "gap": "xs",
2603
+ "type": "stack"
2604
+ },
2605
+ {
2606
+ "label": [
2607
+ "if",
2608
+ "@entity.traversing",
2609
+ "Traversing",
2610
+ [
2611
+ "if",
2612
+ "@entity.running",
2613
+ "Auto-stepping",
2614
+ "Building"
2615
+ ]
2616
+ ],
2617
+ "type": "badge",
2618
+ "variant": [
2619
+ "if",
2620
+ "@entity.traversing",
2621
+ "success",
2622
+ [
2623
+ "if",
2624
+ "@entity.running",
2625
+ "primary",
2626
+ "neutral"
2627
+ ]
2628
+ ]
2629
+ }
2630
+ ],
2631
+ "direction": "horizontal",
2632
+ "gap": "md",
2633
+ "justify": "between",
2634
+ "type": "stack"
2263
2635
  },
2264
2636
  {
2637
+ "align": "center",
2265
2638
  "children": [
2266
2639
  {
2267
2640
  "action": "INSERT_VALUE",
2641
+ "icon": "plus",
2268
2642
  "label": "Insert",
2269
2643
  "type": "button",
2270
2644
  "variant": "primary"
@@ -2277,36 +2651,67 @@
2277
2651
  },
2278
2652
  {
2279
2653
  "action": "RUN_TRAVERSAL",
2654
+ "icon": "step-forward",
2280
2655
  "label": "Traverse",
2281
2656
  "type": "button",
2282
2657
  "variant": "secondary"
2283
2658
  },
2284
- {
2285
- "action": "TOGGLE_RUN",
2286
- "label": [
2287
- "if",
2288
- "@entity.running",
2289
- "Pause",
2290
- "Run"
2291
- ],
2292
- "type": "button",
2293
- "variant": "secondary"
2294
- },
2659
+ [
2660
+ "if",
2661
+ "@entity.running",
2662
+ {
2663
+ "action": "TOGGLE_RUN",
2664
+ "aria-pressed": "true",
2665
+ "icon": "pause",
2666
+ "label": "Pause",
2667
+ "type": "button",
2668
+ "variant": "secondary"
2669
+ },
2670
+ {
2671
+ "action": "TOGGLE_RUN",
2672
+ "aria-pressed": "false",
2673
+ "icon": "play",
2674
+ "label": "Run",
2675
+ "type": "button",
2676
+ "variant": "secondary"
2677
+ }
2678
+ ],
2295
2679
  {
2296
2680
  "action": "RESET",
2681
+ "icon": "rotate-ccw",
2297
2682
  "label": "Reset",
2298
2683
  "type": "button",
2299
2684
  "variant": "ghost"
2685
+ },
2686
+ {
2687
+ "color": "muted",
2688
+ "content": [
2689
+ "str/concat",
2690
+ [
2691
+ "str/concat",
2692
+ "",
2693
+ "@entity.count"
2694
+ ],
2695
+ " nodes"
2696
+ ],
2697
+ "type": "typography",
2698
+ "variant": "caption"
2300
2699
  }
2301
2700
  ],
2302
2701
  "direction": "horizontal",
2303
2702
  "gap": "sm",
2304
- "type": "stack"
2703
+ "type": "stack",
2704
+ "wrap": true
2305
2705
  },
2306
2706
  {
2307
2707
  "backgroundColor": "@config.backgroundColor",
2308
2708
  "edges": "@entity.edges",
2309
2709
  "height": "@config.height",
2710
+ "keyMap": {
2711
+ "ArrowRight": "RUN_TRAVERSAL",
2712
+ "KeyR": "RESET",
2713
+ "Space": "TOGGLE_RUN"
2714
+ },
2310
2715
  "layout": "tree",
2311
2716
  "nodes": "@entity.nodes",
2312
2717
  "root": "n0",
@@ -2700,14 +3105,72 @@
2700
3105
  {
2701
3106
  "children": [
2702
3107
  {
2703
- "content": "@entity.title",
2704
- "type": "typography",
2705
- "variant": "h4"
3108
+ "align": "start",
3109
+ "children": [
3110
+ {
3111
+ "children": [
3112
+ {
3113
+ "content": "@entity.title",
3114
+ "type": "typography",
3115
+ "variant": "h4"
3116
+ },
3117
+ [
3118
+ "if",
3119
+ [
3120
+ "==",
3121
+ "@config.summary",
3122
+ ""
3123
+ ],
3124
+ null,
3125
+ {
3126
+ "color": "muted",
3127
+ "content": "@config.summary",
3128
+ "type": "typography",
3129
+ "variant": "body2"
3130
+ }
3131
+ ]
3132
+ ],
3133
+ "direction": "vertical",
3134
+ "gap": "xs",
3135
+ "type": "stack"
3136
+ },
3137
+ {
3138
+ "label": [
3139
+ "if",
3140
+ "@entity.traversing",
3141
+ "Traversing",
3142
+ [
3143
+ "if",
3144
+ "@entity.running",
3145
+ "Auto-stepping",
3146
+ "Building"
3147
+ ]
3148
+ ],
3149
+ "type": "badge",
3150
+ "variant": [
3151
+ "if",
3152
+ "@entity.traversing",
3153
+ "success",
3154
+ [
3155
+ "if",
3156
+ "@entity.running",
3157
+ "primary",
3158
+ "neutral"
3159
+ ]
3160
+ ]
3161
+ }
3162
+ ],
3163
+ "direction": "horizontal",
3164
+ "gap": "md",
3165
+ "justify": "between",
3166
+ "type": "stack"
2706
3167
  },
2707
3168
  {
3169
+ "align": "center",
2708
3170
  "children": [
2709
3171
  {
2710
3172
  "action": "INSERT_VALUE",
3173
+ "icon": "plus",
2711
3174
  "label": "Insert",
2712
3175
  "type": "button",
2713
3176
  "variant": "primary"
@@ -2720,36 +3183,67 @@
2720
3183
  },
2721
3184
  {
2722
3185
  "action": "RUN_TRAVERSAL",
3186
+ "icon": "step-forward",
2723
3187
  "label": "Traverse",
2724
3188
  "type": "button",
2725
3189
  "variant": "secondary"
2726
3190
  },
2727
- {
2728
- "action": "TOGGLE_RUN",
2729
- "label": [
2730
- "if",
2731
- "@entity.running",
2732
- "Pause",
2733
- "Run"
2734
- ],
2735
- "type": "button",
2736
- "variant": "secondary"
2737
- },
3191
+ [
3192
+ "if",
3193
+ "@entity.running",
3194
+ {
3195
+ "action": "TOGGLE_RUN",
3196
+ "aria-pressed": "true",
3197
+ "icon": "pause",
3198
+ "label": "Pause",
3199
+ "type": "button",
3200
+ "variant": "secondary"
3201
+ },
3202
+ {
3203
+ "action": "TOGGLE_RUN",
3204
+ "aria-pressed": "false",
3205
+ "icon": "play",
3206
+ "label": "Run",
3207
+ "type": "button",
3208
+ "variant": "secondary"
3209
+ }
3210
+ ],
2738
3211
  {
2739
3212
  "action": "RESET",
3213
+ "icon": "rotate-ccw",
2740
3214
  "label": "Reset",
2741
3215
  "type": "button",
2742
3216
  "variant": "ghost"
3217
+ },
3218
+ {
3219
+ "color": "muted",
3220
+ "content": [
3221
+ "str/concat",
3222
+ [
3223
+ "str/concat",
3224
+ "",
3225
+ "@entity.count"
3226
+ ],
3227
+ " nodes"
3228
+ ],
3229
+ "type": "typography",
3230
+ "variant": "caption"
2743
3231
  }
2744
3232
  ],
2745
3233
  "direction": "horizontal",
2746
3234
  "gap": "sm",
2747
- "type": "stack"
3235
+ "type": "stack",
3236
+ "wrap": true
2748
3237
  },
2749
3238
  {
2750
3239
  "backgroundColor": "@config.backgroundColor",
2751
3240
  "edges": "@entity.edges",
2752
3241
  "height": "@config.height",
3242
+ "keyMap": {
3243
+ "ArrowRight": "RUN_TRAVERSAL",
3244
+ "KeyR": "RESET",
3245
+ "Space": "TOGGLE_RUN"
3246
+ },
2753
3247
  "layout": "tree",
2754
3248
  "nodes": "@entity.nodes",
2755
3249
  "root": "n0",
@@ -2828,14 +3322,72 @@
2828
3322
  {
2829
3323
  "children": [
2830
3324
  {
2831
- "content": "@entity.title",
2832
- "type": "typography",
2833
- "variant": "h4"
3325
+ "align": "start",
3326
+ "children": [
3327
+ {
3328
+ "children": [
3329
+ {
3330
+ "content": "@entity.title",
3331
+ "type": "typography",
3332
+ "variant": "h4"
3333
+ },
3334
+ [
3335
+ "if",
3336
+ [
3337
+ "==",
3338
+ "@config.summary",
3339
+ ""
3340
+ ],
3341
+ null,
3342
+ {
3343
+ "color": "muted",
3344
+ "content": "@config.summary",
3345
+ "type": "typography",
3346
+ "variant": "body2"
3347
+ }
3348
+ ]
3349
+ ],
3350
+ "direction": "vertical",
3351
+ "gap": "xs",
3352
+ "type": "stack"
3353
+ },
3354
+ {
3355
+ "label": [
3356
+ "if",
3357
+ "@entity.traversing",
3358
+ "Traversing",
3359
+ [
3360
+ "if",
3361
+ "@entity.running",
3362
+ "Auto-stepping",
3363
+ "Building"
3364
+ ]
3365
+ ],
3366
+ "type": "badge",
3367
+ "variant": [
3368
+ "if",
3369
+ "@entity.traversing",
3370
+ "success",
3371
+ [
3372
+ "if",
3373
+ "@entity.running",
3374
+ "primary",
3375
+ "neutral"
3376
+ ]
3377
+ ]
3378
+ }
3379
+ ],
3380
+ "direction": "horizontal",
3381
+ "gap": "md",
3382
+ "justify": "between",
3383
+ "type": "stack"
2834
3384
  },
2835
3385
  {
3386
+ "align": "center",
2836
3387
  "children": [
2837
3388
  {
2838
3389
  "action": "INSERT_VALUE",
3390
+ "icon": "plus",
2839
3391
  "label": "Insert",
2840
3392
  "type": "button",
2841
3393
  "variant": "primary"
@@ -2848,36 +3400,67 @@
2848
3400
  },
2849
3401
  {
2850
3402
  "action": "RUN_TRAVERSAL",
3403
+ "icon": "step-forward",
2851
3404
  "label": "Traverse",
2852
3405
  "type": "button",
2853
3406
  "variant": "secondary"
2854
3407
  },
2855
- {
2856
- "action": "TOGGLE_RUN",
2857
- "label": [
2858
- "if",
2859
- "@entity.running",
2860
- "Pause",
2861
- "Run"
2862
- ],
2863
- "type": "button",
2864
- "variant": "secondary"
2865
- },
3408
+ [
3409
+ "if",
3410
+ "@entity.running",
3411
+ {
3412
+ "action": "TOGGLE_RUN",
3413
+ "aria-pressed": "true",
3414
+ "icon": "pause",
3415
+ "label": "Pause",
3416
+ "type": "button",
3417
+ "variant": "secondary"
3418
+ },
3419
+ {
3420
+ "action": "TOGGLE_RUN",
3421
+ "aria-pressed": "false",
3422
+ "icon": "play",
3423
+ "label": "Run",
3424
+ "type": "button",
3425
+ "variant": "secondary"
3426
+ }
3427
+ ],
2866
3428
  {
2867
3429
  "action": "RESET",
3430
+ "icon": "rotate-ccw",
2868
3431
  "label": "Reset",
2869
3432
  "type": "button",
2870
3433
  "variant": "ghost"
3434
+ },
3435
+ {
3436
+ "color": "muted",
3437
+ "content": [
3438
+ "str/concat",
3439
+ [
3440
+ "str/concat",
3441
+ "",
3442
+ "@entity.count"
3443
+ ],
3444
+ " nodes"
3445
+ ],
3446
+ "type": "typography",
3447
+ "variant": "caption"
2871
3448
  }
2872
3449
  ],
2873
3450
  "direction": "horizontal",
2874
3451
  "gap": "sm",
2875
- "type": "stack"
3452
+ "type": "stack",
3453
+ "wrap": true
2876
3454
  },
2877
3455
  {
2878
3456
  "backgroundColor": "@config.backgroundColor",
2879
3457
  "edges": "@entity.edges",
2880
3458
  "height": "@config.height",
3459
+ "keyMap": {
3460
+ "ArrowRight": "RUN_TRAVERSAL",
3461
+ "KeyR": "RESET",
3462
+ "Space": "TOGGLE_RUN"
3463
+ },
2881
3464
  "layout": "tree",
2882
3465
  "nodes": "@entity.nodes",
2883
3466
  "root": "n0",
@@ -3005,14 +3588,72 @@
3005
3588
  {
3006
3589
  "children": [
3007
3590
  {
3008
- "content": "@entity.title",
3009
- "type": "typography",
3010
- "variant": "h4"
3591
+ "align": "start",
3592
+ "children": [
3593
+ {
3594
+ "children": [
3595
+ {
3596
+ "content": "@entity.title",
3597
+ "type": "typography",
3598
+ "variant": "h4"
3599
+ },
3600
+ [
3601
+ "if",
3602
+ [
3603
+ "==",
3604
+ "@config.summary",
3605
+ ""
3606
+ ],
3607
+ null,
3608
+ {
3609
+ "color": "muted",
3610
+ "content": "@config.summary",
3611
+ "type": "typography",
3612
+ "variant": "body2"
3613
+ }
3614
+ ]
3615
+ ],
3616
+ "direction": "vertical",
3617
+ "gap": "xs",
3618
+ "type": "stack"
3619
+ },
3620
+ {
3621
+ "label": [
3622
+ "if",
3623
+ "@entity.traversing",
3624
+ "Traversing",
3625
+ [
3626
+ "if",
3627
+ "@entity.running",
3628
+ "Auto-stepping",
3629
+ "Building"
3630
+ ]
3631
+ ],
3632
+ "type": "badge",
3633
+ "variant": [
3634
+ "if",
3635
+ "@entity.traversing",
3636
+ "success",
3637
+ [
3638
+ "if",
3639
+ "@entity.running",
3640
+ "primary",
3641
+ "neutral"
3642
+ ]
3643
+ ]
3644
+ }
3645
+ ],
3646
+ "direction": "horizontal",
3647
+ "gap": "md",
3648
+ "justify": "between",
3649
+ "type": "stack"
3011
3650
  },
3012
3651
  {
3652
+ "align": "center",
3013
3653
  "children": [
3014
3654
  {
3015
3655
  "action": "INSERT_VALUE",
3656
+ "icon": "plus",
3016
3657
  "label": "Insert",
3017
3658
  "type": "button",
3018
3659
  "variant": "primary"
@@ -3025,36 +3666,67 @@
3025
3666
  },
3026
3667
  {
3027
3668
  "action": "RUN_TRAVERSAL",
3669
+ "icon": "step-forward",
3028
3670
  "label": "Traverse",
3029
3671
  "type": "button",
3030
3672
  "variant": "secondary"
3031
3673
  },
3032
- {
3033
- "action": "TOGGLE_RUN",
3034
- "label": [
3035
- "if",
3036
- "@entity.running",
3037
- "Pause",
3038
- "Run"
3039
- ],
3040
- "type": "button",
3041
- "variant": "secondary"
3042
- },
3674
+ [
3675
+ "if",
3676
+ "@entity.running",
3677
+ {
3678
+ "action": "TOGGLE_RUN",
3679
+ "aria-pressed": "true",
3680
+ "icon": "pause",
3681
+ "label": "Pause",
3682
+ "type": "button",
3683
+ "variant": "secondary"
3684
+ },
3685
+ {
3686
+ "action": "TOGGLE_RUN",
3687
+ "aria-pressed": "false",
3688
+ "icon": "play",
3689
+ "label": "Run",
3690
+ "type": "button",
3691
+ "variant": "secondary"
3692
+ }
3693
+ ],
3043
3694
  {
3044
3695
  "action": "RESET",
3696
+ "icon": "rotate-ccw",
3045
3697
  "label": "Reset",
3046
3698
  "type": "button",
3047
3699
  "variant": "ghost"
3700
+ },
3701
+ {
3702
+ "color": "muted",
3703
+ "content": [
3704
+ "str/concat",
3705
+ [
3706
+ "str/concat",
3707
+ "",
3708
+ "@entity.count"
3709
+ ],
3710
+ " nodes"
3711
+ ],
3712
+ "type": "typography",
3713
+ "variant": "caption"
3048
3714
  }
3049
3715
  ],
3050
3716
  "direction": "horizontal",
3051
3717
  "gap": "sm",
3052
- "type": "stack"
3718
+ "type": "stack",
3719
+ "wrap": true
3053
3720
  },
3054
3721
  {
3055
3722
  "backgroundColor": "@config.backgroundColor",
3056
3723
  "edges": "@entity.edges",
3057
3724
  "height": "@config.height",
3725
+ "keyMap": {
3726
+ "ArrowRight": "RUN_TRAVERSAL",
3727
+ "KeyR": "RESET",
3728
+ "Space": "TOGGLE_RUN"
3729
+ },
3058
3730
  "layout": "tree",
3059
3731
  "nodes": "@entity.nodes",
3060
3732
  "root": "n0",
@@ -3443,14 +4115,72 @@
3443
4115
  {
3444
4116
  "children": [
3445
4117
  {
3446
- "content": "@entity.title",
3447
- "type": "typography",
3448
- "variant": "h4"
4118
+ "align": "start",
4119
+ "children": [
4120
+ {
4121
+ "children": [
4122
+ {
4123
+ "content": "@entity.title",
4124
+ "type": "typography",
4125
+ "variant": "h4"
4126
+ },
4127
+ [
4128
+ "if",
4129
+ [
4130
+ "==",
4131
+ "@config.summary",
4132
+ ""
4133
+ ],
4134
+ null,
4135
+ {
4136
+ "color": "muted",
4137
+ "content": "@config.summary",
4138
+ "type": "typography",
4139
+ "variant": "body2"
4140
+ }
4141
+ ]
4142
+ ],
4143
+ "direction": "vertical",
4144
+ "gap": "xs",
4145
+ "type": "stack"
4146
+ },
4147
+ {
4148
+ "label": [
4149
+ "if",
4150
+ "@entity.traversing",
4151
+ "Traversing",
4152
+ [
4153
+ "if",
4154
+ "@entity.running",
4155
+ "Auto-stepping",
4156
+ "Building"
4157
+ ]
4158
+ ],
4159
+ "type": "badge",
4160
+ "variant": [
4161
+ "if",
4162
+ "@entity.traversing",
4163
+ "success",
4164
+ [
4165
+ "if",
4166
+ "@entity.running",
4167
+ "primary",
4168
+ "neutral"
4169
+ ]
4170
+ ]
4171
+ }
4172
+ ],
4173
+ "direction": "horizontal",
4174
+ "gap": "md",
4175
+ "justify": "between",
4176
+ "type": "stack"
3449
4177
  },
3450
4178
  {
4179
+ "align": "center",
3451
4180
  "children": [
3452
4181
  {
3453
4182
  "action": "INSERT_VALUE",
4183
+ "icon": "plus",
3454
4184
  "label": "Insert",
3455
4185
  "type": "button",
3456
4186
  "variant": "primary"
@@ -3463,36 +4193,67 @@
3463
4193
  },
3464
4194
  {
3465
4195
  "action": "RUN_TRAVERSAL",
4196
+ "icon": "step-forward",
3466
4197
  "label": "Traverse",
3467
4198
  "type": "button",
3468
4199
  "variant": "secondary"
3469
4200
  },
3470
- {
3471
- "action": "TOGGLE_RUN",
3472
- "label": [
3473
- "if",
3474
- "@entity.running",
3475
- "Pause",
3476
- "Run"
3477
- ],
3478
- "type": "button",
3479
- "variant": "secondary"
3480
- },
4201
+ [
4202
+ "if",
4203
+ "@entity.running",
4204
+ {
4205
+ "action": "TOGGLE_RUN",
4206
+ "aria-pressed": "true",
4207
+ "icon": "pause",
4208
+ "label": "Pause",
4209
+ "type": "button",
4210
+ "variant": "secondary"
4211
+ },
4212
+ {
4213
+ "action": "TOGGLE_RUN",
4214
+ "aria-pressed": "false",
4215
+ "icon": "play",
4216
+ "label": "Run",
4217
+ "type": "button",
4218
+ "variant": "secondary"
4219
+ }
4220
+ ],
3481
4221
  {
3482
4222
  "action": "RESET",
4223
+ "icon": "rotate-ccw",
3483
4224
  "label": "Reset",
3484
4225
  "type": "button",
3485
4226
  "variant": "ghost"
4227
+ },
4228
+ {
4229
+ "color": "muted",
4230
+ "content": [
4231
+ "str/concat",
4232
+ [
4233
+ "str/concat",
4234
+ "",
4235
+ "@entity.count"
4236
+ ],
4237
+ " nodes"
4238
+ ],
4239
+ "type": "typography",
4240
+ "variant": "caption"
3486
4241
  }
3487
4242
  ],
3488
4243
  "direction": "horizontal",
3489
4244
  "gap": "sm",
3490
- "type": "stack"
4245
+ "type": "stack",
4246
+ "wrap": true
3491
4247
  },
3492
4248
  {
3493
4249
  "backgroundColor": "@config.backgroundColor",
3494
4250
  "edges": "@entity.edges",
3495
4251
  "height": "@config.height",
4252
+ "keyMap": {
4253
+ "ArrowRight": "RUN_TRAVERSAL",
4254
+ "KeyR": "RESET",
4255
+ "Space": "TOGGLE_RUN"
4256
+ },
3496
4257
  "layout": "tree",
3497
4258
  "nodes": "@entity.nodes",
3498
4259
  "root": "n0",