@almadar/std 16.173.0 → 16.175.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 (220) 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/molecules/ui-table-view.lolo +4 -9
  32. package/behaviors/lolo/ui/core/organisms/ui-chat-bar.lolo +1 -1
  33. package/behaviors/lolo/ui/core/organisms/ui-dashboard-grid.lolo +1 -1
  34. package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +1 -1
  35. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +1 -1
  36. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +1 -1
  37. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +1 -1
  38. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +9 -3
  39. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +9 -3
  40. package/behaviors/lolo/ui/core/organisms/ui-master-detail.lolo +1 -1
  41. package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +1 -1
  42. package/behaviors/lolo/ui/core/organisms/ui-segment-renderer.lolo +7 -1
  43. package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +1 -1
  44. package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +1 -1
  45. package/behaviors/lolo/ui/game/atoms/ui-action-tile.lolo +1 -1
  46. package/behaviors/lolo/ui/game/atoms/ui-draw-shape-layer.lolo +41 -9
  47. package/behaviors/lolo/ui/game/atoms/ui-draw-shape.lolo +40 -8
  48. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite-layer.lolo +13 -3
  49. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +12 -2
  50. package/behaviors/lolo/ui/game/atoms/ui-draw-text-layer.lolo +3 -3
  51. package/behaviors/lolo/ui/game/atoms/ui-draw-text.lolo +2 -2
  52. package/behaviors/lolo/ui/game/organisms/std-tactics-board-3d.lolo +32 -2
  53. package/behaviors/lolo/ui/learning/atoms/std-learn-classify.lolo +133 -23
  54. package/behaviors/lolo/ui/learning/atoms/std-learn-compare.lolo +397 -0
  55. package/behaviors/lolo/ui/learning/atoms/std-learn-coupled-sim.lolo +537 -0
  56. package/behaviors/lolo/ui/learning/atoms/std-learn-derivation.lolo +428 -0
  57. package/behaviors/lolo/ui/learning/atoms/std-learn-doser.lolo +520 -0
  58. package/behaviors/lolo/ui/learning/atoms/std-learn-estimate.lolo +419 -0
  59. package/behaviors/lolo/ui/learning/atoms/std-learn-goal-seek.lolo +591 -0
  60. package/behaviors/lolo/ui/learning/atoms/std-learn-grid-sim.lolo +425 -0
  61. package/behaviors/lolo/ui/learning/atoms/std-learn-hotspot.lolo +398 -0
  62. package/behaviors/lolo/ui/learning/atoms/std-learn-measure.lolo +325 -0
  63. package/behaviors/lolo/ui/learning/atoms/std-learn-perturb.lolo +494 -0
  64. package/behaviors/lolo/ui/learning/atoms/std-learn-predict.lolo +408 -0
  65. package/behaviors/lolo/ui/learning/atoms/std-learn-scatter-fit.lolo +805 -0
  66. package/behaviors/lolo/ui/learning/atoms/std-learn-scenario.lolo +307 -0
  67. package/behaviors/lolo/ui/learning/atoms/std-learn-sim-3d.lolo +318 -0
  68. package/behaviors/lolo/ui/learning/atoms/std-learn-speed-drill.lolo +336 -0
  69. package/behaviors/lolo/ui/learning/atoms/std-learn-tour-3d.lolo +409 -0
  70. package/behaviors/lolo/ui/learning/atoms/std-learn-transport.lolo +186 -0
  71. package/behaviors/lolo/ui/learning/atoms/std-learn-tree.lolo +522 -0
  72. package/behaviors/lolo/ui/learning/atoms/ui-algo-graph-canvas.lolo +192 -0
  73. package/behaviors/lolo/ui/learning/atoms/ui-algorithm-canvas.lolo +111 -2
  74. package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +193 -5
  75. package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +173 -5
  76. package/behaviors/lolo/ui/learning/atoms/ui-learning-canvas.lolo +48 -1
  77. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +141 -1
  78. package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +242 -5
  79. package/behaviors/lolo/ui/marketing/organisms/ui-book-viewer.lolo +1 -1
  80. package/behaviors/lolo/ui/marketing/organisms/ui-case-study-organism.lolo +1 -1
  81. package/behaviors/lolo/ui/marketing/organisms/ui-feature-grid-organism.lolo +1 -1
  82. package/behaviors/lolo/ui/marketing/organisms/ui-hero-organism.lolo +1 -1
  83. package/behaviors/lolo/ui/marketing/organisms/ui-pricing-organism.lolo +1 -1
  84. package/behaviors/lolo/ui/marketing/organisms/ui-showcase-organism.lolo +1 -1
  85. package/behaviors/lolo/ui/marketing/organisms/ui-stats-organism.lolo +1 -1
  86. package/behaviors/lolo/ui/marketing/organisms/ui-step-flow-organism.lolo +1 -1
  87. package/behaviors/lolo/ui/marketing/organisms/ui-team-organism.lolo +1 -1
  88. package/behaviors/registry/agent/atoms/std-agent-session.orb +22 -1
  89. package/behaviors/registry/agent/atoms/std-agent-tool-call.orb +38 -2
  90. package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +38 -2
  91. package/behaviors/registry/agent/organisms/std-agent-rabit.orb +23 -1
  92. package/behaviors/registry/infra/atoms/std-approval-gate.orb +8 -16
  93. package/behaviors/registry/infra/atoms/std-cache-aside.orb +31 -62
  94. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +16 -32
  95. package/behaviors/registry/infra/atoms/std-cross-reference.orb +32 -4
  96. package/behaviors/registry/infra/atoms/std-data-erasure.orb +8 -16
  97. package/behaviors/registry/infra/atoms/std-mod-queue.orb +8 -16
  98. package/behaviors/registry/infra/atoms/std-rate-limiter.orb +14 -28
  99. package/behaviors/registry/infra/atoms/std-row-access-control.orb +30 -2
  100. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +1 -2
  101. package/behaviors/registry/ui/core/atoms/std-board.orb +19 -5
  102. package/behaviors/registry/ui/core/atoms/std-browse.orb +29 -7
  103. package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +1 -2
  104. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +3 -5
  105. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +3 -6
  106. package/behaviors/registry/ui/core/atoms/std-event-log.orb +17 -3
  107. package/behaviors/registry/ui/core/atoms/std-export.orb +2 -4
  108. package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +1 -1
  109. package/behaviors/registry/ui/core/atoms/std-gallery.orb +9 -18
  110. package/behaviors/registry/ui/core/atoms/std-graphs.orb +15 -1
  111. package/behaviors/registry/ui/core/atoms/std-import.orb +2 -4
  112. package/behaviors/registry/ui/core/atoms/std-list.orb +4 -6
  113. package/behaviors/registry/ui/core/atoms/std-modal.orb +2 -2
  114. package/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +16 -2
  115. package/behaviors/registry/ui/core/atoms/std-pagination.orb +15 -1
  116. package/behaviors/registry/ui/core/atoms/std-rating-review.orb +19 -5
  117. package/behaviors/registry/ui/core/atoms/std-recurrence.orb +17 -3
  118. package/behaviors/registry/ui/core/atoms/std-rich-editor.orb +15 -1
  119. package/behaviors/registry/ui/core/atoms/std-scatter.orb +15 -1
  120. package/behaviors/registry/ui/core/atoms/std-signature-capture.orb +2 -2
  121. package/behaviors/registry/ui/core/atoms/std-stats.orb +15 -1
  122. package/behaviors/registry/ui/core/atoms/std-step-flow.orb +16 -2
  123. package/behaviors/registry/ui/core/atoms/std-thread.orb +2 -2
  124. package/behaviors/registry/ui/core/atoms/std-vote.orb +2 -2
  125. package/behaviors/registry/ui/core/atoms/std-wizard.orb +17 -3
  126. package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +4 -1
  127. package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +4 -1
  128. package/behaviors/registry/ui/core/atoms/ui-center.orb +4 -1
  129. package/behaviors/registry/ui/core/atoms/ui-hstack.orb +4 -1
  130. package/behaviors/registry/ui/core/atoms/ui-icon.orb +4 -1
  131. package/behaviors/registry/ui/core/atoms/ui-stack.orb +4 -1
  132. package/behaviors/registry/ui/core/atoms/ui-typography.orb +4 -1
  133. package/behaviors/registry/ui/core/atoms/ui-vstack.orb +4 -1
  134. package/behaviors/registry/ui/core/molecules/ui-accordion.orb +3 -3
  135. package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +4 -1
  136. package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +4 -1
  137. package/behaviors/registry/ui/core/molecules/ui-grid.orb +4 -1
  138. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +4 -39
  139. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +2 -2
  140. package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +1 -1
  141. package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +4 -1
  142. package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +5 -2
  143. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +5 -2
  144. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +4 -1
  145. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +4 -1
  146. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +4 -1
  147. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +34 -2
  148. package/behaviors/registry/ui/core/organisms/ui-form.orb +34 -2
  149. package/behaviors/registry/ui/core/organisms/ui-master-detail.orb +4 -1
  150. package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +4 -1
  151. package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +24 -2
  152. package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +4 -1
  153. package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +4 -1
  154. package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +1 -1
  155. package/behaviors/registry/ui/core/organisms/ui-ui-slot-renderer.orb +1 -1
  156. package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +35 -1
  157. package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +4 -1
  158. package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +183 -13
  159. package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +104 -9
  160. package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +56 -2
  161. package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +36 -4
  162. package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +21 -2
  163. package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +19 -4
  164. package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +173 -2
  165. package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1288 -197
  166. package/behaviors/registry/ui/learning/atoms/std-learn-compare.orb +2814 -0
  167. package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +3183 -0
  168. package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +2512 -0
  169. package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +3678 -0
  170. package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +2394 -0
  171. package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +3951 -0
  172. package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +3458 -0
  173. package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +2646 -0
  174. package/behaviors/registry/ui/learning/atoms/std-learn-measure.orb +1979 -0
  175. package/behaviors/registry/ui/learning/atoms/std-learn-perturb.orb +2994 -0
  176. package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +2682 -0
  177. package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +6539 -0
  178. package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +1842 -0
  179. package/behaviors/registry/ui/learning/atoms/std-learn-sim-3d.orb +1648 -0
  180. package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +2307 -0
  181. package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +3118 -0
  182. package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +986 -0
  183. package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +3333 -0
  184. package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +716 -0
  185. package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +679 -5
  186. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +962 -18
  187. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +919 -30
  188. package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +372 -1
  189. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +936 -16
  190. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1328 -43
  191. package/behaviors/registry/ui/marketing/atoms/std-marketing-article.orb +1 -2
  192. package/behaviors/registry/ui/marketing/atoms/std-marketing-footer.orb +1 -2
  193. package/behaviors/registry/ui/marketing/atoms/std-marketing-split.orb +1 -2
  194. package/behaviors/registry/ui/marketing/atoms/std-marketing-stats.orb +1 -2
  195. package/behaviors/registry/ui/marketing/atoms/std-marketing-steps.orb +1 -2
  196. package/behaviors/registry/ui/marketing/atoms/std-marketing-team.orb +1 -2
  197. package/behaviors/registry/ui/marketing/organisms/ui-book-viewer.orb +4 -1
  198. package/behaviors/registry/ui/marketing/organisms/ui-case-study-organism.orb +4 -1
  199. package/behaviors/registry/ui/marketing/organisms/ui-feature-grid-organism.orb +4 -1
  200. package/behaviors/registry/ui/marketing/organisms/ui-hero-organism.orb +4 -1
  201. package/behaviors/registry/ui/marketing/organisms/ui-pricing-organism.orb +4 -1
  202. package/behaviors/registry/ui/marketing/organisms/ui-showcase-organism.orb +4 -1
  203. package/behaviors/registry/ui/marketing/organisms/ui-stats-organism.orb +4 -1
  204. package/behaviors/registry/ui/marketing/organisms/ui-step-flow-organism.orb +4 -1
  205. package/behaviors/registry/ui/marketing/organisms/ui-team-organism.orb +4 -1
  206. package/dist/behaviors/exports-reader.js +3704 -2189
  207. package/dist/behaviors/functions/index.d.ts +2638 -254
  208. package/dist/behaviors/functions/index.js +3648 -2190
  209. package/dist/behaviors/index.d.ts +1 -1
  210. package/dist/behaviors/index.js +3705 -2190
  211. package/dist/behaviors/query.js +3704 -2189
  212. package/dist/behaviors-embeddings.hash.json +3 -3
  213. package/dist/behaviors-embeddings.json +289 -213
  214. package/dist/behaviors-registry.json +7900 -587
  215. package/dist/index.d.ts +1 -1
  216. package/dist/index.js +3705 -2190
  217. package/dist/knob-embeddings.hash.json +3 -3
  218. package/dist/knob-embeddings.json +1 -1
  219. package/dist/registry/factory-signatures.json +1 -1
  220. package/package.json +2 -2
