@almadar/std 16.173.0 → 16.174.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 (203) hide show
  1. package/behaviors/lolo/infra/atoms/std-cross-reference.lolo +2 -4
  2. package/behaviors/lolo/ui/core/atoms/std-board.lolo +5 -9
  3. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +8 -1
  4. package/behaviors/lolo/ui/core/atoms/std-esign-flow.lolo +2 -2
  5. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +3 -7
  6. package/behaviors/lolo/ui/core/atoms/std-form-advanced.lolo +1 -1
  7. package/behaviors/lolo/ui/core/atoms/std-image-upload-multi.lolo +1 -1
  8. package/behaviors/lolo/ui/core/atoms/std-list.lolo +3 -3
  9. package/behaviors/lolo/ui/core/atoms/std-modal.lolo +2 -2
  10. package/behaviors/lolo/ui/core/atoms/std-multi-party-flow.lolo +2 -4
  11. package/behaviors/lolo/ui/core/atoms/std-rating-review.lolo +5 -13
  12. package/behaviors/lolo/ui/core/atoms/std-recurrence.lolo +3 -7
  13. package/behaviors/lolo/ui/core/atoms/std-saved-search.lolo +1 -1
  14. package/behaviors/lolo/ui/core/atoms/std-signature-capture.lolo +2 -2
  15. package/behaviors/lolo/ui/core/atoms/std-step-flow.lolo +2 -4
  16. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +1 -1
  17. package/behaviors/lolo/ui/core/atoms/std-thread.lolo +2 -2
  18. package/behaviors/lolo/ui/core/atoms/std-vote.lolo +2 -2
  19. package/behaviors/lolo/ui/core/atoms/std-wizard.lolo +3 -7
  20. package/behaviors/lolo/ui/core/atoms/ui-atlas-image.lolo +1 -1
  21. package/behaviors/lolo/ui/core/atoms/ui-atlas-panel.lolo +1 -1
  22. package/behaviors/lolo/ui/core/atoms/ui-center.lolo +1 -1
  23. package/behaviors/lolo/ui/core/atoms/ui-hstack.lolo +1 -1
  24. package/behaviors/lolo/ui/core/atoms/ui-icon.lolo +1 -1
  25. package/behaviors/lolo/ui/core/atoms/ui-stack.lolo +1 -1
  26. package/behaviors/lolo/ui/core/atoms/ui-typography.lolo +1 -1
  27. package/behaviors/lolo/ui/core/atoms/ui-vstack.lolo +1 -1
  28. package/behaviors/lolo/ui/core/molecules/ui-content-renderer.lolo +1 -1
  29. package/behaviors/lolo/ui/core/molecules/ui-form-layout.lolo +1 -1
  30. package/behaviors/lolo/ui/core/molecules/ui-grid.lolo +1 -1
  31. package/behaviors/lolo/ui/core/organisms/ui-chat-bar.lolo +1 -1
  32. package/behaviors/lolo/ui/core/organisms/ui-dashboard-grid.lolo +1 -1
  33. package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +1 -1
  34. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +1 -1
  35. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +1 -1
  36. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +1 -1
  37. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +9 -3
  38. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +9 -3
  39. package/behaviors/lolo/ui/core/organisms/ui-master-detail.lolo +1 -1
  40. package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +1 -1
  41. package/behaviors/lolo/ui/core/organisms/ui-segment-renderer.lolo +7 -1
  42. package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +1 -1
  43. package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +1 -1
  44. package/behaviors/lolo/ui/game/atoms/ui-action-tile.lolo +1 -1
  45. package/behaviors/lolo/ui/game/atoms/ui-draw-shape-layer.lolo +41 -9
  46. package/behaviors/lolo/ui/game/atoms/ui-draw-shape.lolo +40 -8
  47. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite-layer.lolo +13 -3
  48. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +12 -2
  49. package/behaviors/lolo/ui/game/atoms/ui-draw-text-layer.lolo +3 -3
  50. package/behaviors/lolo/ui/game/atoms/ui-draw-text.lolo +2 -2
  51. package/behaviors/lolo/ui/game/organisms/std-tactics-board-3d.lolo +32 -2
  52. package/behaviors/lolo/ui/learning/atoms/std-learn-classify.lolo +1 -1
  53. package/behaviors/lolo/ui/learning/atoms/std-learn-compare.lolo +397 -0
  54. package/behaviors/lolo/ui/learning/atoms/std-learn-coupled-sim.lolo +537 -0
  55. package/behaviors/lolo/ui/learning/atoms/std-learn-estimate.lolo +419 -0
  56. package/behaviors/lolo/ui/learning/atoms/std-learn-goal-seek.lolo +591 -0
  57. package/behaviors/lolo/ui/learning/atoms/std-learn-grid-sim.lolo +425 -0
  58. package/behaviors/lolo/ui/learning/atoms/std-learn-hotspot.lolo +398 -0
  59. package/behaviors/lolo/ui/learning/atoms/std-learn-measure.lolo +325 -0
  60. package/behaviors/lolo/ui/learning/atoms/std-learn-perturb.lolo +494 -0
  61. package/behaviors/lolo/ui/learning/atoms/std-learn-predict.lolo +408 -0
  62. package/behaviors/lolo/ui/learning/atoms/std-learn-scenario.lolo +307 -0
  63. package/behaviors/lolo/ui/learning/atoms/std-learn-sim-3d.lolo +318 -0
  64. package/behaviors/lolo/ui/learning/atoms/std-learn-speed-drill.lolo +336 -0
  65. package/behaviors/lolo/ui/learning/atoms/std-learn-tour-3d.lolo +380 -0
  66. package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +43 -4
  67. package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +41 -4
  68. package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +43 -4
  69. package/behaviors/lolo/ui/marketing/organisms/ui-book-viewer.lolo +1 -1
  70. package/behaviors/lolo/ui/marketing/organisms/ui-case-study-organism.lolo +1 -1
  71. package/behaviors/lolo/ui/marketing/organisms/ui-feature-grid-organism.lolo +1 -1
  72. package/behaviors/lolo/ui/marketing/organisms/ui-hero-organism.lolo +1 -1
  73. package/behaviors/lolo/ui/marketing/organisms/ui-pricing-organism.lolo +1 -1
  74. package/behaviors/lolo/ui/marketing/organisms/ui-showcase-organism.lolo +1 -1
  75. package/behaviors/lolo/ui/marketing/organisms/ui-stats-organism.lolo +1 -1
  76. package/behaviors/lolo/ui/marketing/organisms/ui-step-flow-organism.lolo +1 -1
  77. package/behaviors/lolo/ui/marketing/organisms/ui-team-organism.lolo +1 -1
  78. package/behaviors/registry/agent/atoms/std-agent-session.orb +22 -1
  79. package/behaviors/registry/agent/atoms/std-agent-tool-call.orb +38 -2
  80. package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +38 -2
  81. package/behaviors/registry/agent/organisms/std-agent-rabit.orb +23 -1
  82. package/behaviors/registry/infra/atoms/std-approval-gate.orb +8 -16
  83. package/behaviors/registry/infra/atoms/std-cache-aside.orb +31 -62
  84. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +16 -32
  85. package/behaviors/registry/infra/atoms/std-cross-reference.orb +32 -4
  86. package/behaviors/registry/infra/atoms/std-data-erasure.orb +8 -16
  87. package/behaviors/registry/infra/atoms/std-mod-queue.orb +8 -16
  88. package/behaviors/registry/infra/atoms/std-rate-limiter.orb +14 -28
  89. package/behaviors/registry/infra/atoms/std-row-access-control.orb +30 -2
  90. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +1 -2
  91. package/behaviors/registry/ui/core/atoms/std-board.orb +19 -5
  92. package/behaviors/registry/ui/core/atoms/std-browse.orb +29 -7
  93. package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +1 -2
  94. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +3 -5
  95. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +3 -6
  96. package/behaviors/registry/ui/core/atoms/std-event-log.orb +17 -3
  97. package/behaviors/registry/ui/core/atoms/std-export.orb +2 -4
  98. package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +1 -1
  99. package/behaviors/registry/ui/core/atoms/std-gallery.orb +9 -18
  100. package/behaviors/registry/ui/core/atoms/std-graphs.orb +15 -1
  101. package/behaviors/registry/ui/core/atoms/std-import.orb +2 -4
  102. package/behaviors/registry/ui/core/atoms/std-list.orb +4 -6
  103. package/behaviors/registry/ui/core/atoms/std-modal.orb +2 -2
  104. package/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +16 -2
  105. package/behaviors/registry/ui/core/atoms/std-pagination.orb +15 -1
  106. package/behaviors/registry/ui/core/atoms/std-rating-review.orb +19 -5
  107. package/behaviors/registry/ui/core/atoms/std-recurrence.orb +17 -3
  108. package/behaviors/registry/ui/core/atoms/std-rich-editor.orb +15 -1
  109. package/behaviors/registry/ui/core/atoms/std-scatter.orb +15 -1
  110. package/behaviors/registry/ui/core/atoms/std-signature-capture.orb +2 -2
  111. package/behaviors/registry/ui/core/atoms/std-stats.orb +15 -1
  112. package/behaviors/registry/ui/core/atoms/std-step-flow.orb +16 -2
  113. package/behaviors/registry/ui/core/atoms/std-thread.orb +2 -2
  114. package/behaviors/registry/ui/core/atoms/std-vote.orb +2 -2
  115. package/behaviors/registry/ui/core/atoms/std-wizard.orb +17 -3
  116. package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +4 -1
  117. package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +4 -1
  118. package/behaviors/registry/ui/core/atoms/ui-center.orb +4 -1
  119. package/behaviors/registry/ui/core/atoms/ui-hstack.orb +4 -1
  120. package/behaviors/registry/ui/core/atoms/ui-icon.orb +4 -1
  121. package/behaviors/registry/ui/core/atoms/ui-stack.orb +4 -1
  122. package/behaviors/registry/ui/core/atoms/ui-typography.orb +4 -1
  123. package/behaviors/registry/ui/core/atoms/ui-vstack.orb +4 -1
  124. package/behaviors/registry/ui/core/molecules/ui-accordion.orb +3 -3
  125. package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +4 -1
  126. package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +4 -1
  127. package/behaviors/registry/ui/core/molecules/ui-grid.orb +4 -1
  128. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +2 -2
  129. package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +1 -1
  130. package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +4 -1
  131. package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +5 -2
  132. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +5 -2
  133. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +4 -1
  134. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +4 -1
  135. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +4 -1
  136. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +34 -2
  137. package/behaviors/registry/ui/core/organisms/ui-form.orb +34 -2
  138. package/behaviors/registry/ui/core/organisms/ui-master-detail.orb +4 -1
  139. package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +4 -1
  140. package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +24 -2
  141. package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +4 -1
  142. package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +4 -1
  143. package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +1 -1
  144. package/behaviors/registry/ui/core/organisms/ui-ui-slot-renderer.orb +1 -1
  145. package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +35 -1
  146. package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +4 -1
  147. package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +183 -13
  148. package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +104 -9
  149. package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +56 -2
  150. package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +36 -4
  151. package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +21 -2
  152. package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +19 -4
  153. package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +173 -2
  154. package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1 -1
  155. package/behaviors/registry/ui/learning/atoms/std-learn-compare.orb +2814 -0
  156. package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +3183 -0
  157. package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +2394 -0
  158. package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +3951 -0
  159. package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +3458 -0
  160. package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +2646 -0
  161. package/behaviors/registry/ui/learning/atoms/std-learn-measure.orb +1979 -0
  162. package/behaviors/registry/ui/learning/atoms/std-learn-perturb.orb +2994 -0
  163. package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +2682 -0
  164. package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +1842 -0
  165. package/behaviors/registry/ui/learning/atoms/std-learn-sim-3d.orb +1648 -0
  166. package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +2307 -0
  167. package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +2947 -0
  168. package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +173 -4
  169. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +267 -7
  170. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +263 -8
  171. package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +116 -1
  172. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +200 -4
  173. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +264 -7
  174. package/behaviors/registry/ui/marketing/atoms/std-marketing-article.orb +1 -2
  175. package/behaviors/registry/ui/marketing/atoms/std-marketing-footer.orb +1 -2
  176. package/behaviors/registry/ui/marketing/atoms/std-marketing-split.orb +1 -2
  177. package/behaviors/registry/ui/marketing/atoms/std-marketing-stats.orb +1 -2
  178. package/behaviors/registry/ui/marketing/atoms/std-marketing-steps.orb +1 -2
  179. package/behaviors/registry/ui/marketing/atoms/std-marketing-team.orb +1 -2
  180. package/behaviors/registry/ui/marketing/organisms/ui-book-viewer.orb +4 -1
  181. package/behaviors/registry/ui/marketing/organisms/ui-case-study-organism.orb +4 -1
  182. package/behaviors/registry/ui/marketing/organisms/ui-feature-grid-organism.orb +4 -1
  183. package/behaviors/registry/ui/marketing/organisms/ui-hero-organism.orb +4 -1
  184. package/behaviors/registry/ui/marketing/organisms/ui-pricing-organism.orb +4 -1
  185. package/behaviors/registry/ui/marketing/organisms/ui-showcase-organism.orb +4 -1
  186. package/behaviors/registry/ui/marketing/organisms/ui-stats-organism.orb +4 -1
  187. package/behaviors/registry/ui/marketing/organisms/ui-step-flow-organism.orb +4 -1
  188. package/behaviors/registry/ui/marketing/organisms/ui-team-organism.orb +4 -1
  189. package/dist/behaviors/exports-reader.js +3440 -2189
  190. package/dist/behaviors/functions/index.d.ts +1751 -154
  191. package/dist/behaviors/functions/index.js +3402 -2190
  192. package/dist/behaviors/index.d.ts +1 -1
  193. package/dist/behaviors/index.js +3441 -2190
  194. package/dist/behaviors/query.js +3440 -2189
  195. package/dist/behaviors-embeddings.hash.json +3 -3
  196. package/dist/behaviors-embeddings.json +230 -178
  197. package/dist/behaviors-registry.json +4397 -171
  198. package/dist/index.d.ts +1 -1
  199. package/dist/index.js +3441 -2190
  200. package/dist/knob-embeddings.hash.json +3 -3
  201. package/dist/knob-embeddings.json +1 -1
  202. package/dist/registry/factory-signatures.json +1 -1
  203. package/package.json +2 -2
@@ -0,0 +1,2646 @@
1
+ {
2
+ "description": "Generic spatial tap-to-identify instrument — a config-declared roster of labeled hotspots (id, label, x, y, radius, color) renders on a learning-canvas, and a config-declared prompt roster asks the learner to tap the right part directly on the canvas: a first-try hit scores, a miss names what was actually tapped and invites another try, and a hit reveals the part's explanation with a highlight ring before advancing. All vocabulary is config-declared, so the same mechanism serves any labeled scene: organs on a cell, countries on a sketch map, components on a circuit, bones on a skeleton. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.",
3
+ "ledger": {
4
+ "entries": {
5
+ "ent_01M075812DMZ899JNV332AQEFM": {
6
+ "bakedName": "HotspotScene",
7
+ "curName": "HotspotScene",
8
+ "id": "ent_01M075812DMZ899JNV332AQEFM",
9
+ "kind": "entity",
10
+ "owner": "workspace",
11
+ "renames": []
12
+ },
13
+ "evt_01M075812D7NCEX7G3TP34MXBS": {
14
+ "bakedName": "INIT",
15
+ "curName": "INIT",
16
+ "id": "evt_01M075812D7NCEX7G3TP34MXBS",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
20
+ "renames": []
21
+ },
22
+ "evt_01M075812J4681FR82RCJGH1GD": {
23
+ "bakedName": "ROUND_RESTARTED",
24
+ "curName": "ROUND_RESTARTED",
25
+ "id": "evt_01M075812J4681FR82RCJGH1GD",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
29
+ "renames": []
30
+ },
31
+ "evt_01M075812J4KYMXGSBR18KZAQ2": {
32
+ "bakedName": "RETRY",
33
+ "curName": "RETRY",
34
+ "id": "evt_01M075812J4KYMXGSBR18KZAQ2",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
38
+ "renames": []
39
+ },
40
+ "evt_01M075812JEJR3YKZ3EVCXYZ6W": {
41
+ "bakedName": "TAP_SHAPE",
42
+ "curName": "TAP_SHAPE",
43
+ "id": "evt_01M075812JEJR3YKZ3EVCXYZ6W",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
47
+ "renames": []
48
+ },
49
+ "evt_01M075812JEVQN24SR66H3H7R8": {
50
+ "bakedName": "PROMPT_ADVANCED",
51
+ "curName": "PROMPT_ADVANCED",
52
+ "id": "evt_01M075812JEVQN24SR66H3H7R8",
53
+ "kind": "event",
54
+ "owner": "workspace",
55
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
56
+ "renames": []
57
+ },
58
+ "evt_01M075812JS07BQ7EX9X3ATZGW": {
59
+ "bakedName": "TAP_JUDGED",
60
+ "curName": "TAP_JUDGED",
61
+ "id": "evt_01M075812JS07BQ7EX9X3ATZGW",
62
+ "kind": "event",
63
+ "owner": "workspace",
64
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
65
+ "renames": []
66
+ },
67
+ "evt_01M075812JWBR49NJTVRXS2MWY": {
68
+ "bakedName": "MODE_SELECTED",
69
+ "curName": "MODE_SELECTED",
70
+ "id": "evt_01M075812JWBR49NJTVRXS2MWY",
71
+ "kind": "event",
72
+ "owner": "workspace",
73
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
74
+ "renames": []
75
+ },
76
+ "evt_01M075812JZ16GNXVCQ09WRT43": {
77
+ "bakedName": "NEXT",
78
+ "curName": "NEXT",
79
+ "id": "evt_01M075812JZ16GNXVCQ09WRT43",
80
+ "kind": "event",
81
+ "owner": "workspace",
82
+ "parent": "trt_01M075812DYQGS8RJE0J3FWESF",
83
+ "renames": []
84
+ },
85
+ "orb_01M075812DM89TK888P4V0J9PT": {
86
+ "bakedName": "HotspotOrbital",
87
+ "curName": "HotspotOrbital",
88
+ "id": "orb_01M075812DM89TK888P4V0J9PT",
89
+ "kind": "orbital",
90
+ "owner": "workspace",
91
+ "renames": []
92
+ },
93
+ "pag_01M075812KZ2K8E3FJ0ZNXMKGH": {
94
+ "bakedName": "HotspotPage",
95
+ "curName": "HotspotPage",
96
+ "id": "pag_01M075812KZ2K8E3FJ0ZNXMKGH",
97
+ "kind": "page",
98
+ "owner": "workspace",
99
+ "renames": []
100
+ },
101
+ "trt_01M075812DYQGS8RJE0J3FWESF": {
102
+ "bakedName": "HotspotSim",
103
+ "curName": "HotspotSim",
104
+ "id": "trt_01M075812DYQGS8RJE0J3FWESF",
105
+ "kind": "trait",
106
+ "owner": "workspace",
107
+ "renames": []
108
+ }
109
+ },
110
+ "schemaVersion": 1
111
+ },
112
+ "name": "std-learn-hotspot",
113
+ "orbitals": [
114
+ {
115
+ "entity": {
116
+ "fields": [
117
+ {
118
+ "name": "id",
119
+ "required": true,
120
+ "type": "string"
121
+ },
122
+ {
123
+ "default": false,
124
+ "name": "active",
125
+ "type": "boolean"
126
+ },
127
+ {
128
+ "name": "title",
129
+ "type": "string"
130
+ },
131
+ {
132
+ "default": 0.0,
133
+ "name": "promptIndex",
134
+ "type": "number"
135
+ },
136
+ {
137
+ "default": 0.0,
138
+ "name": "totalPrompts",
139
+ "type": "number"
140
+ },
141
+ {
142
+ "default": 0.0,
143
+ "name": "score",
144
+ "type": "number"
145
+ },
146
+ {
147
+ "default": 0.0,
148
+ "name": "tries",
149
+ "type": "number"
150
+ },
151
+ {
152
+ "default": false,
153
+ "name": "found",
154
+ "type": "boolean"
155
+ },
156
+ {
157
+ "default": false,
158
+ "name": "done",
159
+ "type": "boolean"
160
+ },
161
+ {
162
+ "name": "promptText",
163
+ "type": "string"
164
+ },
165
+ {
166
+ "name": "targetId",
167
+ "type": "string"
168
+ },
169
+ {
170
+ "name": "explanation",
171
+ "type": "string"
172
+ },
173
+ {
174
+ "name": "feedback",
175
+ "type": "string"
176
+ },
177
+ {
178
+ "items": {
179
+ "properties": {
180
+ "align": {
181
+ "name": "align",
182
+ "required": false,
183
+ "type": "string",
184
+ "values": [
185
+ "left",
186
+ "center",
187
+ "right"
188
+ ]
189
+ },
190
+ "color": {
191
+ "name": "color",
192
+ "required": true,
193
+ "type": "string"
194
+ },
195
+ "fill": {
196
+ "name": "fill",
197
+ "required": false,
198
+ "type": "string"
199
+ },
200
+ "fontSize": {
201
+ "name": "fontSize",
202
+ "required": false,
203
+ "type": "number"
204
+ },
205
+ "id": {
206
+ "name": "id",
207
+ "required": true,
208
+ "type": "string"
209
+ },
210
+ "lineWidth": {
211
+ "name": "lineWidth",
212
+ "required": false,
213
+ "type": "number"
214
+ },
215
+ "radius": {
216
+ "name": "radius",
217
+ "required": false,
218
+ "type": "number"
219
+ },
220
+ "text": {
221
+ "name": "text",
222
+ "required": false,
223
+ "type": "string"
224
+ },
225
+ "type": {
226
+ "name": "type",
227
+ "required": true,
228
+ "type": "string",
229
+ "values": [
230
+ "circle",
231
+ "text"
232
+ ]
233
+ },
234
+ "x": {
235
+ "name": "x",
236
+ "required": true,
237
+ "type": "number"
238
+ },
239
+ "y": {
240
+ "name": "y",
241
+ "required": true,
242
+ "type": "number"
243
+ }
244
+ },
245
+ "type": "object"
246
+ },
247
+ "name": "canvasShapes",
248
+ "type": "array"
249
+ },
250
+ {
251
+ "items": {
252
+ "type": "node"
253
+ },
254
+ "name": "view",
255
+ "type": "array"
256
+ }
257
+ ],
258
+ "id": "ent_01M075812DMZ899JNV332AQEFM",
259
+ "name": "HotspotScene",
260
+ "persistence": "runtime"
261
+ },
262
+ "id": "orb_01M075812DM89TK888P4V0J9PT",
263
+ "name": "HotspotOrbital",
264
+ "pages": [
265
+ {
266
+ "id": "pag_01M075812KZ2K8E3FJ0ZNXMKGH",
267
+ "name": "HotspotPage",
268
+ "path": "/learn-hotspot",
269
+ "traits": [
270
+ {
271
+ "ref": "HotspotSim",
272
+ "refId": "trt_01M075812DYQGS8RJE0J3FWESF"
273
+ }
274
+ ]
275
+ }
276
+ ],
277
+ "traits": [
278
+ {
279
+ "category": "interaction",
280
+ "config": {
281
+ "backgroundColor": {
282
+ "default": "#f8fafc",
283
+ "label": "Background Color",
284
+ "tier": "presentation",
285
+ "type": "string"
286
+ },
287
+ "height": {
288
+ "default": 380.0,
289
+ "label": "Height",
290
+ "tier": "presentation",
291
+ "type": "number"
292
+ },
293
+ "hitColor": {
294
+ "default": "#16a34a",
295
+ "description": "Color of the highlight ring drawn around the target once found.",
296
+ "label": "Hit Ring Color",
297
+ "tier": "presentation",
298
+ "type": "string"
299
+ },
300
+ "matchMode": {
301
+ "default": "",
302
+ "description": "When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.",
303
+ "label": "Match Mode",
304
+ "tier": "presentation",
305
+ "type": "string"
306
+ },
307
+ "nextLabel": {
308
+ "default": "Next",
309
+ "label": "Next Label",
310
+ "tier": "presentation",
311
+ "type": "string"
312
+ },
313
+ "prompts": {
314
+ "default": [
315
+ {
316
+ "explanation": "The nucleus holds the DNA.",
317
+ "prompt": "Tap the part that stores the cell's genetic material.",
318
+ "targetId": "nucleus"
319
+ },
320
+ {
321
+ "explanation": "Mitochondria run cellular respiration.",
322
+ "prompt": "Tap the part that produces the cell's energy.",
323
+ "targetId": "mitochondrion"
324
+ },
325
+ {
326
+ "explanation": "Ribosomes translate mRNA into protein.",
327
+ "prompt": "Tap the part that builds proteins.",
328
+ "targetId": "ribosome"
329
+ }
330
+ ],
331
+ "description": "The question roster; each prompt names a target hotspot id and an explanation revealed on a hit.",
332
+ "items": {
333
+ "properties": {
334
+ "explanation": {
335
+ "name": "explanation",
336
+ "required": false,
337
+ "type": "string"
338
+ },
339
+ "prompt": {
340
+ "name": "prompt",
341
+ "required": true,
342
+ "type": "string"
343
+ },
344
+ "targetId": {
345
+ "name": "targetId",
346
+ "required": true,
347
+ "type": "string"
348
+ }
349
+ },
350
+ "type": "object"
351
+ },
352
+ "label": "Prompts",
353
+ "tier": "domain",
354
+ "type": "[HotspotPrompt]"
355
+ },
356
+ "retryLabel": {
357
+ "default": "Try Again",
358
+ "label": "Retry Label",
359
+ "tier": "presentation",
360
+ "type": "string"
361
+ },
362
+ "shapes": {
363
+ "default": [
364
+ {
365
+ "color": "#8b5cf6",
366
+ "id": "nucleus",
367
+ "label": "Nucleus",
368
+ "radius": 34.0,
369
+ "x": 300.0,
370
+ "y": 170.0
371
+ },
372
+ {
373
+ "color": "#3b82f6",
374
+ "id": "membrane",
375
+ "label": "Membrane",
376
+ "radius": 26.0,
377
+ "x": 130.0,
378
+ "y": 120.0
379
+ },
380
+ {
381
+ "color": "#f59e0b",
382
+ "id": "mitochondrion",
383
+ "label": "Mitochondrion",
384
+ "radius": 24.0,
385
+ "x": 460.0,
386
+ "y": 120.0
387
+ },
388
+ {
389
+ "color": "#16a34a",
390
+ "id": "ribosome",
391
+ "label": "Ribosome",
392
+ "radius": 18.0,
393
+ "x": 200.0,
394
+ "y": 280.0
395
+ },
396
+ {
397
+ "color": "#06b6d4",
398
+ "id": "vacuole",
399
+ "label": "Vacuole",
400
+ "radius": 28.0,
401
+ "x": 420.0,
402
+ "y": 280.0
403
+ }
404
+ ],
405
+ "description": "The labeled parts of the scene; each carries an id, display label, canvas position, radius, and color. Realizations declare their own subject's parts here.",
406
+ "items": {
407
+ "properties": {
408
+ "color": {
409
+ "name": "color",
410
+ "required": false,
411
+ "type": "string"
412
+ },
413
+ "id": {
414
+ "name": "id",
415
+ "required": true,
416
+ "type": "string"
417
+ },
418
+ "label": {
419
+ "name": "label",
420
+ "required": true,
421
+ "type": "string"
422
+ },
423
+ "radius": {
424
+ "name": "radius",
425
+ "required": false,
426
+ "type": "number"
427
+ },
428
+ "x": {
429
+ "name": "x",
430
+ "required": true,
431
+ "type": "number"
432
+ },
433
+ "y": {
434
+ "name": "y",
435
+ "required": true,
436
+ "type": "number"
437
+ }
438
+ },
439
+ "type": "object"
440
+ },
441
+ "label": "Hotspots",
442
+ "tier": "domain",
443
+ "type": "[HotspotShape]"
444
+ },
445
+ "title": {
446
+ "default": "Tap the Part",
447
+ "description": "Title shown above the canvas.",
448
+ "label": "Title",
449
+ "tier": "presentation",
450
+ "type": "string"
451
+ },
452
+ "width": {
453
+ "default": 600.0,
454
+ "label": "Width",
455
+ "tier": "presentation",
456
+ "type": "number"
457
+ }
458
+ },
459
+ "emits": [
460
+ {
461
+ "description": "The verdict of a canvas tap: whether the right part was hit, which prompt it was, and how many misses preceded it — a composed listener (coach, grader) can subscribe; a harmless no-op when the atom runs standalone.",
462
+ "event": "TAP_JUDGED",
463
+ "eventId": "evt_01M075812JS07BQ7EX9X3ATZGW",
464
+ "payloadSchema": [
465
+ {
466
+ "name": "correct",
467
+ "type": "boolean"
468
+ },
469
+ {
470
+ "name": "promptIndex",
471
+ "type": "number"
472
+ },
473
+ {
474
+ "name": "tries",
475
+ "type": "number"
476
+ }
477
+ ],
478
+ "scope": "external",
479
+ "synonyms": "hotspot, tap the part, spatial identification, point at, label the diagram",
480
+ "tier": "domain"
481
+ },
482
+ {
483
+ "description": "The learner moved to the next prompt (or completed the round) with the running first-try score.",
484
+ "event": "PROMPT_ADVANCED",
485
+ "eventId": "evt_01M075812JEVQN24SR66H3H7R8",
486
+ "payloadSchema": [
487
+ {
488
+ "name": "promptIndex",
489
+ "type": "number"
490
+ },
491
+ {
492
+ "name": "done",
493
+ "type": "boolean"
494
+ },
495
+ {
496
+ "name": "score",
497
+ "type": "number"
498
+ }
499
+ ],
500
+ "scope": "external",
501
+ "tier": "domain"
502
+ },
503
+ {
504
+ "description": "The learner restarted the round from scratch.",
505
+ "event": "ROUND_RESTARTED",
506
+ "eventId": "evt_01M075812J4681FR82RCJGH1GD",
507
+ "payloadSchema": [
508
+ {
509
+ "name": "totalPrompts",
510
+ "type": "number"
511
+ }
512
+ ],
513
+ "scope": "external",
514
+ "tier": "domain"
515
+ }
516
+ ],
517
+ "entityContract": {
518
+ "provides": [
519
+ "active",
520
+ "canvasShapes",
521
+ "done",
522
+ "explanation",
523
+ "feedback",
524
+ "found",
525
+ "promptIndex",
526
+ "promptText",
527
+ "score",
528
+ "targetId",
529
+ "title",
530
+ "totalPrompts",
531
+ "tries",
532
+ "view"
533
+ ],
534
+ "requires": []
535
+ },
536
+ "entityRebindable": true,
537
+ "entityRefIds": {
538
+ "HotspotScene": "ent_01M075812DMZ899JNV332AQEFM"
539
+ },
540
+ "id": "trt_01M075812DYQGS8RJE0J3FWESF",
541
+ "linkedEntity": "HotspotScene",
542
+ "linkedEntityId": "ent_01M075812DMZ899JNV332AQEFM",
543
+ "name": "HotspotSim",
544
+ "scope": "instance",
545
+ "stateMachine": {
546
+ "events": [
547
+ {
548
+ "id": "evt_01M075812D7NCEX7G3TP34MXBS",
549
+ "key": "INIT",
550
+ "name": "Initialize"
551
+ },
552
+ {
553
+ "description": "Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.",
554
+ "id": "evt_01M075812JWBR49NJTVRXS2MWY",
555
+ "key": "MODE_SELECTED",
556
+ "name": "Mode Selected",
557
+ "payloadSchema": [
558
+ {
559
+ "name": "mode",
560
+ "type": "string"
561
+ }
562
+ ],
563
+ "tier": "domain"
564
+ },
565
+ {
566
+ "description": "Learner tapped a shape on the canvas — the canvas callback wraps its click info as payload { id, type, index }; the id names the hotspot (or its label) and the tap is judged against the current prompt's target.",
567
+ "id": "evt_01M075812JEJR3YKZ3EVCXYZ6W",
568
+ "key": "TAP_SHAPE",
569
+ "name": "Tap Shape",
570
+ "payloadSchema": [
571
+ {
572
+ "name": "payload",
573
+ "properties": [
574
+ {
575
+ "name": "id",
576
+ "type": "string"
577
+ },
578
+ {
579
+ "name": "type",
580
+ "type": "string"
581
+ },
582
+ {
583
+ "name": "index",
584
+ "required": true,
585
+ "type": "number"
586
+ }
587
+ ],
588
+ "type": "object"
589
+ }
590
+ ],
591
+ "tier": "domain"
592
+ },
593
+ {
594
+ "description": "Learner advanced to the next prompt after finding the current target; past the last prompt this completes the round.",
595
+ "id": "evt_01M075812JZ16GNXVCQ09WRT43",
596
+ "key": "NEXT",
597
+ "name": "Next",
598
+ "tier": "domain"
599
+ },
600
+ {
601
+ "description": "Learner restarted the round from the first prompt with a cleared score.",
602
+ "id": "evt_01M075812J4KYMXGSBR18KZAQ2",
603
+ "key": "RETRY",
604
+ "name": "Retry",
605
+ "tier": "domain"
606
+ },
607
+ {
608
+ "description": "The verdict of a canvas tap: whether the right part was hit, which prompt it was, and how many misses preceded it — a composed listener (coach, grader) can subscribe; a harmless no-op when the atom runs standalone.",
609
+ "id": "evt_01M075812JS07BQ7EX9X3ATZGW",
610
+ "key": "TAP_JUDGED",
611
+ "name": "Tap Judged",
612
+ "payloadSchema": [
613
+ {
614
+ "name": "correct",
615
+ "type": "boolean"
616
+ },
617
+ {
618
+ "name": "promptIndex",
619
+ "type": "number"
620
+ },
621
+ {
622
+ "name": "tries",
623
+ "type": "number"
624
+ }
625
+ ],
626
+ "synonyms": "hotspot, tap the part, spatial identification, point at, label the diagram",
627
+ "tier": "domain"
628
+ },
629
+ {
630
+ "description": "The learner moved to the next prompt (or completed the round) with the running first-try score.",
631
+ "id": "evt_01M075812JEVQN24SR66H3H7R8",
632
+ "key": "PROMPT_ADVANCED",
633
+ "name": "Prompt Advanced",
634
+ "payloadSchema": [
635
+ {
636
+ "name": "promptIndex",
637
+ "type": "number"
638
+ },
639
+ {
640
+ "name": "done",
641
+ "type": "boolean"
642
+ },
643
+ {
644
+ "name": "score",
645
+ "type": "number"
646
+ }
647
+ ],
648
+ "tier": "domain"
649
+ },
650
+ {
651
+ "description": "The learner restarted the round from scratch.",
652
+ "id": "evt_01M075812J4681FR82RCJGH1GD",
653
+ "key": "ROUND_RESTARTED",
654
+ "name": "Round Restarted",
655
+ "payloadSchema": [
656
+ {
657
+ "name": "totalPrompts",
658
+ "type": "number"
659
+ }
660
+ ],
661
+ "tier": "domain"
662
+ }
663
+ ],
664
+ "states": [
665
+ {
666
+ "isInitial": true,
667
+ "name": "idle"
668
+ }
669
+ ],
670
+ "transitions": [
671
+ {
672
+ "effects": [
673
+ [
674
+ "let",
675
+ [
676
+ [
677
+ "first",
678
+ [
679
+ "array/nth",
680
+ "@config.prompts",
681
+ 0.0
682
+ ]
683
+ ],
684
+ [
685
+ "circles",
686
+ [
687
+ "array/map",
688
+ "@config.shapes",
689
+ [
690
+ "fn",
691
+ "s",
692
+ {
693
+ "color": [
694
+ "object/get",
695
+ "@s",
696
+ "color",
697
+ "#3b82f6"
698
+ ],
699
+ "fill": [
700
+ "object/get",
701
+ "@s",
702
+ "color",
703
+ "#3b82f6"
704
+ ],
705
+ "id": [
706
+ "object/get",
707
+ "@s",
708
+ "id"
709
+ ],
710
+ "radius": [
711
+ "object/get",
712
+ "@s",
713
+ "radius",
714
+ 22.0
715
+ ],
716
+ "type": "circle",
717
+ "x": [
718
+ "object/get",
719
+ "@s",
720
+ "x"
721
+ ],
722
+ "y": [
723
+ "object/get",
724
+ "@s",
725
+ "y"
726
+ ]
727
+ }
728
+ ]
729
+ ]
730
+ ],
731
+ [
732
+ "labels",
733
+ [
734
+ "array/map",
735
+ "@config.shapes",
736
+ [
737
+ "fn",
738
+ "s",
739
+ {
740
+ "align": "center",
741
+ "color": "#0f172a",
742
+ "fontSize": 12.0,
743
+ "id": [
744
+ "str/concat",
745
+ "label-",
746
+ [
747
+ "object/get",
748
+ "@s",
749
+ "id"
750
+ ]
751
+ ],
752
+ "text": [
753
+ "object/get",
754
+ "@s",
755
+ "label"
756
+ ],
757
+ "type": "text",
758
+ "x": [
759
+ "object/get",
760
+ "@s",
761
+ "x"
762
+ ],
763
+ "y": [
764
+ "+",
765
+ [
766
+ "object/get",
767
+ "@s",
768
+ "y"
769
+ ],
770
+ [
771
+ "object/get",
772
+ "@s",
773
+ "radius",
774
+ 22.0
775
+ ],
776
+ 14.0
777
+ ]
778
+ }
779
+ ]
780
+ ]
781
+ ]
782
+ ],
783
+ [
784
+ "do",
785
+ [
786
+ "set",
787
+ "@entity.active",
788
+ true
789
+ ],
790
+ [
791
+ "set",
792
+ "@entity.title",
793
+ "@config.title"
794
+ ],
795
+ [
796
+ "set",
797
+ "@entity.promptIndex",
798
+ 0.0
799
+ ],
800
+ [
801
+ "set",
802
+ "@entity.totalPrompts",
803
+ [
804
+ "array/len",
805
+ "@config.prompts"
806
+ ]
807
+ ],
808
+ [
809
+ "set",
810
+ "@entity.score",
811
+ 0.0
812
+ ],
813
+ [
814
+ "set",
815
+ "@entity.tries",
816
+ 0.0
817
+ ],
818
+ [
819
+ "set",
820
+ "@entity.found",
821
+ false
822
+ ],
823
+ [
824
+ "set",
825
+ "@entity.done",
826
+ false
827
+ ],
828
+ [
829
+ "set",
830
+ "@entity.promptText",
831
+ [
832
+ "object/get",
833
+ "@first",
834
+ "prompt"
835
+ ]
836
+ ],
837
+ [
838
+ "set",
839
+ "@entity.targetId",
840
+ [
841
+ "object/get",
842
+ "@first",
843
+ "targetId"
844
+ ]
845
+ ],
846
+ [
847
+ "set",
848
+ "@entity.explanation",
849
+ [
850
+ "object/get",
851
+ "@first",
852
+ "explanation",
853
+ ""
854
+ ]
855
+ ],
856
+ [
857
+ "set",
858
+ "@entity.feedback",
859
+ ""
860
+ ],
861
+ [
862
+ "set",
863
+ "@entity.canvasShapes",
864
+ [
865
+ "array/concat",
866
+ "@circles",
867
+ "@labels"
868
+ ]
869
+ ],
870
+ [
871
+ "set",
872
+ "@entity.view",
873
+ [
874
+ {
875
+ "children": [
876
+ {
877
+ "content": "@entity.promptText",
878
+ "type": "typography",
879
+ "variant": "body"
880
+ }
881
+ ],
882
+ "padding": "md",
883
+ "type": "card",
884
+ "variant": "bordered"
885
+ },
886
+ {
887
+ "animate": false,
888
+ "backgroundColor": "@config.backgroundColor",
889
+ "height": "@config.height",
890
+ "interactive": true,
891
+ "onShapeClick": "TAP_SHAPE",
892
+ "shapes": "@entity.canvasShapes",
893
+ "type": "learning-canvas",
894
+ "width": "@config.width"
895
+ },
896
+ {
897
+ "children": [
898
+ {
899
+ "content": "@entity.feedback",
900
+ "type": "typography",
901
+ "variant": "caption"
902
+ }
903
+ ],
904
+ "direction": "horizontal",
905
+ "gap": "xs",
906
+ "type": "stack"
907
+ },
908
+ {
909
+ "children": [
910
+ {
911
+ "action": "NEXT",
912
+ "disabled": [
913
+ "if",
914
+ "@entity.found",
915
+ false,
916
+ true
917
+ ],
918
+ "label": "@config.nextLabel",
919
+ "type": "button",
920
+ "variant": "primary"
921
+ }
922
+ ],
923
+ "direction": "horizontal",
924
+ "gap": "sm",
925
+ "type": "stack"
926
+ },
927
+ {
928
+ "label": "First-try score",
929
+ "max": "@entity.totalPrompts",
930
+ "type": "stat-display",
931
+ "value": "@entity.score"
932
+ }
933
+ ]
934
+ ]
935
+ ]
936
+ ],
937
+ [
938
+ "render-ui",
939
+ "main",
940
+ {
941
+ "children": [
942
+ {
943
+ "children": [
944
+ {
945
+ "content": "@entity.title",
946
+ "type": "typography",
947
+ "variant": "h4"
948
+ },
949
+ {
950
+ "label": [
951
+ "str/concat",
952
+ "Prompt ",
953
+ [
954
+ "str/concat",
955
+ "",
956
+ [
957
+ "+",
958
+ "@entity.promptIndex",
959
+ 1.0
960
+ ]
961
+ ],
962
+ " of ",
963
+ [
964
+ "str/concat",
965
+ "",
966
+ "@entity.totalPrompts"
967
+ ]
968
+ ],
969
+ "max": "@entity.totalPrompts",
970
+ "showPercentage": false,
971
+ "type": "progress-bar",
972
+ "value": [
973
+ "+",
974
+ "@entity.promptIndex",
975
+ 1.0
976
+ ]
977
+ },
978
+ {
979
+ "children": "@entity.view",
980
+ "direction": "vertical",
981
+ "gap": "md",
982
+ "type": "stack"
983
+ }
984
+ ],
985
+ "direction": "vertical",
986
+ "gap": "md",
987
+ "type": "stack"
988
+ }
989
+ ],
990
+ "padding": "md",
991
+ "type": "box"
992
+ }
993
+ ]
994
+ ],
995
+ "event": "INIT",
996
+ "eventId": "evt_01M075812D7NCEX7G3TP34MXBS",
997
+ "from": "idle",
998
+ "guard": [
999
+ "==",
1000
+ "@config.matchMode",
1001
+ ""
1002
+ ],
1003
+ "to": "idle"
1004
+ },
1005
+ {
1006
+ "effects": [
1007
+ [
1008
+ "let",
1009
+ [
1010
+ [
1011
+ "first",
1012
+ [
1013
+ "array/nth",
1014
+ "@config.prompts",
1015
+ 0.0
1016
+ ]
1017
+ ],
1018
+ [
1019
+ "circles",
1020
+ [
1021
+ "array/map",
1022
+ "@config.shapes",
1023
+ [
1024
+ "fn",
1025
+ "s",
1026
+ {
1027
+ "color": [
1028
+ "object/get",
1029
+ "@s",
1030
+ "color",
1031
+ "#3b82f6"
1032
+ ],
1033
+ "fill": [
1034
+ "object/get",
1035
+ "@s",
1036
+ "color",
1037
+ "#3b82f6"
1038
+ ],
1039
+ "id": [
1040
+ "object/get",
1041
+ "@s",
1042
+ "id"
1043
+ ],
1044
+ "radius": [
1045
+ "object/get",
1046
+ "@s",
1047
+ "radius",
1048
+ 22.0
1049
+ ],
1050
+ "type": "circle",
1051
+ "x": [
1052
+ "object/get",
1053
+ "@s",
1054
+ "x"
1055
+ ],
1056
+ "y": [
1057
+ "object/get",
1058
+ "@s",
1059
+ "y"
1060
+ ]
1061
+ }
1062
+ ]
1063
+ ]
1064
+ ],
1065
+ [
1066
+ "labels",
1067
+ [
1068
+ "array/map",
1069
+ "@config.shapes",
1070
+ [
1071
+ "fn",
1072
+ "s",
1073
+ {
1074
+ "align": "center",
1075
+ "color": "#0f172a",
1076
+ "fontSize": 12.0,
1077
+ "id": [
1078
+ "str/concat",
1079
+ "label-",
1080
+ [
1081
+ "object/get",
1082
+ "@s",
1083
+ "id"
1084
+ ]
1085
+ ],
1086
+ "text": [
1087
+ "object/get",
1088
+ "@s",
1089
+ "label"
1090
+ ],
1091
+ "type": "text",
1092
+ "x": [
1093
+ "object/get",
1094
+ "@s",
1095
+ "x"
1096
+ ],
1097
+ "y": [
1098
+ "+",
1099
+ [
1100
+ "object/get",
1101
+ "@s",
1102
+ "y"
1103
+ ],
1104
+ [
1105
+ "object/get",
1106
+ "@s",
1107
+ "radius",
1108
+ 22.0
1109
+ ],
1110
+ 14.0
1111
+ ]
1112
+ }
1113
+ ]
1114
+ ]
1115
+ ]
1116
+ ],
1117
+ [
1118
+ "do",
1119
+ [
1120
+ "set",
1121
+ "@entity.active",
1122
+ true
1123
+ ],
1124
+ [
1125
+ "set",
1126
+ "@entity.title",
1127
+ "@config.title"
1128
+ ],
1129
+ [
1130
+ "set",
1131
+ "@entity.promptIndex",
1132
+ 0.0
1133
+ ],
1134
+ [
1135
+ "set",
1136
+ "@entity.totalPrompts",
1137
+ [
1138
+ "array/len",
1139
+ "@config.prompts"
1140
+ ]
1141
+ ],
1142
+ [
1143
+ "set",
1144
+ "@entity.score",
1145
+ 0.0
1146
+ ],
1147
+ [
1148
+ "set",
1149
+ "@entity.tries",
1150
+ 0.0
1151
+ ],
1152
+ [
1153
+ "set",
1154
+ "@entity.found",
1155
+ false
1156
+ ],
1157
+ [
1158
+ "set",
1159
+ "@entity.done",
1160
+ false
1161
+ ],
1162
+ [
1163
+ "set",
1164
+ "@entity.promptText",
1165
+ [
1166
+ "object/get",
1167
+ "@first",
1168
+ "prompt"
1169
+ ]
1170
+ ],
1171
+ [
1172
+ "set",
1173
+ "@entity.targetId",
1174
+ [
1175
+ "object/get",
1176
+ "@first",
1177
+ "targetId"
1178
+ ]
1179
+ ],
1180
+ [
1181
+ "set",
1182
+ "@entity.explanation",
1183
+ [
1184
+ "object/get",
1185
+ "@first",
1186
+ "explanation",
1187
+ ""
1188
+ ]
1189
+ ],
1190
+ [
1191
+ "set",
1192
+ "@entity.feedback",
1193
+ ""
1194
+ ],
1195
+ [
1196
+ "set",
1197
+ "@entity.canvasShapes",
1198
+ [
1199
+ "array/concat",
1200
+ "@circles",
1201
+ "@labels"
1202
+ ]
1203
+ ],
1204
+ [
1205
+ "set",
1206
+ "@entity.view",
1207
+ [
1208
+ {
1209
+ "children": [
1210
+ {
1211
+ "content": "@entity.promptText",
1212
+ "type": "typography",
1213
+ "variant": "body"
1214
+ }
1215
+ ],
1216
+ "padding": "md",
1217
+ "type": "card",
1218
+ "variant": "bordered"
1219
+ },
1220
+ {
1221
+ "animate": false,
1222
+ "backgroundColor": "@config.backgroundColor",
1223
+ "height": "@config.height",
1224
+ "interactive": true,
1225
+ "onShapeClick": "TAP_SHAPE",
1226
+ "shapes": "@entity.canvasShapes",
1227
+ "type": "learning-canvas",
1228
+ "width": "@config.width"
1229
+ },
1230
+ {
1231
+ "children": [
1232
+ {
1233
+ "content": "@entity.feedback",
1234
+ "type": "typography",
1235
+ "variant": "caption"
1236
+ }
1237
+ ],
1238
+ "direction": "horizontal",
1239
+ "gap": "xs",
1240
+ "type": "stack"
1241
+ },
1242
+ {
1243
+ "children": [
1244
+ {
1245
+ "action": "NEXT",
1246
+ "disabled": [
1247
+ "if",
1248
+ "@entity.found",
1249
+ false,
1250
+ true
1251
+ ],
1252
+ "label": "@config.nextLabel",
1253
+ "type": "button",
1254
+ "variant": "primary"
1255
+ }
1256
+ ],
1257
+ "direction": "horizontal",
1258
+ "gap": "sm",
1259
+ "type": "stack"
1260
+ },
1261
+ {
1262
+ "label": "First-try score",
1263
+ "max": "@entity.totalPrompts",
1264
+ "type": "stat-display",
1265
+ "value": "@entity.score"
1266
+ }
1267
+ ]
1268
+ ]
1269
+ ]
1270
+ ],
1271
+ [
1272
+ "render-ui",
1273
+ "main",
1274
+ {
1275
+ "children": [
1276
+ {
1277
+ "children": [
1278
+ {
1279
+ "content": "@entity.title",
1280
+ "type": "typography",
1281
+ "variant": "h4"
1282
+ },
1283
+ {
1284
+ "label": [
1285
+ "str/concat",
1286
+ "Prompt ",
1287
+ [
1288
+ "str/concat",
1289
+ "",
1290
+ [
1291
+ "+",
1292
+ "@entity.promptIndex",
1293
+ 1.0
1294
+ ]
1295
+ ],
1296
+ " of ",
1297
+ [
1298
+ "str/concat",
1299
+ "",
1300
+ "@entity.totalPrompts"
1301
+ ]
1302
+ ],
1303
+ "max": "@entity.totalPrompts",
1304
+ "showPercentage": false,
1305
+ "type": "progress-bar",
1306
+ "value": [
1307
+ "+",
1308
+ "@entity.promptIndex",
1309
+ 1.0
1310
+ ]
1311
+ },
1312
+ {
1313
+ "children": "@entity.view",
1314
+ "direction": "vertical",
1315
+ "gap": "md",
1316
+ "type": "stack"
1317
+ }
1318
+ ],
1319
+ "direction": "vertical",
1320
+ "gap": "md",
1321
+ "type": "stack"
1322
+ }
1323
+ ],
1324
+ "padding": "md",
1325
+ "type": "box"
1326
+ }
1327
+ ]
1328
+ ],
1329
+ "event": "MODE_SELECTED",
1330
+ "eventId": "evt_01M075812JWBR49NJTVRXS2MWY",
1331
+ "from": "idle",
1332
+ "guard": [
1333
+ "==",
1334
+ "@payload.mode",
1335
+ "@config.matchMode"
1336
+ ],
1337
+ "to": "idle"
1338
+ },
1339
+ {
1340
+ "effects": [
1341
+ [
1342
+ "let",
1343
+ [
1344
+ [
1345
+ "tappedId",
1346
+ [
1347
+ "str/replace",
1348
+ [
1349
+ "object/get",
1350
+ "@payload.payload",
1351
+ "id",
1352
+ ""
1353
+ ],
1354
+ "label-",
1355
+ ""
1356
+ ]
1357
+ ],
1358
+ [
1359
+ "hit",
1360
+ [
1361
+ "==",
1362
+ "@tappedId",
1363
+ "@entity.targetId"
1364
+ ]
1365
+ ],
1366
+ [
1367
+ "tapped",
1368
+ [
1369
+ "array/find",
1370
+ "@config.shapes",
1371
+ [
1372
+ "fn",
1373
+ "s",
1374
+ [
1375
+ "==",
1376
+ [
1377
+ "object/get",
1378
+ "@s",
1379
+ "id"
1380
+ ],
1381
+ "@tappedId"
1382
+ ]
1383
+ ]
1384
+ ]
1385
+ ],
1386
+ [
1387
+ "tappedLabel",
1388
+ [
1389
+ "object/get",
1390
+ "@tapped",
1391
+ "label",
1392
+ ""
1393
+ ]
1394
+ ],
1395
+ [
1396
+ "target",
1397
+ [
1398
+ "array/find",
1399
+ "@config.shapes",
1400
+ [
1401
+ "fn",
1402
+ "s",
1403
+ [
1404
+ "==",
1405
+ [
1406
+ "object/get",
1407
+ "@s",
1408
+ "id"
1409
+ ],
1410
+ "@entity.targetId"
1411
+ ]
1412
+ ]
1413
+ ]
1414
+ ],
1415
+ [
1416
+ "circles",
1417
+ [
1418
+ "array/map",
1419
+ "@config.shapes",
1420
+ [
1421
+ "fn",
1422
+ "s",
1423
+ {
1424
+ "color": [
1425
+ "object/get",
1426
+ "@s",
1427
+ "color",
1428
+ "#3b82f6"
1429
+ ],
1430
+ "fill": [
1431
+ "object/get",
1432
+ "@s",
1433
+ "color",
1434
+ "#3b82f6"
1435
+ ],
1436
+ "id": [
1437
+ "object/get",
1438
+ "@s",
1439
+ "id"
1440
+ ],
1441
+ "radius": [
1442
+ "object/get",
1443
+ "@s",
1444
+ "radius",
1445
+ 22.0
1446
+ ],
1447
+ "type": "circle",
1448
+ "x": [
1449
+ "object/get",
1450
+ "@s",
1451
+ "x"
1452
+ ],
1453
+ "y": [
1454
+ "object/get",
1455
+ "@s",
1456
+ "y"
1457
+ ]
1458
+ }
1459
+ ]
1460
+ ]
1461
+ ],
1462
+ [
1463
+ "labels",
1464
+ [
1465
+ "array/map",
1466
+ "@config.shapes",
1467
+ [
1468
+ "fn",
1469
+ "s",
1470
+ {
1471
+ "align": "center",
1472
+ "color": "#0f172a",
1473
+ "fontSize": 12.0,
1474
+ "id": [
1475
+ "str/concat",
1476
+ "label-",
1477
+ [
1478
+ "object/get",
1479
+ "@s",
1480
+ "id"
1481
+ ]
1482
+ ],
1483
+ "text": [
1484
+ "object/get",
1485
+ "@s",
1486
+ "label"
1487
+ ],
1488
+ "type": "text",
1489
+ "x": [
1490
+ "object/get",
1491
+ "@s",
1492
+ "x"
1493
+ ],
1494
+ "y": [
1495
+ "+",
1496
+ [
1497
+ "object/get",
1498
+ "@s",
1499
+ "y"
1500
+ ],
1501
+ [
1502
+ "object/get",
1503
+ "@s",
1504
+ "radius",
1505
+ 22.0
1506
+ ],
1507
+ 14.0
1508
+ ]
1509
+ }
1510
+ ]
1511
+ ]
1512
+ ],
1513
+ [
1514
+ "ring",
1515
+ [
1516
+ "if",
1517
+ "@hit",
1518
+ [
1519
+ {
1520
+ "color": "@config.hitColor",
1521
+ "fill": "transparent",
1522
+ "id": "hit-ring",
1523
+ "lineWidth": 4.0,
1524
+ "radius": [
1525
+ "+",
1526
+ [
1527
+ "object/get",
1528
+ "@target",
1529
+ "radius",
1530
+ 22.0
1531
+ ],
1532
+ 6.0
1533
+ ],
1534
+ "type": "circle",
1535
+ "x": [
1536
+ "object/get",
1537
+ "@target",
1538
+ "x"
1539
+ ],
1540
+ "y": [
1541
+ "object/get",
1542
+ "@target",
1543
+ "y"
1544
+ ]
1545
+ }
1546
+ ],
1547
+ []
1548
+ ]
1549
+ ],
1550
+ [
1551
+ "newFound",
1552
+ [
1553
+ "if",
1554
+ "@hit",
1555
+ true,
1556
+ false
1557
+ ]
1558
+ ],
1559
+ [
1560
+ "newScore",
1561
+ [
1562
+ "if",
1563
+ [
1564
+ "and",
1565
+ "@hit",
1566
+ [
1567
+ "==",
1568
+ "@entity.tries",
1569
+ 0.0
1570
+ ]
1571
+ ],
1572
+ [
1573
+ "+",
1574
+ "@entity.score",
1575
+ 1.0
1576
+ ],
1577
+ "@entity.score"
1578
+ ]
1579
+ ],
1580
+ [
1581
+ "newFeedback",
1582
+ [
1583
+ "if",
1584
+ "@hit",
1585
+ [
1586
+ "if",
1587
+ [
1588
+ "!=",
1589
+ "@entity.explanation",
1590
+ ""
1591
+ ],
1592
+ [
1593
+ "str/concat",
1594
+ "Correct! ",
1595
+ "@entity.explanation"
1596
+ ],
1597
+ "Correct!"
1598
+ ],
1599
+ [
1600
+ "if",
1601
+ [
1602
+ "!=",
1603
+ "@tappedLabel",
1604
+ ""
1605
+ ],
1606
+ [
1607
+ "str/concat",
1608
+ "That's ",
1609
+ "@tappedLabel",
1610
+ " — try again."
1611
+ ],
1612
+ "Not a labeled part — try again."
1613
+ ]
1614
+ ]
1615
+ ],
1616
+ [
1617
+ "newCanvasShapes",
1618
+ [
1619
+ "array/concat",
1620
+ [
1621
+ "array/concat",
1622
+ "@circles",
1623
+ "@labels"
1624
+ ],
1625
+ "@ring"
1626
+ ]
1627
+ ],
1628
+ [
1629
+ "foundView",
1630
+ [
1631
+ {
1632
+ "children": [
1633
+ {
1634
+ "content": "@entity.promptText",
1635
+ "type": "typography",
1636
+ "variant": "body"
1637
+ }
1638
+ ],
1639
+ "padding": "md",
1640
+ "type": "card",
1641
+ "variant": "bordered"
1642
+ },
1643
+ {
1644
+ "animate": false,
1645
+ "backgroundColor": "@config.backgroundColor",
1646
+ "height": "@config.height",
1647
+ "interactive": true,
1648
+ "onShapeClick": "TAP_SHAPE",
1649
+ "shapes": "@newCanvasShapes",
1650
+ "type": "learning-canvas",
1651
+ "width": "@config.width"
1652
+ },
1653
+ {
1654
+ "children": [
1655
+ {
1656
+ "label": "Found",
1657
+ "type": "badge",
1658
+ "variant": "success"
1659
+ },
1660
+ {
1661
+ "content": "@newFeedback",
1662
+ "type": "typography",
1663
+ "variant": "caption"
1664
+ }
1665
+ ],
1666
+ "direction": "horizontal",
1667
+ "gap": "xs",
1668
+ "type": "stack"
1669
+ },
1670
+ {
1671
+ "children": [
1672
+ {
1673
+ "action": "NEXT",
1674
+ "disabled": false,
1675
+ "label": "@config.nextLabel",
1676
+ "type": "button",
1677
+ "variant": "primary"
1678
+ }
1679
+ ],
1680
+ "direction": "horizontal",
1681
+ "gap": "sm",
1682
+ "type": "stack"
1683
+ },
1684
+ {
1685
+ "label": "First-try score",
1686
+ "max": "@entity.totalPrompts",
1687
+ "type": "stat-display",
1688
+ "value": "@newScore"
1689
+ }
1690
+ ]
1691
+ ],
1692
+ [
1693
+ "notFoundView",
1694
+ [
1695
+ {
1696
+ "children": [
1697
+ {
1698
+ "content": "@entity.promptText",
1699
+ "type": "typography",
1700
+ "variant": "body"
1701
+ }
1702
+ ],
1703
+ "padding": "md",
1704
+ "type": "card",
1705
+ "variant": "bordered"
1706
+ },
1707
+ {
1708
+ "animate": false,
1709
+ "backgroundColor": "@config.backgroundColor",
1710
+ "height": "@config.height",
1711
+ "interactive": true,
1712
+ "onShapeClick": "TAP_SHAPE",
1713
+ "shapes": "@newCanvasShapes",
1714
+ "type": "learning-canvas",
1715
+ "width": "@config.width"
1716
+ },
1717
+ {
1718
+ "children": [
1719
+ {
1720
+ "content": "@newFeedback",
1721
+ "type": "typography",
1722
+ "variant": "caption"
1723
+ }
1724
+ ],
1725
+ "direction": "horizontal",
1726
+ "gap": "xs",
1727
+ "type": "stack"
1728
+ },
1729
+ {
1730
+ "children": [
1731
+ {
1732
+ "action": "NEXT",
1733
+ "disabled": true,
1734
+ "label": "@config.nextLabel",
1735
+ "type": "button",
1736
+ "variant": "primary"
1737
+ }
1738
+ ],
1739
+ "direction": "horizontal",
1740
+ "gap": "sm",
1741
+ "type": "stack"
1742
+ },
1743
+ {
1744
+ "label": "First-try score",
1745
+ "max": "@entity.totalPrompts",
1746
+ "type": "stat-display",
1747
+ "value": "@newScore"
1748
+ }
1749
+ ]
1750
+ ]
1751
+ ],
1752
+ [
1753
+ "do",
1754
+ [
1755
+ "set",
1756
+ "@entity.tries",
1757
+ [
1758
+ "if",
1759
+ "@hit",
1760
+ "@entity.tries",
1761
+ [
1762
+ "+",
1763
+ "@entity.tries",
1764
+ 1.0
1765
+ ]
1766
+ ]
1767
+ ],
1768
+ [
1769
+ "set",
1770
+ "@entity.score",
1771
+ "@newScore"
1772
+ ],
1773
+ [
1774
+ "set",
1775
+ "@entity.found",
1776
+ "@newFound"
1777
+ ],
1778
+ [
1779
+ "set",
1780
+ "@entity.feedback",
1781
+ "@newFeedback"
1782
+ ],
1783
+ [
1784
+ "set",
1785
+ "@entity.canvasShapes",
1786
+ "@newCanvasShapes"
1787
+ ],
1788
+ [
1789
+ "set",
1790
+ "@entity.view",
1791
+ [
1792
+ "if",
1793
+ "@newFound",
1794
+ "@foundView",
1795
+ "@notFoundView"
1796
+ ]
1797
+ ]
1798
+ ]
1799
+ ],
1800
+ [
1801
+ "render-ui",
1802
+ "main",
1803
+ {
1804
+ "children": [
1805
+ {
1806
+ "children": [
1807
+ {
1808
+ "content": "@entity.title",
1809
+ "type": "typography",
1810
+ "variant": "h4"
1811
+ },
1812
+ {
1813
+ "label": [
1814
+ "str/concat",
1815
+ "Prompt ",
1816
+ [
1817
+ "str/concat",
1818
+ "",
1819
+ [
1820
+ "+",
1821
+ "@entity.promptIndex",
1822
+ 1.0
1823
+ ]
1824
+ ],
1825
+ " of ",
1826
+ [
1827
+ "str/concat",
1828
+ "",
1829
+ "@entity.totalPrompts"
1830
+ ]
1831
+ ],
1832
+ "max": "@entity.totalPrompts",
1833
+ "showPercentage": false,
1834
+ "type": "progress-bar",
1835
+ "value": [
1836
+ "+",
1837
+ "@entity.promptIndex",
1838
+ 1.0
1839
+ ]
1840
+ },
1841
+ {
1842
+ "children": "@entity.view",
1843
+ "direction": "vertical",
1844
+ "gap": "md",
1845
+ "type": "stack"
1846
+ }
1847
+ ],
1848
+ "direction": "vertical",
1849
+ "gap": "md",
1850
+ "type": "stack"
1851
+ }
1852
+ ],
1853
+ "padding": "md",
1854
+ "type": "box"
1855
+ }
1856
+ ],
1857
+ [
1858
+ "emit",
1859
+ "TAP_JUDGED",
1860
+ {
1861
+ "correct": "@entity.found",
1862
+ "promptIndex": "@entity.promptIndex",
1863
+ "tries": "@entity.tries"
1864
+ }
1865
+ ]
1866
+ ],
1867
+ "event": "TAP_SHAPE",
1868
+ "eventId": "evt_01M075812JEJR3YKZ3EVCXYZ6W",
1869
+ "from": "idle",
1870
+ "guard": [
1871
+ "and",
1872
+ [
1873
+ "==",
1874
+ "@entity.active",
1875
+ true
1876
+ ],
1877
+ [
1878
+ "and",
1879
+ [
1880
+ "==",
1881
+ "@entity.found",
1882
+ false
1883
+ ],
1884
+ [
1885
+ "==",
1886
+ "@entity.done",
1887
+ false
1888
+ ]
1889
+ ]
1890
+ ],
1891
+ "to": "idle"
1892
+ },
1893
+ {
1894
+ "effects": [
1895
+ [
1896
+ "let",
1897
+ [
1898
+ [
1899
+ "nextIndex",
1900
+ [
1901
+ "+",
1902
+ "@entity.promptIndex",
1903
+ 1.0
1904
+ ]
1905
+ ],
1906
+ [
1907
+ "finished",
1908
+ [
1909
+ ">=",
1910
+ "@nextIndex",
1911
+ [
1912
+ "array/len",
1913
+ "@config.prompts"
1914
+ ]
1915
+ ]
1916
+ ],
1917
+ [
1918
+ "next",
1919
+ [
1920
+ "array/nth",
1921
+ "@config.prompts",
1922
+ [
1923
+ "math/min",
1924
+ "@nextIndex",
1925
+ [
1926
+ "-",
1927
+ [
1928
+ "array/len",
1929
+ "@config.prompts"
1930
+ ],
1931
+ 1.0
1932
+ ]
1933
+ ]
1934
+ ]
1935
+ ],
1936
+ [
1937
+ "circles",
1938
+ [
1939
+ "array/map",
1940
+ "@config.shapes",
1941
+ [
1942
+ "fn",
1943
+ "s",
1944
+ {
1945
+ "color": [
1946
+ "object/get",
1947
+ "@s",
1948
+ "color",
1949
+ "#3b82f6"
1950
+ ],
1951
+ "fill": [
1952
+ "object/get",
1953
+ "@s",
1954
+ "color",
1955
+ "#3b82f6"
1956
+ ],
1957
+ "id": [
1958
+ "object/get",
1959
+ "@s",
1960
+ "id"
1961
+ ],
1962
+ "radius": [
1963
+ "object/get",
1964
+ "@s",
1965
+ "radius",
1966
+ 22.0
1967
+ ],
1968
+ "type": "circle",
1969
+ "x": [
1970
+ "object/get",
1971
+ "@s",
1972
+ "x"
1973
+ ],
1974
+ "y": [
1975
+ "object/get",
1976
+ "@s",
1977
+ "y"
1978
+ ]
1979
+ }
1980
+ ]
1981
+ ]
1982
+ ],
1983
+ [
1984
+ "labels",
1985
+ [
1986
+ "array/map",
1987
+ "@config.shapes",
1988
+ [
1989
+ "fn",
1990
+ "s",
1991
+ {
1992
+ "align": "center",
1993
+ "color": "#0f172a",
1994
+ "fontSize": 12.0,
1995
+ "id": [
1996
+ "str/concat",
1997
+ "label-",
1998
+ [
1999
+ "object/get",
2000
+ "@s",
2001
+ "id"
2002
+ ]
2003
+ ],
2004
+ "text": [
2005
+ "object/get",
2006
+ "@s",
2007
+ "label"
2008
+ ],
2009
+ "type": "text",
2010
+ "x": [
2011
+ "object/get",
2012
+ "@s",
2013
+ "x"
2014
+ ],
2015
+ "y": [
2016
+ "+",
2017
+ [
2018
+ "object/get",
2019
+ "@s",
2020
+ "y"
2021
+ ],
2022
+ [
2023
+ "object/get",
2024
+ "@s",
2025
+ "radius",
2026
+ 22.0
2027
+ ],
2028
+ 14.0
2029
+ ]
2030
+ }
2031
+ ]
2032
+ ]
2033
+ ]
2034
+ ],
2035
+ [
2036
+ "do",
2037
+ [
2038
+ "set",
2039
+ "@entity.promptIndex",
2040
+ [
2041
+ "if",
2042
+ "@finished",
2043
+ "@entity.promptIndex",
2044
+ "@nextIndex"
2045
+ ]
2046
+ ],
2047
+ [
2048
+ "set",
2049
+ "@entity.done",
2050
+ [
2051
+ "if",
2052
+ "@finished",
2053
+ true,
2054
+ false
2055
+ ]
2056
+ ],
2057
+ [
2058
+ "set",
2059
+ "@entity.tries",
2060
+ 0.0
2061
+ ],
2062
+ [
2063
+ "set",
2064
+ "@entity.found",
2065
+ false
2066
+ ],
2067
+ [
2068
+ "set",
2069
+ "@entity.promptText",
2070
+ [
2071
+ "if",
2072
+ "@finished",
2073
+ "@entity.promptText",
2074
+ [
2075
+ "object/get",
2076
+ "@next",
2077
+ "prompt"
2078
+ ]
2079
+ ]
2080
+ ],
2081
+ [
2082
+ "set",
2083
+ "@entity.targetId",
2084
+ [
2085
+ "if",
2086
+ "@finished",
2087
+ "@entity.targetId",
2088
+ [
2089
+ "object/get",
2090
+ "@next",
2091
+ "targetId"
2092
+ ]
2093
+ ]
2094
+ ],
2095
+ [
2096
+ "set",
2097
+ "@entity.explanation",
2098
+ [
2099
+ "if",
2100
+ "@finished",
2101
+ "@entity.explanation",
2102
+ [
2103
+ "object/get",
2104
+ "@next",
2105
+ "explanation",
2106
+ ""
2107
+ ]
2108
+ ]
2109
+ ],
2110
+ [
2111
+ "set",
2112
+ "@entity.feedback",
2113
+ ""
2114
+ ],
2115
+ [
2116
+ "set",
2117
+ "@entity.canvasShapes",
2118
+ [
2119
+ "array/concat",
2120
+ "@circles",
2121
+ "@labels"
2122
+ ]
2123
+ ],
2124
+ [
2125
+ "set",
2126
+ "@entity.view",
2127
+ [
2128
+ "if",
2129
+ "@finished",
2130
+ [
2131
+ {
2132
+ "content": "Round Complete",
2133
+ "type": "typography",
2134
+ "variant": "h4"
2135
+ },
2136
+ {
2137
+ "label": "First-try score",
2138
+ "max": "@entity.totalPrompts",
2139
+ "type": "stat-display",
2140
+ "value": "@entity.score"
2141
+ },
2142
+ {
2143
+ "action": "RETRY",
2144
+ "label": "@config.retryLabel",
2145
+ "type": "button",
2146
+ "variant": "primary"
2147
+ }
2148
+ ],
2149
+ [
2150
+ {
2151
+ "children": [
2152
+ {
2153
+ "content": "@entity.promptText",
2154
+ "type": "typography",
2155
+ "variant": "body"
2156
+ }
2157
+ ],
2158
+ "padding": "md",
2159
+ "type": "card",
2160
+ "variant": "bordered"
2161
+ },
2162
+ {
2163
+ "animate": false,
2164
+ "backgroundColor": "@config.backgroundColor",
2165
+ "height": "@config.height",
2166
+ "interactive": true,
2167
+ "onShapeClick": "TAP_SHAPE",
2168
+ "shapes": "@entity.canvasShapes",
2169
+ "type": "learning-canvas",
2170
+ "width": "@config.width"
2171
+ },
2172
+ {
2173
+ "children": [
2174
+ {
2175
+ "content": "@entity.feedback",
2176
+ "type": "typography",
2177
+ "variant": "caption"
2178
+ }
2179
+ ],
2180
+ "direction": "horizontal",
2181
+ "gap": "xs",
2182
+ "type": "stack"
2183
+ },
2184
+ {
2185
+ "children": [
2186
+ {
2187
+ "action": "NEXT",
2188
+ "disabled": [
2189
+ "if",
2190
+ "@entity.found",
2191
+ false,
2192
+ true
2193
+ ],
2194
+ "label": "@config.nextLabel",
2195
+ "type": "button",
2196
+ "variant": "primary"
2197
+ }
2198
+ ],
2199
+ "direction": "horizontal",
2200
+ "gap": "sm",
2201
+ "type": "stack"
2202
+ },
2203
+ {
2204
+ "label": "First-try score",
2205
+ "max": "@entity.totalPrompts",
2206
+ "type": "stat-display",
2207
+ "value": "@entity.score"
2208
+ }
2209
+ ]
2210
+ ]
2211
+ ]
2212
+ ]
2213
+ ],
2214
+ [
2215
+ "render-ui",
2216
+ "main",
2217
+ {
2218
+ "children": [
2219
+ {
2220
+ "children": [
2221
+ {
2222
+ "content": "@entity.title",
2223
+ "type": "typography",
2224
+ "variant": "h4"
2225
+ },
2226
+ {
2227
+ "label": [
2228
+ "str/concat",
2229
+ "Prompt ",
2230
+ [
2231
+ "str/concat",
2232
+ "",
2233
+ [
2234
+ "+",
2235
+ "@entity.promptIndex",
2236
+ 1.0
2237
+ ]
2238
+ ],
2239
+ " of ",
2240
+ [
2241
+ "str/concat",
2242
+ "",
2243
+ "@entity.totalPrompts"
2244
+ ]
2245
+ ],
2246
+ "max": "@entity.totalPrompts",
2247
+ "showPercentage": false,
2248
+ "type": "progress-bar",
2249
+ "value": [
2250
+ "+",
2251
+ "@entity.promptIndex",
2252
+ 1.0
2253
+ ]
2254
+ },
2255
+ {
2256
+ "children": "@entity.view",
2257
+ "direction": "vertical",
2258
+ "gap": "md",
2259
+ "type": "stack"
2260
+ }
2261
+ ],
2262
+ "direction": "vertical",
2263
+ "gap": "md",
2264
+ "type": "stack"
2265
+ }
2266
+ ],
2267
+ "padding": "md",
2268
+ "type": "box"
2269
+ }
2270
+ ],
2271
+ [
2272
+ "emit",
2273
+ "PROMPT_ADVANCED",
2274
+ {
2275
+ "done": "@entity.done",
2276
+ "promptIndex": "@entity.promptIndex",
2277
+ "score": "@entity.score"
2278
+ }
2279
+ ]
2280
+ ],
2281
+ "event": "NEXT",
2282
+ "eventId": "evt_01M075812JZ16GNXVCQ09WRT43",
2283
+ "from": "idle",
2284
+ "guard": [
2285
+ "and",
2286
+ [
2287
+ "==",
2288
+ "@entity.active",
2289
+ true
2290
+ ],
2291
+ [
2292
+ "and",
2293
+ [
2294
+ "==",
2295
+ "@entity.found",
2296
+ true
2297
+ ],
2298
+ [
2299
+ "==",
2300
+ "@entity.done",
2301
+ false
2302
+ ]
2303
+ ]
2304
+ ],
2305
+ "to": "idle"
2306
+ },
2307
+ {
2308
+ "effects": [
2309
+ [
2310
+ "let",
2311
+ [
2312
+ [
2313
+ "first",
2314
+ [
2315
+ "array/nth",
2316
+ "@config.prompts",
2317
+ 0.0
2318
+ ]
2319
+ ],
2320
+ [
2321
+ "circles",
2322
+ [
2323
+ "array/map",
2324
+ "@config.shapes",
2325
+ [
2326
+ "fn",
2327
+ "s",
2328
+ {
2329
+ "color": [
2330
+ "object/get",
2331
+ "@s",
2332
+ "color",
2333
+ "#3b82f6"
2334
+ ],
2335
+ "fill": [
2336
+ "object/get",
2337
+ "@s",
2338
+ "color",
2339
+ "#3b82f6"
2340
+ ],
2341
+ "id": [
2342
+ "object/get",
2343
+ "@s",
2344
+ "id"
2345
+ ],
2346
+ "radius": [
2347
+ "object/get",
2348
+ "@s",
2349
+ "radius",
2350
+ 22.0
2351
+ ],
2352
+ "type": "circle",
2353
+ "x": [
2354
+ "object/get",
2355
+ "@s",
2356
+ "x"
2357
+ ],
2358
+ "y": [
2359
+ "object/get",
2360
+ "@s",
2361
+ "y"
2362
+ ]
2363
+ }
2364
+ ]
2365
+ ]
2366
+ ],
2367
+ [
2368
+ "labels",
2369
+ [
2370
+ "array/map",
2371
+ "@config.shapes",
2372
+ [
2373
+ "fn",
2374
+ "s",
2375
+ {
2376
+ "align": "center",
2377
+ "color": "#0f172a",
2378
+ "fontSize": 12.0,
2379
+ "id": [
2380
+ "str/concat",
2381
+ "label-",
2382
+ [
2383
+ "object/get",
2384
+ "@s",
2385
+ "id"
2386
+ ]
2387
+ ],
2388
+ "text": [
2389
+ "object/get",
2390
+ "@s",
2391
+ "label"
2392
+ ],
2393
+ "type": "text",
2394
+ "x": [
2395
+ "object/get",
2396
+ "@s",
2397
+ "x"
2398
+ ],
2399
+ "y": [
2400
+ "+",
2401
+ [
2402
+ "object/get",
2403
+ "@s",
2404
+ "y"
2405
+ ],
2406
+ [
2407
+ "object/get",
2408
+ "@s",
2409
+ "radius",
2410
+ 22.0
2411
+ ],
2412
+ 14.0
2413
+ ]
2414
+ }
2415
+ ]
2416
+ ]
2417
+ ]
2418
+ ],
2419
+ [
2420
+ "do",
2421
+ [
2422
+ "set",
2423
+ "@entity.promptIndex",
2424
+ 0.0
2425
+ ],
2426
+ [
2427
+ "set",
2428
+ "@entity.score",
2429
+ 0.0
2430
+ ],
2431
+ [
2432
+ "set",
2433
+ "@entity.tries",
2434
+ 0.0
2435
+ ],
2436
+ [
2437
+ "set",
2438
+ "@entity.found",
2439
+ false
2440
+ ],
2441
+ [
2442
+ "set",
2443
+ "@entity.done",
2444
+ false
2445
+ ],
2446
+ [
2447
+ "set",
2448
+ "@entity.promptText",
2449
+ [
2450
+ "object/get",
2451
+ "@first",
2452
+ "prompt"
2453
+ ]
2454
+ ],
2455
+ [
2456
+ "set",
2457
+ "@entity.targetId",
2458
+ [
2459
+ "object/get",
2460
+ "@first",
2461
+ "targetId"
2462
+ ]
2463
+ ],
2464
+ [
2465
+ "set",
2466
+ "@entity.explanation",
2467
+ [
2468
+ "object/get",
2469
+ "@first",
2470
+ "explanation",
2471
+ ""
2472
+ ]
2473
+ ],
2474
+ [
2475
+ "set",
2476
+ "@entity.feedback",
2477
+ ""
2478
+ ],
2479
+ [
2480
+ "set",
2481
+ "@entity.canvasShapes",
2482
+ [
2483
+ "array/concat",
2484
+ "@circles",
2485
+ "@labels"
2486
+ ]
2487
+ ],
2488
+ [
2489
+ "set",
2490
+ "@entity.view",
2491
+ [
2492
+ {
2493
+ "children": [
2494
+ {
2495
+ "content": "@entity.promptText",
2496
+ "type": "typography",
2497
+ "variant": "body"
2498
+ }
2499
+ ],
2500
+ "padding": "md",
2501
+ "type": "card",
2502
+ "variant": "bordered"
2503
+ },
2504
+ {
2505
+ "animate": false,
2506
+ "backgroundColor": "@config.backgroundColor",
2507
+ "height": "@config.height",
2508
+ "interactive": true,
2509
+ "onShapeClick": "TAP_SHAPE",
2510
+ "shapes": "@entity.canvasShapes",
2511
+ "type": "learning-canvas",
2512
+ "width": "@config.width"
2513
+ },
2514
+ {
2515
+ "children": [
2516
+ {
2517
+ "content": "@entity.feedback",
2518
+ "type": "typography",
2519
+ "variant": "caption"
2520
+ }
2521
+ ],
2522
+ "direction": "horizontal",
2523
+ "gap": "xs",
2524
+ "type": "stack"
2525
+ },
2526
+ {
2527
+ "children": [
2528
+ {
2529
+ "action": "NEXT",
2530
+ "disabled": [
2531
+ "if",
2532
+ "@entity.found",
2533
+ false,
2534
+ true
2535
+ ],
2536
+ "label": "@config.nextLabel",
2537
+ "type": "button",
2538
+ "variant": "primary"
2539
+ }
2540
+ ],
2541
+ "direction": "horizontal",
2542
+ "gap": "sm",
2543
+ "type": "stack"
2544
+ },
2545
+ {
2546
+ "label": "First-try score",
2547
+ "max": "@entity.totalPrompts",
2548
+ "type": "stat-display",
2549
+ "value": "@entity.score"
2550
+ }
2551
+ ]
2552
+ ]
2553
+ ]
2554
+ ],
2555
+ [
2556
+ "render-ui",
2557
+ "main",
2558
+ {
2559
+ "children": [
2560
+ {
2561
+ "children": [
2562
+ {
2563
+ "content": "@entity.title",
2564
+ "type": "typography",
2565
+ "variant": "h4"
2566
+ },
2567
+ {
2568
+ "label": [
2569
+ "str/concat",
2570
+ "Prompt ",
2571
+ [
2572
+ "str/concat",
2573
+ "",
2574
+ [
2575
+ "+",
2576
+ "@entity.promptIndex",
2577
+ 1.0
2578
+ ]
2579
+ ],
2580
+ " of ",
2581
+ [
2582
+ "str/concat",
2583
+ "",
2584
+ "@entity.totalPrompts"
2585
+ ]
2586
+ ],
2587
+ "max": "@entity.totalPrompts",
2588
+ "showPercentage": false,
2589
+ "type": "progress-bar",
2590
+ "value": [
2591
+ "+",
2592
+ "@entity.promptIndex",
2593
+ 1.0
2594
+ ]
2595
+ },
2596
+ {
2597
+ "children": "@entity.view",
2598
+ "direction": "vertical",
2599
+ "gap": "md",
2600
+ "type": "stack"
2601
+ }
2602
+ ],
2603
+ "direction": "vertical",
2604
+ "gap": "md",
2605
+ "type": "stack"
2606
+ }
2607
+ ],
2608
+ "padding": "md",
2609
+ "type": "box"
2610
+ }
2611
+ ],
2612
+ [
2613
+ "emit",
2614
+ "ROUND_RESTARTED",
2615
+ {
2616
+ "totalPrompts": "@entity.totalPrompts"
2617
+ }
2618
+ ]
2619
+ ],
2620
+ "event": "RETRY",
2621
+ "eventId": "evt_01M075812J4KYMXGSBR18KZAQ2",
2622
+ "from": "idle",
2623
+ "guard": [
2624
+ "and",
2625
+ [
2626
+ "==",
2627
+ "@entity.active",
2628
+ true
2629
+ ],
2630
+ [
2631
+ "==",
2632
+ "@entity.done",
2633
+ true
2634
+ ]
2635
+ ],
2636
+ "to": "idle"
2637
+ }
2638
+ ]
2639
+ }
2640
+ }
2641
+ ]
2642
+ }
2643
+ ],
2644
+ "schemaVersion": 1,
2645
+ "version": "1.0.0"
2646
+ }