@@ -0,0 +1,1648 @@
1
+ {
2
+ "description": "Generic 3D simulation-transport (clock) instrument. Contract: the atom owns the transport and the clock but NOT the physics — Run/Pause/Reset plus a 0.5x/1x/2x/4x speed row drive a running flag and speed multiplier, and a 32ms tick advances steps and simTime by dt x speedMultiplier, emitting SIM_3D_TICK { dt, simTime } each step WITHOUT rendering; a composed sibling trait transitions directly on the SIM_3D_TICK / SIM_3D_UPDATED broadcasts (the same bare-event cascade the lab routers use), applies the domain physics, and owns the scene render — this atom renders no canvas. A caption readout shows steps, sim time, and current speed. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.",
3
+ "ledger": {
4
+ "entries": {
5
+ "ent_01M07REZ9E71GXFJBWFQNRRKP9": {
6
+ "bakedName": "Learn3DSimScene",
7
+ "curName": "Learn3DSimScene",
8
+ "id": "ent_01M07REZ9E71GXFJBWFQNRRKP9",
9
+ "kind": "entity",
10
+ "owner": "workspace",
11
+ "renames": []
12
+ },
13
+ "evt_01M07REZ9E2GJ091W7DXN8TNRS": {
14
+ "bakedName": "INIT",
15
+ "curName": "INIT",
16
+ "id": "evt_01M07REZ9E2GJ091W7DXN8TNRS",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
20
+ "renames": []
21
+ },
22
+ "evt_01M07REZ9G7GAPRM5DR9WDQ69Q": {
23
+ "bakedName": "SIM_3D_UPDATED",
24
+ "curName": "SIM_3D_UPDATED",
25
+ "id": "evt_01M07REZ9G7GAPRM5DR9WDQ69Q",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
29
+ "renames": []
30
+ },
31
+ "evt_01M07REZ9G8Q5ACBKNGK2DY98T": {
32
+ "bakedName": "SIM_3D_TICK",
33
+ "curName": "SIM_3D_TICK",
34
+ "id": "evt_01M07REZ9G8Q5ACBKNGK2DY98T",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
38
+ "renames": []
39
+ },
40
+ "evt_01M07REZ9GB3B15PX19TD5V8FG": {
41
+ "bakedName": "MODE_SELECTED",
42
+ "curName": "MODE_SELECTED",
43
+ "id": "evt_01M07REZ9GB3B15PX19TD5V8FG",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
47
+ "renames": []
48
+ },
49
+ "evt_01M07REZ9GBZQTTBK1M1CWZKDF": {
50
+ "bakedName": "RESET",
51
+ "curName": "RESET",
52
+ "id": "evt_01M07REZ9GBZQTTBK1M1CWZKDF",
53
+ "kind": "event",
54
+ "owner": "workspace",
55
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
56
+ "renames": []
57
+ },
58
+ "evt_01M07REZ9GCADSZNP330KKQGBY": {
59
+ "bakedName": "PAUSE",
60
+ "curName": "PAUSE",
61
+ "id": "evt_01M07REZ9GCADSZNP330KKQGBY",
62
+ "kind": "event",
63
+ "owner": "workspace",
64
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
65
+ "renames": []
66
+ },
67
+ "evt_01M07REZ9GCWV927BK9FH4XGWE": {
68
+ "bakedName": "SPEED_NORMAL",
69
+ "curName": "SPEED_NORMAL",
70
+ "id": "evt_01M07REZ9GCWV927BK9FH4XGWE",
71
+ "kind": "event",
72
+ "owner": "workspace",
73
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
74
+ "renames": []
75
+ },
76
+ "evt_01M07REZ9GDGPW6RCCEP3D4EMJ": {
77
+ "bakedName": "SPEED_QUAD",
78
+ "curName": "SPEED_QUAD",
79
+ "id": "evt_01M07REZ9GDGPW6RCCEP3D4EMJ",
80
+ "kind": "event",
81
+ "owner": "workspace",
82
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
83
+ "renames": []
84
+ },
85
+ "evt_01M07REZ9GQTKWE3EAS9FSE63G": {
86
+ "bakedName": "RUN",
87
+ "curName": "RUN",
88
+ "id": "evt_01M07REZ9GQTKWE3EAS9FSE63G",
89
+ "kind": "event",
90
+ "owner": "workspace",
91
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
92
+ "renames": []
93
+ },
94
+ "evt_01M07REZ9GYHZDG4QWW1EYXBP9": {
95
+ "bakedName": "SPEED_HALF",
96
+ "curName": "SPEED_HALF",
97
+ "id": "evt_01M07REZ9GYHZDG4QWW1EYXBP9",
98
+ "kind": "event",
99
+ "owner": "workspace",
100
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
101
+ "renames": []
102
+ },
103
+ "evt_01M07REZ9GZ6GJR167ZJ2N68DY": {
104
+ "bakedName": "SPEED_DOUBLE",
105
+ "curName": "SPEED_DOUBLE",
106
+ "id": "evt_01M07REZ9GZ6GJR167ZJ2N68DY",
107
+ "kind": "event",
108
+ "owner": "workspace",
109
+ "parent": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
110
+ "renames": []
111
+ },
112
+ "orb_01M07REZ9EHW5BRQW5R24KSKAZ": {
113
+ "bakedName": "LearnSim3DOrbital",
114
+ "curName": "LearnSim3DOrbital",
115
+ "id": "orb_01M07REZ9EHW5BRQW5R24KSKAZ",
116
+ "kind": "orbital",
117
+ "owner": "workspace",
118
+ "renames": []
119
+ },
120
+ "pag_01M07REZ9HYJYMCZZHC8V210CX": {
121
+ "bakedName": "Learn3DSimPage",
122
+ "curName": "Learn3DSimPage",
123
+ "id": "pag_01M07REZ9HYJYMCZZHC8V210CX",
124
+ "kind": "page",
125
+ "owner": "workspace",
126
+ "renames": []
127
+ },
128
+ "trt_01M07REZ9E0HF8ACCCVGGXXQ8E": {
129
+ "bakedName": "Learn3DSimTransport",
130
+ "curName": "Learn3DSimTransport",
131
+ "id": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
132
+ "kind": "trait",
133
+ "owner": "workspace",
134
+ "renames": []
135
+ }
136
+ },
137
+ "schemaVersion": 1
138
+ },
139
+ "name": "std-learn-sim-3d",
140
+ "orbitals": [
141
+ {
142
+ "entity": {
143
+ "fields": [
144
+ {
145
+ "name": "id",
146
+ "required": true,
147
+ "type": "string"
148
+ },
149
+ {
150
+ "default": false,
151
+ "name": "active",
152
+ "type": "boolean"
153
+ },
154
+ {
155
+ "name": "title",
156
+ "type": "string"
157
+ },
158
+ {
159
+ "default": false,
160
+ "name": "running",
161
+ "type": "boolean"
162
+ },
163
+ {
164
+ "default": 1.0,
165
+ "name": "speedMultiplier",
166
+ "type": "number"
167
+ },
168
+ {
169
+ "default": 0.0,
170
+ "name": "steps",
171
+ "type": "number"
172
+ },
173
+ {
174
+ "default": 0.0,
175
+ "name": "simTime",
176
+ "type": "number"
177
+ }
178
+ ],
179
+ "id": "ent_01M07REZ9E71GXFJBWFQNRRKP9",
180
+ "name": "Learn3DSimScene",
181
+ "persistence": "runtime"
182
+ },
183
+ "id": "orb_01M07REZ9EHW5BRQW5R24KSKAZ",
184
+ "name": "LearnSim3DOrbital",
185
+ "pages": [
186
+ {
187
+ "id": "pag_01M07REZ9HYJYMCZZHC8V210CX",
188
+ "name": "Learn3DSimPage",
189
+ "path": "/learn-sim-3d",
190
+ "traits": [
191
+ {
192
+ "ref": "Learn3DSimTransport",
193
+ "refId": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E"
194
+ }
195
+ ]
196
+ }
197
+ ],
198
+ "traits": [
199
+ {
200
+ "category": "interaction",
201
+ "config": {
202
+ "dt": {
203
+ "default": 0.02,
204
+ "description": "Simulated seconds per tick before the speed multiplier; the effective step emitted on SIM_3D_TICK is dt x speedMultiplier.",
205
+ "label": "Timestep",
206
+ "tier": "domain",
207
+ "type": "number"
208
+ },
209
+ "matchMode": {
210
+ "default": "",
211
+ "description": "When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.",
212
+ "label": "Match Mode",
213
+ "tier": "presentation",
214
+ "type": "string"
215
+ },
216
+ "running": {
217
+ "default": true,
218
+ "description": "When true the clock starts ticking on INIT; the Reset arm restores this value.",
219
+ "label": "Running",
220
+ "tier": "domain",
221
+ "type": "boolean"
222
+ },
223
+ "title": {
224
+ "default": "3D Simulation",
225
+ "description": "Title shown above the transport controls.",
226
+ "label": "Title",
227
+ "tier": "presentation",
228
+ "type": "string"
229
+ }
230
+ },
231
+ "emits": [
232
+ {
233
+ "description": "Fires every 32ms tick while running with the effective timestep (config dt x speed multiplier) and accumulated sim time — the clock a composed physics trait subscribes to; a harmless no-op when the atom runs standalone.",
234
+ "event": "SIM_3D_TICK",
235
+ "eventId": "evt_01M07REZ9G8Q5ACBKNGK2DY98T",
236
+ "payloadSchema": [
237
+ {
238
+ "name": "dt",
239
+ "type": "number"
240
+ },
241
+ {
242
+ "name": "simTime",
243
+ "type": "number"
244
+ }
245
+ ],
246
+ "scope": "external",
247
+ "synonyms": "tick, frame, step, clock, sim update, telemetry",
248
+ "tier": "domain"
249
+ },
250
+ {
251
+ "description": "Fires on INIT/MODE_SELECTED/Run/Pause/Reset/speed change with the transport state — running flag, speed multiplier, step counter, and sim time — a composed listener (readout, graph) can subscribe; a harmless no-op when the atom runs standalone.",
252
+ "event": "SIM_3D_UPDATED",
253
+ "eventId": "evt_01M07REZ9G7GAPRM5DR9WDQ69Q",
254
+ "payloadSchema": [
255
+ {
256
+ "name": "running",
257
+ "type": "boolean"
258
+ },
259
+ {
260
+ "name": "speedMultiplier",
261
+ "type": "number"
262
+ },
263
+ {
264
+ "name": "steps",
265
+ "type": "int"
266
+ },
267
+ {
268
+ "name": "simTime",
269
+ "type": "number"
270
+ }
271
+ ],
272
+ "scope": "external",
273
+ "synonyms": "run, pause, reset, speed, transport, sim state",
274
+ "tier": "domain"
275
+ }
276
+ ],
277
+ "entityContract": {
278
+ "provides": [
279
+ "active",
280
+ "running",
281
+ "simTime",
282
+ "speedMultiplier",
283
+ "steps",
284
+ "title"
285
+ ],
286
+ "requires": []
287
+ },
288
+ "entityRebindable": true,
289
+ "entityRefIds": {
290
+ "Learn3DSimScene": "ent_01M07REZ9E71GXFJBWFQNRRKP9"
291
+ },
292
+ "id": "trt_01M07REZ9E0HF8ACCCVGGXXQ8E",
293
+ "linkedEntity": "Learn3DSimScene",
294
+ "linkedEntityId": "ent_01M07REZ9E71GXFJBWFQNRRKP9",
295
+ "name": "Learn3DSimTransport",
296
+ "scope": "instance",
297
+ "stateMachine": {
298
+ "events": [
299
+ {
300
+ "id": "evt_01M07REZ9E2GJ091W7DXN8TNRS",
301
+ "key": "INIT",
302
+ "name": "Initialize"
303
+ },
304
+ {
305
+ "description": "Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.",
306
+ "id": "evt_01M07REZ9GB3B15PX19TD5V8FG",
307
+ "key": "MODE_SELECTED",
308
+ "name": "Mode Selected",
309
+ "payloadSchema": [
310
+ {
311
+ "name": "mode",
312
+ "type": "string"
313
+ }
314
+ ],
315
+ "tier": "domain"
316
+ },
317
+ {
318
+ "id": "evt_01M07REZ9GQTKWE3EAS9FSE63G",
319
+ "key": "RUN",
320
+ "name": "Run"
321
+ },
322
+ {
323
+ "id": "evt_01M07REZ9GCADSZNP330KKQGBY",
324
+ "key": "PAUSE",
325
+ "name": "Pause"
326
+ },
327
+ {
328
+ "id": "evt_01M07REZ9GBZQTTBK1M1CWZKDF",
329
+ "key": "RESET",
330
+ "name": "Reset"
331
+ },
332
+ {
333
+ "id": "evt_01M07REZ9GYHZDG4QWW1EYXBP9",
334
+ "key": "SPEED_HALF",
335
+ "name": "Speed Half"
336
+ },
337
+ {
338
+ "id": "evt_01M07REZ9GCWV927BK9FH4XGWE",
339
+ "key": "SPEED_NORMAL",
340
+ "name": "Speed Normal"
341
+ },
342
+ {
343
+ "id": "evt_01M07REZ9GZ6GJR167ZJ2N68DY",
344
+ "key": "SPEED_DOUBLE",
345
+ "name": "Speed Double"
346
+ },
347
+ {
348
+ "id": "evt_01M07REZ9GDGPW6RCCEP3D4EMJ",
349
+ "key": "SPEED_QUAD",
350
+ "name": "Speed Quad"
351
+ },
352
+ {
353
+ "description": "Fires every 32ms tick while running with the effective timestep (config dt x speed multiplier) and accumulated sim time — the clock a composed physics trait subscribes to; a harmless no-op when the atom runs standalone.",
354
+ "id": "evt_01M07REZ9G8Q5ACBKNGK2DY98T",
355
+ "key": "SIM_3D_TICK",
356
+ "name": "Sim 3d Tick",
357
+ "payloadSchema": [
358
+ {
359
+ "name": "dt",
360
+ "type": "number"
361
+ },
362
+ {
363
+ "name": "simTime",
364
+ "type": "number"
365
+ }
366
+ ],
367
+ "synonyms": "tick, frame, step, clock, sim update, telemetry",
368
+ "tier": "domain"
369
+ },
370
+ {
371
+ "description": "Fires on INIT/MODE_SELECTED/Run/Pause/Reset/speed change with the transport state — running flag, speed multiplier, step counter, and sim time — a composed listener (readout, graph) can subscribe; a harmless no-op when the atom runs standalone.",
372
+ "id": "evt_01M07REZ9G7GAPRM5DR9WDQ69Q",
373
+ "key": "SIM_3D_UPDATED",
374
+ "name": "Sim 3d Updated",
375
+ "payloadSchema": [
376
+ {
377
+ "name": "running",
378
+ "type": "boolean"
379
+ },
380
+ {
381
+ "name": "speedMultiplier",
382
+ "type": "number"
383
+ },
384
+ {
385
+ "name": "steps",
386
+ "type": "int"
387
+ },
388
+ {
389
+ "name": "simTime",
390
+ "type": "number"
391
+ }
392
+ ],
393
+ "synonyms": "run, pause, reset, speed, transport, sim state",
394
+ "tier": "domain"
395
+ }
396
+ ],
397
+ "states": [
398
+ {
399
+ "isInitial": true,
400
+ "name": "idle"
401
+ }
402
+ ],
403
+ "transitions": [
404
+ {
405
+ "effects": [
406
+ [
407
+ "set",
408
+ "@entity.active",
409
+ true
410
+ ],
411
+ [
412
+ "set",
413
+ "@entity.title",
414
+ "@config.title"
415
+ ],
416
+ [
417
+ "set",
418
+ "@entity.running",
419
+ "@config.running"
420
+ ],
421
+ [
422
+ "set",
423
+ "@entity.speedMultiplier",
424
+ 1.0
425
+ ],
426
+ [
427
+ "set",
428
+ "@entity.steps",
429
+ 0.0
430
+ ],
431
+ [
432
+ "set",
433
+ "@entity.simTime",
434
+ 0.0
435
+ ],
436
+ [
437
+ "render-ui",
438
+ "main",
439
+ {
440
+ "children": [
441
+ {
442
+ "children": [
443
+ {
444
+ "content": "@entity.title",
445
+ "type": "typography",
446
+ "variant": "h4"
447
+ },
448
+ {
449
+ "children": [
450
+ {
451
+ "action": "RUN",
452
+ "label": "Run",
453
+ "type": "button",
454
+ "variant": "primary"
455
+ },
456
+ {
457
+ "action": "PAUSE",
458
+ "label": "Pause",
459
+ "type": "button",
460
+ "variant": "secondary"
461
+ },
462
+ {
463
+ "action": "RESET",
464
+ "label": "Reset",
465
+ "type": "button",
466
+ "variant": "ghost"
467
+ }
468
+ ],
469
+ "direction": "horizontal",
470
+ "gap": "sm",
471
+ "type": "stack"
472
+ },
473
+ {
474
+ "children": [
475
+ {
476
+ "action": "SPEED_HALF",
477
+ "label": "0.5x",
478
+ "type": "button",
479
+ "variant": "ghost"
480
+ },
481
+ {
482
+ "action": "SPEED_NORMAL",
483
+ "label": "1x",
484
+ "type": "button",
485
+ "variant": "ghost"
486
+ },
487
+ {
488
+ "action": "SPEED_DOUBLE",
489
+ "label": "2x",
490
+ "type": "button",
491
+ "variant": "ghost"
492
+ },
493
+ {
494
+ "action": "SPEED_QUAD",
495
+ "label": "4x",
496
+ "type": "button",
497
+ "variant": "ghost"
498
+ }
499
+ ],
500
+ "direction": "horizontal",
501
+ "gap": "sm",
502
+ "type": "stack"
503
+ },
504
+ {
505
+ "content": [
506
+ "str/concat",
507
+ "Steps: ",
508
+ "@entity.steps",
509
+ " — sim time: ",
510
+ [
511
+ "math/round",
512
+ "@entity.simTime",
513
+ 1.0
514
+ ],
515
+ " s — speed: ",
516
+ "@entity.speedMultiplier",
517
+ "x"
518
+ ],
519
+ "type": "typography",
520
+ "variant": "caption"
521
+ }
522
+ ],
523
+ "direction": "vertical",
524
+ "gap": "md",
525
+ "type": "stack"
526
+ }
527
+ ],
528
+ "padding": "md",
529
+ "type": "box"
530
+ }
531
+ ],
532
+ [
533
+ "emit",
534
+ "SIM_3D_UPDATED",
535
+ {
536
+ "running": "@entity.running",
537
+ "simTime": "@entity.simTime",
538
+ "speedMultiplier": "@entity.speedMultiplier",
539
+ "steps": "@entity.steps"
540
+ }
541
+ ]
542
+ ],
543
+ "event": "INIT",
544
+ "eventId": "evt_01M07REZ9E2GJ091W7DXN8TNRS",
545
+ "from": "idle",
546
+ "guard": [
547
+ "==",
548
+ "@config.matchMode",
549
+ ""
550
+ ],
551
+ "to": "idle"
552
+ },
553
+ {
554
+ "effects": [
555
+ [
556
+ "set",
557
+ "@entity.active",
558
+ true
559
+ ],
560
+ [
561
+ "set",
562
+ "@entity.title",
563
+ "@config.title"
564
+ ],
565
+ [
566
+ "set",
567
+ "@entity.running",
568
+ "@config.running"
569
+ ],
570
+ [
571
+ "set",
572
+ "@entity.speedMultiplier",
573
+ 1.0
574
+ ],
575
+ [
576
+ "set",
577
+ "@entity.steps",
578
+ 0.0
579
+ ],
580
+ [
581
+ "set",
582
+ "@entity.simTime",
583
+ 0.0
584
+ ],
585
+ [
586
+ "render-ui",
587
+ "main",
588
+ {
589
+ "children": [
590
+ {
591
+ "children": [
592
+ {
593
+ "content": "@entity.title",
594
+ "type": "typography",
595
+ "variant": "h4"
596
+ },
597
+ {
598
+ "children": [
599
+ {
600
+ "action": "RUN",
601
+ "label": "Run",
602
+ "type": "button",
603
+ "variant": "primary"
604
+ },
605
+ {
606
+ "action": "PAUSE",
607
+ "label": "Pause",
608
+ "type": "button",
609
+ "variant": "secondary"
610
+ },
611
+ {
612
+ "action": "RESET",
613
+ "label": "Reset",
614
+ "type": "button",
615
+ "variant": "ghost"
616
+ }
617
+ ],
618
+ "direction": "horizontal",
619
+ "gap": "sm",
620
+ "type": "stack"
621
+ },
622
+ {
623
+ "children": [
624
+ {
625
+ "action": "SPEED_HALF",
626
+ "label": "0.5x",
627
+ "type": "button",
628
+ "variant": "ghost"
629
+ },
630
+ {
631
+ "action": "SPEED_NORMAL",
632
+ "label": "1x",
633
+ "type": "button",
634
+ "variant": "ghost"
635
+ },
636
+ {
637
+ "action": "SPEED_DOUBLE",
638
+ "label": "2x",
639
+ "type": "button",
640
+ "variant": "ghost"
641
+ },
642
+ {
643
+ "action": "SPEED_QUAD",
644
+ "label": "4x",
645
+ "type": "button",
646
+ "variant": "ghost"
647
+ }
648
+ ],
649
+ "direction": "horizontal",
650
+ "gap": "sm",
651
+ "type": "stack"
652
+ },
653
+ {
654
+ "content": [
655
+ "str/concat",
656
+ "Steps: ",
657
+ "@entity.steps",
658
+ " — sim time: ",
659
+ [
660
+ "math/round",
661
+ "@entity.simTime",
662
+ 1.0
663
+ ],
664
+ " s — speed: ",
665
+ "@entity.speedMultiplier",
666
+ "x"
667
+ ],
668
+ "type": "typography",
669
+ "variant": "caption"
670
+ }
671
+ ],
672
+ "direction": "vertical",
673
+ "gap": "md",
674
+ "type": "stack"
675
+ }
676
+ ],
677
+ "padding": "md",
678
+ "type": "box"
679
+ }
680
+ ],
681
+ [
682
+ "emit",
683
+ "SIM_3D_UPDATED",
684
+ {
685
+ "running": "@entity.running",
686
+ "simTime": "@entity.simTime",
687
+ "speedMultiplier": "@entity.speedMultiplier",
688
+ "steps": "@entity.steps"
689
+ }
690
+ ]
691
+ ],
692
+ "event": "MODE_SELECTED",
693
+ "eventId": "evt_01M07REZ9GB3B15PX19TD5V8FG",
694
+ "from": "idle",
695
+ "guard": [
696
+ "==",
697
+ "@payload.mode",
698
+ "@config.matchMode"
699
+ ],
700
+ "to": "idle"
701
+ },
702
+ {
703
+ "effects": [
704
+ [
705
+ "set",
706
+ "@entity.running",
707
+ true
708
+ ],
709
+ [
710
+ "render-ui",
711
+ "main",
712
+ {
713
+ "children": [
714
+ {
715
+ "children": [
716
+ {
717
+ "content": "@entity.title",
718
+ "type": "typography",
719
+ "variant": "h4"
720
+ },
721
+ {
722
+ "children": [
723
+ {
724
+ "action": "RUN",
725
+ "label": "Run",
726
+ "type": "button",
727
+ "variant": "primary"
728
+ },
729
+ {
730
+ "action": "PAUSE",
731
+ "label": "Pause",
732
+ "type": "button",
733
+ "variant": "secondary"
734
+ },
735
+ {
736
+ "action": "RESET",
737
+ "label": "Reset",
738
+ "type": "button",
739
+ "variant": "ghost"
740
+ }
741
+ ],
742
+ "direction": "horizontal",
743
+ "gap": "sm",
744
+ "type": "stack"
745
+ },
746
+ {
747
+ "children": [
748
+ {
749
+ "action": "SPEED_HALF",
750
+ "label": "0.5x",
751
+ "type": "button",
752
+ "variant": "ghost"
753
+ },
754
+ {
755
+ "action": "SPEED_NORMAL",
756
+ "label": "1x",
757
+ "type": "button",
758
+ "variant": "ghost"
759
+ },
760
+ {
761
+ "action": "SPEED_DOUBLE",
762
+ "label": "2x",
763
+ "type": "button",
764
+ "variant": "ghost"
765
+ },
766
+ {
767
+ "action": "SPEED_QUAD",
768
+ "label": "4x",
769
+ "type": "button",
770
+ "variant": "ghost"
771
+ }
772
+ ],
773
+ "direction": "horizontal",
774
+ "gap": "sm",
775
+ "type": "stack"
776
+ },
777
+ {
778
+ "content": [
779
+ "str/concat",
780
+ "Steps: ",
781
+ "@entity.steps",
782
+ " — sim time: ",
783
+ [
784
+ "math/round",
785
+ "@entity.simTime",
786
+ 1.0
787
+ ],
788
+ " s — speed: ",
789
+ "@entity.speedMultiplier",
790
+ "x"
791
+ ],
792
+ "type": "typography",
793
+ "variant": "caption"
794
+ }
795
+ ],
796
+ "direction": "vertical",
797
+ "gap": "md",
798
+ "type": "stack"
799
+ }
800
+ ],
801
+ "padding": "md",
802
+ "type": "box"
803
+ }
804
+ ],
805
+ [
806
+ "emit",
807
+ "SIM_3D_UPDATED",
808
+ {
809
+ "running": "@entity.running",
810
+ "simTime": "@entity.simTime",
811
+ "speedMultiplier": "@entity.speedMultiplier",
812
+ "steps": "@entity.steps"
813
+ }
814
+ ]
815
+ ],
816
+ "event": "RUN",
817
+ "eventId": "evt_01M07REZ9GQTKWE3EAS9FSE63G",
818
+ "from": "idle",
819
+ "guard": [
820
+ "==",
821
+ "@entity.active",
822
+ true
823
+ ],
824
+ "to": "idle"
825
+ },
826
+ {
827
+ "effects": [
828
+ [
829
+ "set",
830
+ "@entity.running",
831
+ false
832
+ ],
833
+ [
834
+ "render-ui",
835
+ "main",
836
+ {
837
+ "children": [
838
+ {
839
+ "children": [
840
+ {
841
+ "content": "@entity.title",
842
+ "type": "typography",
843
+ "variant": "h4"
844
+ },
845
+ {
846
+ "children": [
847
+ {
848
+ "action": "RUN",
849
+ "label": "Run",
850
+ "type": "button",
851
+ "variant": "primary"
852
+ },
853
+ {
854
+ "action": "PAUSE",
855
+ "label": "Pause",
856
+ "type": "button",
857
+ "variant": "secondary"
858
+ },
859
+ {
860
+ "action": "RESET",
861
+ "label": "Reset",
862
+ "type": "button",
863
+ "variant": "ghost"
864
+ }
865
+ ],
866
+ "direction": "horizontal",
867
+ "gap": "sm",
868
+ "type": "stack"
869
+ },
870
+ {
871
+ "children": [
872
+ {
873
+ "action": "SPEED_HALF",
874
+ "label": "0.5x",
875
+ "type": "button",
876
+ "variant": "ghost"
877
+ },
878
+ {
879
+ "action": "SPEED_NORMAL",
880
+ "label": "1x",
881
+ "type": "button",
882
+ "variant": "ghost"
883
+ },
884
+ {
885
+ "action": "SPEED_DOUBLE",
886
+ "label": "2x",
887
+ "type": "button",
888
+ "variant": "ghost"
889
+ },
890
+ {
891
+ "action": "SPEED_QUAD",
892
+ "label": "4x",
893
+ "type": "button",
894
+ "variant": "ghost"
895
+ }
896
+ ],
897
+ "direction": "horizontal",
898
+ "gap": "sm",
899
+ "type": "stack"
900
+ },
901
+ {
902
+ "content": [
903
+ "str/concat",
904
+ "Steps: ",
905
+ "@entity.steps",
906
+ " — sim time: ",
907
+ [
908
+ "math/round",
909
+ "@entity.simTime",
910
+ 1.0
911
+ ],
912
+ " s — speed: ",
913
+ "@entity.speedMultiplier",
914
+ "x"
915
+ ],
916
+ "type": "typography",
917
+ "variant": "caption"
918
+ }
919
+ ],
920
+ "direction": "vertical",
921
+ "gap": "md",
922
+ "type": "stack"
923
+ }
924
+ ],
925
+ "padding": "md",
926
+ "type": "box"
927
+ }
928
+ ],
929
+ [
930
+ "emit",
931
+ "SIM_3D_UPDATED",
932
+ {
933
+ "running": "@entity.running",
934
+ "simTime": "@entity.simTime",
935
+ "speedMultiplier": "@entity.speedMultiplier",
936
+ "steps": "@entity.steps"
937
+ }
938
+ ]
939
+ ],
940
+ "event": "PAUSE",
941
+ "eventId": "evt_01M07REZ9GCADSZNP330KKQGBY",
942
+ "from": "idle",
943
+ "guard": [
944
+ "==",
945
+ "@entity.active",
946
+ true
947
+ ],
948
+ "to": "idle"
949
+ },
950
+ {
951
+ "effects": [
952
+ [
953
+ "set",
954
+ "@entity.running",
955
+ "@config.running"
956
+ ],
957
+ [
958
+ "set",
959
+ "@entity.speedMultiplier",
960
+ 1.0
961
+ ],
962
+ [
963
+ "set",
964
+ "@entity.steps",
965
+ 0.0
966
+ ],
967
+ [
968
+ "set",
969
+ "@entity.simTime",
970
+ 0.0
971
+ ],
972
+ [
973
+ "render-ui",
974
+ "main",
975
+ {
976
+ "children": [
977
+ {
978
+ "children": [
979
+ {
980
+ "content": "@entity.title",
981
+ "type": "typography",
982
+ "variant": "h4"
983
+ },
984
+ {
985
+ "children": [
986
+ {
987
+ "action": "RUN",
988
+ "label": "Run",
989
+ "type": "button",
990
+ "variant": "primary"
991
+ },
992
+ {
993
+ "action": "PAUSE",
994
+ "label": "Pause",
995
+ "type": "button",
996
+ "variant": "secondary"
997
+ },
998
+ {
999
+ "action": "RESET",
1000
+ "label": "Reset",
1001
+ "type": "button",
1002
+ "variant": "ghost"
1003
+ }
1004
+ ],
1005
+ "direction": "horizontal",
1006
+ "gap": "sm",
1007
+ "type": "stack"
1008
+ },
1009
+ {
1010
+ "children": [
1011
+ {
1012
+ "action": "SPEED_HALF",
1013
+ "label": "0.5x",
1014
+ "type": "button",
1015
+ "variant": "ghost"
1016
+ },
1017
+ {
1018
+ "action": "SPEED_NORMAL",
1019
+ "label": "1x",
1020
+ "type": "button",
1021
+ "variant": "ghost"
1022
+ },
1023
+ {
1024
+ "action": "SPEED_DOUBLE",
1025
+ "label": "2x",
1026
+ "type": "button",
1027
+ "variant": "ghost"
1028
+ },
1029
+ {
1030
+ "action": "SPEED_QUAD",
1031
+ "label": "4x",
1032
+ "type": "button",
1033
+ "variant": "ghost"
1034
+ }
1035
+ ],
1036
+ "direction": "horizontal",
1037
+ "gap": "sm",
1038
+ "type": "stack"
1039
+ },
1040
+ {
1041
+ "content": [
1042
+ "str/concat",
1043
+ "Steps: ",
1044
+ "@entity.steps",
1045
+ " — sim time: ",
1046
+ [
1047
+ "math/round",
1048
+ "@entity.simTime",
1049
+ 1.0
1050
+ ],
1051
+ " s — speed: ",
1052
+ "@entity.speedMultiplier",
1053
+ "x"
1054
+ ],
1055
+ "type": "typography",
1056
+ "variant": "caption"
1057
+ }
1058
+ ],
1059
+ "direction": "vertical",
1060
+ "gap": "md",
1061
+ "type": "stack"
1062
+ }
1063
+ ],
1064
+ "padding": "md",
1065
+ "type": "box"
1066
+ }
1067
+ ],
1068
+ [
1069
+ "emit",
1070
+ "SIM_3D_UPDATED",
1071
+ {
1072
+ "running": "@entity.running",
1073
+ "simTime": "@entity.simTime",
1074
+ "speedMultiplier": "@entity.speedMultiplier",
1075
+ "steps": "@entity.steps"
1076
+ }
1077
+ ]
1078
+ ],
1079
+ "event": "RESET",
1080
+ "eventId": "evt_01M07REZ9GBZQTTBK1M1CWZKDF",
1081
+ "from": "idle",
1082
+ "guard": [
1083
+ "==",
1084
+ "@entity.active",
1085
+ true
1086
+ ],
1087
+ "to": "idle"
1088
+ },
1089
+ {
1090
+ "effects": [
1091
+ [
1092
+ "set",
1093
+ "@entity.speedMultiplier",
1094
+ 0.5
1095
+ ],
1096
+ [
1097
+ "render-ui",
1098
+ "main",
1099
+ {
1100
+ "children": [
1101
+ {
1102
+ "children": [
1103
+ {
1104
+ "content": "@entity.title",
1105
+ "type": "typography",
1106
+ "variant": "h4"
1107
+ },
1108
+ {
1109
+ "children": [
1110
+ {
1111
+ "action": "RUN",
1112
+ "label": "Run",
1113
+ "type": "button",
1114
+ "variant": "primary"
1115
+ },
1116
+ {
1117
+ "action": "PAUSE",
1118
+ "label": "Pause",
1119
+ "type": "button",
1120
+ "variant": "secondary"
1121
+ },
1122
+ {
1123
+ "action": "RESET",
1124
+ "label": "Reset",
1125
+ "type": "button",
1126
+ "variant": "ghost"
1127
+ }
1128
+ ],
1129
+ "direction": "horizontal",
1130
+ "gap": "sm",
1131
+ "type": "stack"
1132
+ },
1133
+ {
1134
+ "children": [
1135
+ {
1136
+ "action": "SPEED_HALF",
1137
+ "label": "0.5x",
1138
+ "type": "button",
1139
+ "variant": "ghost"
1140
+ },
1141
+ {
1142
+ "action": "SPEED_NORMAL",
1143
+ "label": "1x",
1144
+ "type": "button",
1145
+ "variant": "ghost"
1146
+ },
1147
+ {
1148
+ "action": "SPEED_DOUBLE",
1149
+ "label": "2x",
1150
+ "type": "button",
1151
+ "variant": "ghost"
1152
+ },
1153
+ {
1154
+ "action": "SPEED_QUAD",
1155
+ "label": "4x",
1156
+ "type": "button",
1157
+ "variant": "ghost"
1158
+ }
1159
+ ],
1160
+ "direction": "horizontal",
1161
+ "gap": "sm",
1162
+ "type": "stack"
1163
+ },
1164
+ {
1165
+ "content": [
1166
+ "str/concat",
1167
+ "Steps: ",
1168
+ "@entity.steps",
1169
+ " — sim time: ",
1170
+ [
1171
+ "math/round",
1172
+ "@entity.simTime",
1173
+ 1.0
1174
+ ],
1175
+ " s — speed: ",
1176
+ "@entity.speedMultiplier",
1177
+ "x"
1178
+ ],
1179
+ "type": "typography",
1180
+ "variant": "caption"
1181
+ }
1182
+ ],
1183
+ "direction": "vertical",
1184
+ "gap": "md",
1185
+ "type": "stack"
1186
+ }
1187
+ ],
1188
+ "padding": "md",
1189
+ "type": "box"
1190
+ }
1191
+ ],
1192
+ [
1193
+ "emit",
1194
+ "SIM_3D_UPDATED",
1195
+ {
1196
+ "running": "@entity.running",
1197
+ "simTime": "@entity.simTime",
1198
+ "speedMultiplier": "@entity.speedMultiplier",
1199
+ "steps": "@entity.steps"
1200
+ }
1201
+ ]
1202
+ ],
1203
+ "event": "SPEED_HALF",
1204
+ "eventId": "evt_01M07REZ9GYHZDG4QWW1EYXBP9",
1205
+ "from": "idle",
1206
+ "guard": [
1207
+ "==",
1208
+ "@entity.active",
1209
+ true
1210
+ ],
1211
+ "to": "idle"
1212
+ },
1213
+ {
1214
+ "effects": [
1215
+ [
1216
+ "set",
1217
+ "@entity.speedMultiplier",
1218
+ 1.0
1219
+ ],
1220
+ [
1221
+ "render-ui",
1222
+ "main",
1223
+ {
1224
+ "children": [
1225
+ {
1226
+ "children": [
1227
+ {
1228
+ "content": "@entity.title",
1229
+ "type": "typography",
1230
+ "variant": "h4"
1231
+ },
1232
+ {
1233
+ "children": [
1234
+ {
1235
+ "action": "RUN",
1236
+ "label": "Run",
1237
+ "type": "button",
1238
+ "variant": "primary"
1239
+ },
1240
+ {
1241
+ "action": "PAUSE",
1242
+ "label": "Pause",
1243
+ "type": "button",
1244
+ "variant": "secondary"
1245
+ },
1246
+ {
1247
+ "action": "RESET",
1248
+ "label": "Reset",
1249
+ "type": "button",
1250
+ "variant": "ghost"
1251
+ }
1252
+ ],
1253
+ "direction": "horizontal",
1254
+ "gap": "sm",
1255
+ "type": "stack"
1256
+ },
1257
+ {
1258
+ "children": [
1259
+ {
1260
+ "action": "SPEED_HALF",
1261
+ "label": "0.5x",
1262
+ "type": "button",
1263
+ "variant": "ghost"
1264
+ },
1265
+ {
1266
+ "action": "SPEED_NORMAL",
1267
+ "label": "1x",
1268
+ "type": "button",
1269
+ "variant": "ghost"
1270
+ },
1271
+ {
1272
+ "action": "SPEED_DOUBLE",
1273
+ "label": "2x",
1274
+ "type": "button",
1275
+ "variant": "ghost"
1276
+ },
1277
+ {
1278
+ "action": "SPEED_QUAD",
1279
+ "label": "4x",
1280
+ "type": "button",
1281
+ "variant": "ghost"
1282
+ }
1283
+ ],
1284
+ "direction": "horizontal",
1285
+ "gap": "sm",
1286
+ "type": "stack"
1287
+ },
1288
+ {
1289
+ "content": [
1290
+ "str/concat",
1291
+ "Steps: ",
1292
+ "@entity.steps",
1293
+ " — sim time: ",
1294
+ [
1295
+ "math/round",
1296
+ "@entity.simTime",
1297
+ 1.0
1298
+ ],
1299
+ " s — speed: ",
1300
+ "@entity.speedMultiplier",
1301
+ "x"
1302
+ ],
1303
+ "type": "typography",
1304
+ "variant": "caption"
1305
+ }
1306
+ ],
1307
+ "direction": "vertical",
1308
+ "gap": "md",
1309
+ "type": "stack"
1310
+ }
1311
+ ],
1312
+ "padding": "md",
1313
+ "type": "box"
1314
+ }
1315
+ ],
1316
+ [
1317
+ "emit",
1318
+ "SIM_3D_UPDATED",
1319
+ {
1320
+ "running": "@entity.running",
1321
+ "simTime": "@entity.simTime",
1322
+ "speedMultiplier": "@entity.speedMultiplier",
1323
+ "steps": "@entity.steps"
1324
+ }
1325
+ ]
1326
+ ],
1327
+ "event": "SPEED_NORMAL",
1328
+ "eventId": "evt_01M07REZ9GCWV927BK9FH4XGWE",
1329
+ "from": "idle",
1330
+ "guard": [
1331
+ "==",
1332
+ "@entity.active",
1333
+ true
1334
+ ],
1335
+ "to": "idle"
1336
+ },
1337
+ {
1338
+ "effects": [
1339
+ [
1340
+ "set",
1341
+ "@entity.speedMultiplier",
1342
+ 2.0
1343
+ ],
1344
+ [
1345
+ "render-ui",
1346
+ "main",
1347
+ {
1348
+ "children": [
1349
+ {
1350
+ "children": [
1351
+ {
1352
+ "content": "@entity.title",
1353
+ "type": "typography",
1354
+ "variant": "h4"
1355
+ },
1356
+ {
1357
+ "children": [
1358
+ {
1359
+ "action": "RUN",
1360
+ "label": "Run",
1361
+ "type": "button",
1362
+ "variant": "primary"
1363
+ },
1364
+ {
1365
+ "action": "PAUSE",
1366
+ "label": "Pause",
1367
+ "type": "button",
1368
+ "variant": "secondary"
1369
+ },
1370
+ {
1371
+ "action": "RESET",
1372
+ "label": "Reset",
1373
+ "type": "button",
1374
+ "variant": "ghost"
1375
+ }
1376
+ ],
1377
+ "direction": "horizontal",
1378
+ "gap": "sm",
1379
+ "type": "stack"
1380
+ },
1381
+ {
1382
+ "children": [
1383
+ {
1384
+ "action": "SPEED_HALF",
1385
+ "label": "0.5x",
1386
+ "type": "button",
1387
+ "variant": "ghost"
1388
+ },
1389
+ {
1390
+ "action": "SPEED_NORMAL",
1391
+ "label": "1x",
1392
+ "type": "button",
1393
+ "variant": "ghost"
1394
+ },
1395
+ {
1396
+ "action": "SPEED_DOUBLE",
1397
+ "label": "2x",
1398
+ "type": "button",
1399
+ "variant": "ghost"
1400
+ },
1401
+ {
1402
+ "action": "SPEED_QUAD",
1403
+ "label": "4x",
1404
+ "type": "button",
1405
+ "variant": "ghost"
1406
+ }
1407
+ ],
1408
+ "direction": "horizontal",
1409
+ "gap": "sm",
1410
+ "type": "stack"
1411
+ },
1412
+ {
1413
+ "content": [
1414
+ "str/concat",
1415
+ "Steps: ",
1416
+ "@entity.steps",
1417
+ " — sim time: ",
1418
+ [
1419
+ "math/round",
1420
+ "@entity.simTime",
1421
+ 1.0
1422
+ ],
1423
+ " s — speed: ",
1424
+ "@entity.speedMultiplier",
1425
+ "x"
1426
+ ],
1427
+ "type": "typography",
1428
+ "variant": "caption"
1429
+ }
1430
+ ],
1431
+ "direction": "vertical",
1432
+ "gap": "md",
1433
+ "type": "stack"
1434
+ }
1435
+ ],
1436
+ "padding": "md",
1437
+ "type": "box"
1438
+ }
1439
+ ],
1440
+ [
1441
+ "emit",
1442
+ "SIM_3D_UPDATED",
1443
+ {
1444
+ "running": "@entity.running",
1445
+ "simTime": "@entity.simTime",
1446
+ "speedMultiplier": "@entity.speedMultiplier",
1447
+ "steps": "@entity.steps"
1448
+ }
1449
+ ]
1450
+ ],
1451
+ "event": "SPEED_DOUBLE",
1452
+ "eventId": "evt_01M07REZ9GZ6GJR167ZJ2N68DY",
1453
+ "from": "idle",
1454
+ "guard": [
1455
+ "==",
1456
+ "@entity.active",
1457
+ true
1458
+ ],
1459
+ "to": "idle"
1460
+ },
1461
+ {
1462
+ "effects": [
1463
+ [
1464
+ "set",
1465
+ "@entity.speedMultiplier",
1466
+ 4.0
1467
+ ],
1468
+ [
1469
+ "render-ui",
1470
+ "main",
1471
+ {
1472
+ "children": [
1473
+ {
1474
+ "children": [
1475
+ {
1476
+ "content": "@entity.title",
1477
+ "type": "typography",
1478
+ "variant": "h4"
1479
+ },
1480
+ {
1481
+ "children": [
1482
+ {
1483
+ "action": "RUN",
1484
+ "label": "Run",
1485
+ "type": "button",
1486
+ "variant": "primary"
1487
+ },
1488
+ {
1489
+ "action": "PAUSE",
1490
+ "label": "Pause",
1491
+ "type": "button",
1492
+ "variant": "secondary"
1493
+ },
1494
+ {
1495
+ "action": "RESET",
1496
+ "label": "Reset",
1497
+ "type": "button",
1498
+ "variant": "ghost"
1499
+ }
1500
+ ],
1501
+ "direction": "horizontal",
1502
+ "gap": "sm",
1503
+ "type": "stack"
1504
+ },
1505
+ {
1506
+ "children": [
1507
+ {
1508
+ "action": "SPEED_HALF",
1509
+ "label": "0.5x",
1510
+ "type": "button",
1511
+ "variant": "ghost"
1512
+ },
1513
+ {
1514
+ "action": "SPEED_NORMAL",
1515
+ "label": "1x",
1516
+ "type": "button",
1517
+ "variant": "ghost"
1518
+ },
1519
+ {
1520
+ "action": "SPEED_DOUBLE",
1521
+ "label": "2x",
1522
+ "type": "button",
1523
+ "variant": "ghost"
1524
+ },
1525
+ {
1526
+ "action": "SPEED_QUAD",
1527
+ "label": "4x",
1528
+ "type": "button",
1529
+ "variant": "ghost"
1530
+ }
1531
+ ],
1532
+ "direction": "horizontal",
1533
+ "gap": "sm",
1534
+ "type": "stack"
1535
+ },
1536
+ {
1537
+ "content": [
1538
+ "str/concat",
1539
+ "Steps: ",
1540
+ "@entity.steps",
1541
+ " — sim time: ",
1542
+ [
1543
+ "math/round",
1544
+ "@entity.simTime",
1545
+ 1.0
1546
+ ],
1547
+ " s — speed: ",
1548
+ "@entity.speedMultiplier",
1549
+ "x"
1550
+ ],
1551
+ "type": "typography",
1552
+ "variant": "caption"
1553
+ }
1554
+ ],
1555
+ "direction": "vertical",
1556
+ "gap": "md",
1557
+ "type": "stack"
1558
+ }
1559
+ ],
1560
+ "padding": "md",
1561
+ "type": "box"
1562
+ }
1563
+ ],
1564
+ [
1565
+ "emit",
1566
+ "SIM_3D_UPDATED",
1567
+ {
1568
+ "running": "@entity.running",
1569
+ "simTime": "@entity.simTime",
1570
+ "speedMultiplier": "@entity.speedMultiplier",
1571
+ "steps": "@entity.steps"
1572
+ }
1573
+ ]
1574
+ ],
1575
+ "event": "SPEED_QUAD",
1576
+ "eventId": "evt_01M07REZ9GDGPW6RCCEP3D4EMJ",
1577
+ "from": "idle",
1578
+ "guard": [
1579
+ "==",
1580
+ "@entity.active",
1581
+ true
1582
+ ],
1583
+ "to": "idle"
1584
+ }
1585
+ ]
1586
+ },
1587
+ "ticks": [
1588
+ {
1589
+ "effects": [
1590
+ [
1591
+ "let",
1592
+ [
1593
+ [
1594
+ "dtEff",
1595
+ [
1596
+ "*",
1597
+ "@config.dt",
1598
+ "@entity.speedMultiplier"
1599
+ ]
1600
+ ]
1601
+ ],
1602
+ [
1603
+ "do",
1604
+ [
1605
+ "set",
1606
+ "@entity.steps",
1607
+ [
1608
+ "+",
1609
+ "@entity.steps",
1610
+ 1.0
1611
+ ]
1612
+ ],
1613
+ [
1614
+ "set",
1615
+ "@entity.simTime",
1616
+ [
1617
+ "+",
1618
+ "@entity.simTime",
1619
+ "@dtEff"
1620
+ ]
1621
+ ],
1622
+ [
1623
+ "emit",
1624
+ "SIM_3D_TICK",
1625
+ {
1626
+ "dt": "@dtEff",
1627
+ "simTime": "@entity.simTime"
1628
+ }
1629
+ ]
1630
+ ]
1631
+ ]
1632
+ ],
1633
+ "guard": [
1634
+ "==",
1635
+ "@entity.running",
1636
+ true
1637
+ ],
1638
+ "interval": 32.0,
1639
+ "name": "simTick"
1640
+ }
1641
+ ]
1642
+ }
1643
+ ]
1644
+ }
1645
+ ],
1646
+ "schemaVersion": 1,
1647
+ "version": "1.0.0"
1648
+ }