@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,3183 @@
1
+ {
2
+ "description": "Generic coupled-dynamics simulation — two named quantities evolve each tick under a config-selected interaction family (predator-prey: dP = aP − bPQ, dQ = cbPQ − dQ; epidemic: dS = −aSI, dI = aSI − bI; kinetics: dP = −aP, dQ = aP − bQ), drawn live as two time-series curves while Run is engaged. The two governing rates are exposed as sliders the learner can retune mid-run, and shock buttons inject or remove a burst of the first quantity so the learner feels how the coupled system absorbs disturbance. All names, coefficients, and scales are config-declared, so one mechanism serves rabbits and foxes, infection and recovery, reactant and product, adopters and churn. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.",
3
+ "ledger": {
4
+ "entries": {
5
+ "ent_01M07580NN7GQ33ZWK7VQA2FHH": {
6
+ "bakedName": "CoupledSimScene",
7
+ "curName": "CoupledSimScene",
8
+ "id": "ent_01M07580NN7GQ33ZWK7VQA2FHH",
9
+ "kind": "entity",
10
+ "owner": "workspace",
11
+ "renames": []
12
+ },
13
+ "evt_01M07580NPAZNGHYHWGA4K622M": {
14
+ "bakedName": "INIT",
15
+ "curName": "INIT",
16
+ "id": "evt_01M07580NPAZNGHYHWGA4K622M",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
20
+ "renames": []
21
+ },
22
+ "evt_01M07580NZG8GTJXJCXM4HAW12": {
23
+ "bakedName": "MODE_SELECTED",
24
+ "curName": "MODE_SELECTED",
25
+ "id": "evt_01M07580NZG8GTJXJCXM4HAW12",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
29
+ "renames": []
30
+ },
31
+ "evt_01M07580P01GV3DKXDN4CH6BPD": {
32
+ "bakedName": "SET_B",
33
+ "curName": "SET_B",
34
+ "id": "evt_01M07580P01GV3DKXDN4CH6BPD",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
38
+ "renames": []
39
+ },
40
+ "evt_01M07580P02V5XRN0B2ABP1MXE": {
41
+ "bakedName": "COEFS_CHANGED",
42
+ "curName": "COEFS_CHANGED",
43
+ "id": "evt_01M07580P02V5XRN0B2ABP1MXE",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
47
+ "renames": []
48
+ },
49
+ "evt_01M07580P06DQNTB9WYS6R2GNC": {
50
+ "bakedName": "RUN",
51
+ "curName": "RUN",
52
+ "id": "evt_01M07580P06DQNTB9WYS6R2GNC",
53
+ "kind": "event",
54
+ "owner": "workspace",
55
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
56
+ "renames": []
57
+ },
58
+ "evt_01M07580P0A9WNF511YN5F64NG": {
59
+ "bakedName": "PAUSE",
60
+ "curName": "PAUSE",
61
+ "id": "evt_01M07580P0A9WNF511YN5F64NG",
62
+ "kind": "event",
63
+ "owner": "workspace",
64
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
65
+ "renames": []
66
+ },
67
+ "evt_01M07580P0CCW9GF6P9MHXZNTW": {
68
+ "bakedName": "RUN_TOGGLED",
69
+ "curName": "RUN_TOGGLED",
70
+ "id": "evt_01M07580P0CCW9GF6P9MHXZNTW",
71
+ "kind": "event",
72
+ "owner": "workspace",
73
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
74
+ "renames": []
75
+ },
76
+ "evt_01M07580P0CSMYHGC4WXW16Q4C": {
77
+ "bakedName": "RESET",
78
+ "curName": "RESET",
79
+ "id": "evt_01M07580P0CSMYHGC4WXW16Q4C",
80
+ "kind": "event",
81
+ "owner": "workspace",
82
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
83
+ "renames": []
84
+ },
85
+ "evt_01M07580P0GPP30NM6FMGYH32V": {
86
+ "bakedName": "SET_A",
87
+ "curName": "SET_A",
88
+ "id": "evt_01M07580P0GPP30NM6FMGYH32V",
89
+ "kind": "event",
90
+ "owner": "workspace",
91
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
92
+ "renames": []
93
+ },
94
+ "evt_01M07580P0HZJEK1MA32BK92W6": {
95
+ "bakedName": "SIM_RESET",
96
+ "curName": "SIM_RESET",
97
+ "id": "evt_01M07580P0HZJEK1MA32BK92W6",
98
+ "kind": "event",
99
+ "owner": "workspace",
100
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
101
+ "renames": []
102
+ },
103
+ "evt_01M07580P0TJ5NZE7BGSPD00W6": {
104
+ "bakedName": "SHOCK",
105
+ "curName": "SHOCK",
106
+ "id": "evt_01M07580P0TJ5NZE7BGSPD00W6",
107
+ "kind": "event",
108
+ "owner": "workspace",
109
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
110
+ "renames": []
111
+ },
112
+ "evt_01M07580P0TMF96MBE054THMHQ": {
113
+ "bakedName": "SHOCK_APPLIED",
114
+ "curName": "SHOCK_APPLIED",
115
+ "id": "evt_01M07580P0TMF96MBE054THMHQ",
116
+ "kind": "event",
117
+ "owner": "workspace",
118
+ "parent": "trt_01M07580NPVHNKAG807AY3AGFP",
119
+ "renames": []
120
+ },
121
+ "orb_01M07580NNXV7ZX3N81A85S1PY": {
122
+ "bakedName": "CoupledSimOrbital",
123
+ "curName": "CoupledSimOrbital",
124
+ "id": "orb_01M07580NNXV7ZX3N81A85S1PY",
125
+ "kind": "orbital",
126
+ "owner": "workspace",
127
+ "renames": []
128
+ },
129
+ "pag_01M07580P3FJ3M2VVZ6MVSPE16": {
130
+ "bakedName": "CoupledSimPage",
131
+ "curName": "CoupledSimPage",
132
+ "id": "pag_01M07580P3FJ3M2VVZ6MVSPE16",
133
+ "kind": "page",
134
+ "owner": "workspace",
135
+ "renames": []
136
+ },
137
+ "trt_01M07580NPVHNKAG807AY3AGFP": {
138
+ "bakedName": "CoupledSimSim",
139
+ "curName": "CoupledSimSim",
140
+ "id": "trt_01M07580NPVHNKAG807AY3AGFP",
141
+ "kind": "trait",
142
+ "owner": "workspace",
143
+ "renames": []
144
+ }
145
+ },
146
+ "schemaVersion": 1
147
+ },
148
+ "name": "std-learn-coupled-sim",
149
+ "orbitals": [
150
+ {
151
+ "entity": {
152
+ "fields": [
153
+ {
154
+ "name": "id",
155
+ "required": true,
156
+ "type": "string"
157
+ },
158
+ {
159
+ "default": false,
160
+ "name": "active",
161
+ "type": "boolean"
162
+ },
163
+ {
164
+ "name": "title",
165
+ "type": "string"
166
+ },
167
+ {
168
+ "default": 0.0,
169
+ "name": "t",
170
+ "type": "number"
171
+ },
172
+ {
173
+ "default": 0.0,
174
+ "name": "p",
175
+ "type": "number"
176
+ },
177
+ {
178
+ "default": 0.0,
179
+ "name": "q",
180
+ "type": "number"
181
+ },
182
+ {
183
+ "default": 0.0,
184
+ "name": "coefA",
185
+ "type": "number"
186
+ },
187
+ {
188
+ "default": 0.0,
189
+ "name": "coefB",
190
+ "type": "number"
191
+ },
192
+ {
193
+ "default": false,
194
+ "name": "running",
195
+ "type": "boolean"
196
+ },
197
+ {
198
+ "items": {
199
+ "properties": {
200
+ "x": {
201
+ "name": "x",
202
+ "required": true,
203
+ "type": "number"
204
+ },
205
+ "y": {
206
+ "name": "y",
207
+ "required": true,
208
+ "type": "number"
209
+ }
210
+ },
211
+ "type": "object"
212
+ },
213
+ "name": "pSamples",
214
+ "type": "array"
215
+ },
216
+ {
217
+ "items": {
218
+ "properties": {
219
+ "x": {
220
+ "name": "x",
221
+ "required": true,
222
+ "type": "number"
223
+ },
224
+ "y": {
225
+ "name": "y",
226
+ "required": true,
227
+ "type": "number"
228
+ }
229
+ },
230
+ "type": "object"
231
+ },
232
+ "name": "qSamples",
233
+ "type": "array"
234
+ },
235
+ {
236
+ "items": {
237
+ "properties": {
238
+ "color": {
239
+ "name": "color",
240
+ "required": false,
241
+ "type": "string"
242
+ },
243
+ "label": {
244
+ "name": "label",
245
+ "required": false,
246
+ "type": "string"
247
+ },
248
+ "samples": {
249
+ "items": {
250
+ "properties": {
251
+ "x": {
252
+ "name": "x",
253
+ "required": true,
254
+ "type": "number"
255
+ },
256
+ "y": {
257
+ "name": "y",
258
+ "required": true,
259
+ "type": "number"
260
+ }
261
+ },
262
+ "type": "object"
263
+ },
264
+ "name": "samples",
265
+ "required": true,
266
+ "type": "array"
267
+ }
268
+ },
269
+ "type": "object"
270
+ },
271
+ "name": "curves",
272
+ "type": "array"
273
+ }
274
+ ],
275
+ "id": "ent_01M07580NN7GQ33ZWK7VQA2FHH",
276
+ "name": "CoupledSimScene",
277
+ "persistence": "runtime"
278
+ },
279
+ "id": "orb_01M07580NNXV7ZX3N81A85S1PY",
280
+ "name": "CoupledSimOrbital",
281
+ "pages": [
282
+ {
283
+ "id": "pag_01M07580P3FJ3M2VVZ6MVSPE16",
284
+ "name": "CoupledSimPage",
285
+ "path": "/learn-coupled-sim",
286
+ "traits": [
287
+ {
288
+ "ref": "CoupledSimSim",
289
+ "refId": "trt_01M07580NPVHNKAG807AY3AGFP"
290
+ }
291
+ ]
292
+ }
293
+ ],
294
+ "traits": [
295
+ {
296
+ "category": "interaction",
297
+ "config": {
298
+ "autoRun": {
299
+ "default": true,
300
+ "description": "Whether the simulation starts running immediately on load.",
301
+ "label": "Auto Run",
302
+ "tier": "domain",
303
+ "type": "boolean"
304
+ },
305
+ "coefADefault": {
306
+ "default": 0.6,
307
+ "label": "Coefficient A Default",
308
+ "tier": "domain",
309
+ "type": "number"
310
+ },
311
+ "coefALabel": {
312
+ "default": "Prey growth rate",
313
+ "description": "Display label of the first governing rate slider.",
314
+ "label": "Coefficient A Label",
315
+ "tier": "domain",
316
+ "type": "string"
317
+ },
318
+ "coefAMax": {
319
+ "default": 2.0,
320
+ "label": "Coefficient A Max",
321
+ "tier": "domain",
322
+ "type": "number"
323
+ },
324
+ "coefAMin": {
325
+ "default": 0.0,
326
+ "label": "Coefficient A Min",
327
+ "tier": "domain",
328
+ "type": "number"
329
+ },
330
+ "coefAStep": {
331
+ "default": 0.01,
332
+ "label": "Coefficient A Step",
333
+ "tier": "presentation",
334
+ "type": "number"
335
+ },
336
+ "coefBDefault": {
337
+ "default": 0.9,
338
+ "label": "Coefficient B Default",
339
+ "tier": "domain",
340
+ "type": "number"
341
+ },
342
+ "coefBLabel": {
343
+ "default": "Predation rate",
344
+ "description": "Display label of the second governing rate slider.",
345
+ "label": "Coefficient B Label",
346
+ "tier": "domain",
347
+ "type": "string"
348
+ },
349
+ "coefBMax": {
350
+ "default": 2.0,
351
+ "label": "Coefficient B Max",
352
+ "tier": "domain",
353
+ "type": "number"
354
+ },
355
+ "coefBMin": {
356
+ "default": 0.0,
357
+ "label": "Coefficient B Min",
358
+ "tier": "domain",
359
+ "type": "number"
360
+ },
361
+ "coefBStep": {
362
+ "default": 0.01,
363
+ "label": "Coefficient B Step",
364
+ "tier": "presentation",
365
+ "type": "number"
366
+ },
367
+ "coefC": {
368
+ "default": 0.5,
369
+ "description": "Predator-prey only: conversion efficiency of predation into predator growth.",
370
+ "label": "Coefficient C",
371
+ "tier": "domain",
372
+ "type": "number"
373
+ },
374
+ "coefD": {
375
+ "default": 0.4,
376
+ "description": "Predator-prey only: predator death rate.",
377
+ "label": "Coefficient D",
378
+ "tier": "domain",
379
+ "type": "number"
380
+ },
381
+ "duration": {
382
+ "default": 30.0,
383
+ "description": "Simulated seconds before the run stops automatically.",
384
+ "label": "Duration",
385
+ "tier": "domain",
386
+ "type": "number"
387
+ },
388
+ "gridStep": {
389
+ "default": 50.0,
390
+ "label": "Grid Step",
391
+ "tier": "presentation",
392
+ "type": "number"
393
+ },
394
+ "height": {
395
+ "default": 360.0,
396
+ "label": "Height",
397
+ "tier": "presentation",
398
+ "type": "number"
399
+ },
400
+ "kind": {
401
+ "default": "predator-prey",
402
+ "description": "Which coupled dynamics govern the two quantities: predator-prey (oscillating cycles), epidemic (S and I with transmission and recovery), or kinetics (A decaying into B).",
403
+ "label": "Interaction Family",
404
+ "synonyms": "predator prey, Lotka-Volterra, SIR, epidemic, reaction kinetics, coupled ODE",
405
+ "tier": "domain",
406
+ "type": "string"
407
+ },
408
+ "matchMode": {
409
+ "default": "",
410
+ "description": "When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.",
411
+ "label": "Match Mode",
412
+ "tier": "presentation",
413
+ "type": "string"
414
+ },
415
+ "pColor": {
416
+ "default": "#16a34a",
417
+ "label": "P Color",
418
+ "tier": "presentation",
419
+ "type": "string"
420
+ },
421
+ "pLabel": {
422
+ "default": "Prey",
423
+ "description": "Display name of the first quantity.",
424
+ "label": "P Label",
425
+ "tier": "domain",
426
+ "type": "string"
427
+ },
428
+ "pStart": {
429
+ "default": 120.0,
430
+ "label": "P Start",
431
+ "tier": "domain",
432
+ "type": "number"
433
+ },
434
+ "qColor": {
435
+ "default": "#dc2626",
436
+ "label": "Q Color",
437
+ "tier": "presentation",
438
+ "type": "string"
439
+ },
440
+ "qLabel": {
441
+ "default": "Predators",
442
+ "description": "Display name of the second quantity.",
443
+ "label": "Q Label",
444
+ "tier": "domain",
445
+ "type": "string"
446
+ },
447
+ "qStart": {
448
+ "default": 40.0,
449
+ "label": "Q Start",
450
+ "tier": "domain",
451
+ "type": "number"
452
+ },
453
+ "shockDownLabel": {
454
+ "default": "− Prey cull",
455
+ "label": "Shock Down Label",
456
+ "tier": "presentation",
457
+ "type": "string"
458
+ },
459
+ "shockSize": {
460
+ "default": 40.0,
461
+ "description": "How much of the first quantity a shock button injects or removes.",
462
+ "label": "Shock Size",
463
+ "tier": "domain",
464
+ "type": "number"
465
+ },
466
+ "shockUpLabel": {
467
+ "default": "+ Prey burst",
468
+ "label": "Shock Up Label",
469
+ "tier": "presentation",
470
+ "type": "string"
471
+ },
472
+ "taskText": {
473
+ "default": "Run the system, retune the rates, and shock it — watch how the two quantities push and pull each other.",
474
+ "description": "One-sentence statement of what to explore.",
475
+ "label": "Task Text",
476
+ "tier": "domain",
477
+ "type": "string"
478
+ },
479
+ "timeScale": {
480
+ "default": 1.0,
481
+ "description": "Multiplier on the integration step; raise it to fast-forward the dynamics.",
482
+ "label": "Time Scale",
483
+ "tier": "domain",
484
+ "type": "number"
485
+ },
486
+ "title": {
487
+ "default": "Coupled System",
488
+ "description": "Title shown above the simulation.",
489
+ "label": "Title",
490
+ "tier": "presentation",
491
+ "type": "string"
492
+ },
493
+ "valueMax": {
494
+ "default": 300.0,
495
+ "description": "Upper bound of the chart's y axis.",
496
+ "label": "Value Max",
497
+ "tier": "presentation",
498
+ "type": "number"
499
+ },
500
+ "width": {
501
+ "default": 600.0,
502
+ "label": "Width",
503
+ "tier": "presentation",
504
+ "type": "number"
505
+ }
506
+ },
507
+ "emits": [
508
+ {
509
+ "description": "The simulation was started or paused — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.",
510
+ "event": "RUN_TOGGLED",
511
+ "eventId": "evt_01M07580P0CCW9GF6P9MHXZNTW",
512
+ "payloadSchema": [
513
+ {
514
+ "name": "running",
515
+ "type": "boolean"
516
+ }
517
+ ],
518
+ "scope": "external",
519
+ "tier": "domain"
520
+ },
521
+ {
522
+ "description": "The learner reset the system to its configured starting state.",
523
+ "event": "SIM_RESET",
524
+ "eventId": "evt_01M07580P0HZJEK1MA32BK92W6",
525
+ "payloadSchema": [
526
+ {
527
+ "name": "pStart",
528
+ "type": "number"
529
+ },
530
+ {
531
+ "name": "qStart",
532
+ "type": "number"
533
+ }
534
+ ],
535
+ "scope": "external",
536
+ "tier": "domain"
537
+ },
538
+ {
539
+ "description": "The governing rates after a slider change.",
540
+ "event": "COEFS_CHANGED",
541
+ "eventId": "evt_01M07580P02V5XRN0B2ABP1MXE",
542
+ "payloadSchema": [
543
+ {
544
+ "name": "coefA",
545
+ "type": "number"
546
+ },
547
+ {
548
+ "name": "coefB",
549
+ "type": "number"
550
+ }
551
+ ],
552
+ "scope": "external",
553
+ "tier": "domain"
554
+ },
555
+ {
556
+ "description": "A disturbance was injected: the burst size and both quantities right after it.",
557
+ "event": "SHOCK_APPLIED",
558
+ "eventId": "evt_01M07580P0TMF96MBE054THMHQ",
559
+ "payloadSchema": [
560
+ {
561
+ "name": "delta",
562
+ "type": "number"
563
+ },
564
+ {
565
+ "name": "p",
566
+ "type": "number"
567
+ },
568
+ {
569
+ "name": "q",
570
+ "type": "number"
571
+ }
572
+ ],
573
+ "scope": "external",
574
+ "synonyms": "coupled dynamics, predator prey, epidemic, reaction kinetics, feedback loop, disturbance",
575
+ "tier": "domain"
576
+ }
577
+ ],
578
+ "entityContract": {
579
+ "provides": [
580
+ "active",
581
+ "coefA",
582
+ "coefB",
583
+ "curves",
584
+ "p",
585
+ "pSamples",
586
+ "q",
587
+ "qSamples",
588
+ "running",
589
+ "t",
590
+ "title"
591
+ ],
592
+ "requires": []
593
+ },
594
+ "entityRebindable": true,
595
+ "entityRefIds": {
596
+ "CoupledSimScene": "ent_01M07580NN7GQ33ZWK7VQA2FHH"
597
+ },
598
+ "id": "trt_01M07580NPVHNKAG807AY3AGFP",
599
+ "linkedEntity": "CoupledSimScene",
600
+ "linkedEntityId": "ent_01M07580NN7GQ33ZWK7VQA2FHH",
601
+ "name": "CoupledSimSim",
602
+ "scope": "instance",
603
+ "stateMachine": {
604
+ "events": [
605
+ {
606
+ "id": "evt_01M07580NPAZNGHYHWGA4K622M",
607
+ "key": "INIT",
608
+ "name": "Initialize"
609
+ },
610
+ {
611
+ "description": "Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.",
612
+ "id": "evt_01M07580NZG8GTJXJCXM4HAW12",
613
+ "key": "MODE_SELECTED",
614
+ "name": "Mode Selected",
615
+ "payloadSchema": [
616
+ {
617
+ "name": "mode",
618
+ "type": "string"
619
+ }
620
+ ],
621
+ "tier": "domain"
622
+ },
623
+ {
624
+ "description": "Learner started (or resumed) the coupled evolution; the two curves draw live until Pause or the configured duration.",
625
+ "id": "evt_01M07580P06DQNTB9WYS6R2GNC",
626
+ "key": "RUN",
627
+ "name": "Run",
628
+ "tier": "domain"
629
+ },
630
+ {
631
+ "description": "Learner froze the simulation mid-run; sliders and shocks still apply to the frozen state.",
632
+ "id": "evt_01M07580P0A9WNF511YN5F64NG",
633
+ "key": "PAUSE",
634
+ "name": "Pause",
635
+ "tier": "domain"
636
+ },
637
+ {
638
+ "description": "Learner restored both quantities, both rates, and the clock to their configured starting values.",
639
+ "id": "evt_01M07580P0CSMYHGC4WXW16Q4C",
640
+ "key": "RESET",
641
+ "name": "Reset",
642
+ "tier": "domain"
643
+ },
644
+ {
645
+ "description": "Learner retuned the first governing rate mid-run — value is the new coefficient; the dynamics change from the next tick.",
646
+ "id": "evt_01M07580P0GPP30NM6FMGYH32V",
647
+ "key": "SET_A",
648
+ "name": "Set A",
649
+ "payloadSchema": [
650
+ {
651
+ "name": "value",
652
+ "type": "number"
653
+ }
654
+ ],
655
+ "tier": "domain"
656
+ },
657
+ {
658
+ "description": "Learner retuned the second governing rate mid-run — value is the new coefficient; the dynamics change from the next tick.",
659
+ "id": "evt_01M07580P01GV3DKXDN4CH6BPD",
660
+ "key": "SET_B",
661
+ "name": "Set B",
662
+ "payloadSchema": [
663
+ {
664
+ "name": "value",
665
+ "type": "number"
666
+ }
667
+ ],
668
+ "tier": "domain"
669
+ },
670
+ {
671
+ "description": "Learner injected (positive) or removed (negative) a burst of the first quantity to disturb the system and watch it respond.",
672
+ "id": "evt_01M07580P0TJ5NZE7BGSPD00W6",
673
+ "key": "SHOCK",
674
+ "name": "Shock",
675
+ "payloadSchema": [
676
+ {
677
+ "name": "delta",
678
+ "type": "number"
679
+ }
680
+ ],
681
+ "tier": "domain"
682
+ },
683
+ {
684
+ "description": "The simulation was started or paused — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.",
685
+ "id": "evt_01M07580P0CCW9GF6P9MHXZNTW",
686
+ "key": "RUN_TOGGLED",
687
+ "name": "Run Toggled",
688
+ "payloadSchema": [
689
+ {
690
+ "name": "running",
691
+ "type": "boolean"
692
+ }
693
+ ],
694
+ "tier": "domain"
695
+ },
696
+ {
697
+ "description": "The learner reset the system to its configured starting state.",
698
+ "id": "evt_01M07580P0HZJEK1MA32BK92W6",
699
+ "key": "SIM_RESET",
700
+ "name": "Sim Reset",
701
+ "payloadSchema": [
702
+ {
703
+ "name": "pStart",
704
+ "type": "number"
705
+ },
706
+ {
707
+ "name": "qStart",
708
+ "type": "number"
709
+ }
710
+ ],
711
+ "tier": "domain"
712
+ },
713
+ {
714
+ "description": "The governing rates after a slider change.",
715
+ "id": "evt_01M07580P02V5XRN0B2ABP1MXE",
716
+ "key": "COEFS_CHANGED",
717
+ "name": "Coefs Changed",
718
+ "payloadSchema": [
719
+ {
720
+ "name": "coefA",
721
+ "type": "number"
722
+ },
723
+ {
724
+ "name": "coefB",
725
+ "type": "number"
726
+ }
727
+ ],
728
+ "tier": "domain"
729
+ },
730
+ {
731
+ "description": "A disturbance was injected: the burst size and both quantities right after it.",
732
+ "id": "evt_01M07580P0TMF96MBE054THMHQ",
733
+ "key": "SHOCK_APPLIED",
734
+ "name": "Shock Applied",
735
+ "payloadSchema": [
736
+ {
737
+ "name": "delta",
738
+ "type": "number"
739
+ },
740
+ {
741
+ "name": "p",
742
+ "type": "number"
743
+ },
744
+ {
745
+ "name": "q",
746
+ "type": "number"
747
+ }
748
+ ],
749
+ "synonyms": "coupled dynamics, predator prey, epidemic, reaction kinetics, feedback loop, disturbance",
750
+ "tier": "domain"
751
+ }
752
+ ],
753
+ "states": [
754
+ {
755
+ "isInitial": true,
756
+ "name": "idle"
757
+ }
758
+ ],
759
+ "transitions": [
760
+ {
761
+ "effects": [
762
+ [
763
+ "set",
764
+ "@entity.active",
765
+ true
766
+ ],
767
+ [
768
+ "set",
769
+ "@entity.title",
770
+ "@config.title"
771
+ ],
772
+ [
773
+ "set",
774
+ "@entity.t",
775
+ 0.0
776
+ ],
777
+ [
778
+ "set",
779
+ "@entity.p",
780
+ "@config.pStart"
781
+ ],
782
+ [
783
+ "set",
784
+ "@entity.q",
785
+ "@config.qStart"
786
+ ],
787
+ [
788
+ "set",
789
+ "@entity.coefA",
790
+ "@config.coefADefault"
791
+ ],
792
+ [
793
+ "set",
794
+ "@entity.coefB",
795
+ "@config.coefBDefault"
796
+ ],
797
+ [
798
+ "set",
799
+ "@entity.running",
800
+ "@config.autoRun"
801
+ ],
802
+ [
803
+ "set",
804
+ "@entity.pSamples",
805
+ [
806
+ {
807
+ "x": 0.0,
808
+ "y": "@config.pStart"
809
+ }
810
+ ]
811
+ ],
812
+ [
813
+ "set",
814
+ "@entity.qSamples",
815
+ [
816
+ {
817
+ "x": 0.0,
818
+ "y": "@config.qStart"
819
+ }
820
+ ]
821
+ ],
822
+ [
823
+ "set",
824
+ "@entity.curves",
825
+ [
826
+ {
827
+ "color": "@config.pColor",
828
+ "label": "@config.pLabel",
829
+ "samples": "@entity.pSamples"
830
+ },
831
+ {
832
+ "color": "@config.qColor",
833
+ "label": "@config.qLabel",
834
+ "samples": "@entity.qSamples"
835
+ }
836
+ ]
837
+ ],
838
+ [
839
+ "render-ui",
840
+ "main",
841
+ {
842
+ "children": [
843
+ {
844
+ "children": [
845
+ {
846
+ "content": "@entity.title",
847
+ "type": "typography",
848
+ "variant": "h4"
849
+ },
850
+ {
851
+ "content": "@config.taskText",
852
+ "type": "typography",
853
+ "variant": "body"
854
+ },
855
+ {
856
+ "children": [
857
+ {
858
+ "action": "RUN",
859
+ "disabled": [
860
+ "if",
861
+ [
862
+ "and",
863
+ [
864
+ "==",
865
+ "@entity.running",
866
+ false
867
+ ],
868
+ [
869
+ "<",
870
+ "@entity.t",
871
+ "@config.duration"
872
+ ]
873
+ ],
874
+ false,
875
+ true
876
+ ],
877
+ "label": "Run",
878
+ "type": "button",
879
+ "variant": "primary"
880
+ },
881
+ {
882
+ "action": "PAUSE",
883
+ "disabled": [
884
+ "if",
885
+ "@entity.running",
886
+ false,
887
+ true
888
+ ],
889
+ "label": "Pause",
890
+ "type": "button",
891
+ "variant": "secondary"
892
+ },
893
+ {
894
+ "action": "RESET",
895
+ "label": "Reset",
896
+ "type": "button",
897
+ "variant": "ghost"
898
+ },
899
+ {
900
+ "action": "SHOCK",
901
+ "actionPayload": {
902
+ "delta": "@config.shockSize"
903
+ },
904
+ "label": "@config.shockUpLabel",
905
+ "size": "sm",
906
+ "type": "button",
907
+ "variant": "secondary"
908
+ },
909
+ {
910
+ "action": "SHOCK",
911
+ "actionPayload": {
912
+ "delta": [
913
+ "-",
914
+ 0.0,
915
+ "@config.shockSize"
916
+ ]
917
+ },
918
+ "label": "@config.shockDownLabel",
919
+ "size": "sm",
920
+ "type": "button",
921
+ "variant": "secondary"
922
+ }
923
+ ],
924
+ "direction": "horizontal",
925
+ "gap": "sm",
926
+ "type": "stack"
927
+ },
928
+ {
929
+ "children": [
930
+ {
931
+ "content": [
932
+ "str/concat",
933
+ "@config.coefALabel",
934
+ ": ",
935
+ [
936
+ "math/round",
937
+ "@entity.coefA",
938
+ 3.0
939
+ ]
940
+ ],
941
+ "type": "typography",
942
+ "variant": "caption"
943
+ },
944
+ {
945
+ "action": "SET_A",
946
+ "max": "@config.coefAMax",
947
+ "min": "@config.coefAMin",
948
+ "showTooltip": true,
949
+ "step": "@config.coefAStep",
950
+ "type": "range-slider",
951
+ "value": "@entity.coefA"
952
+ }
953
+ ],
954
+ "direction": "vertical",
955
+ "gap": "xs",
956
+ "type": "stack"
957
+ },
958
+ {
959
+ "children": [
960
+ {
961
+ "content": [
962
+ "str/concat",
963
+ "@config.coefBLabel",
964
+ ": ",
965
+ [
966
+ "math/round",
967
+ "@entity.coefB",
968
+ 3.0
969
+ ]
970
+ ],
971
+ "type": "typography",
972
+ "variant": "caption"
973
+ },
974
+ {
975
+ "action": "SET_B",
976
+ "max": "@config.coefBMax",
977
+ "min": "@config.coefBMin",
978
+ "showTooltip": true,
979
+ "step": "@config.coefBStep",
980
+ "type": "range-slider",
981
+ "value": "@entity.coefB"
982
+ }
983
+ ],
984
+ "direction": "vertical",
985
+ "gap": "xs",
986
+ "type": "stack"
987
+ },
988
+ {
989
+ "animate": false,
990
+ "curves": "@entity.curves",
991
+ "gridStep": "@config.gridStep",
992
+ "height": "@config.height",
993
+ "interactive": false,
994
+ "points": [],
995
+ "shapes": [],
996
+ "showAxes": true,
997
+ "showGrid": true,
998
+ "title": "",
999
+ "type": "math-canvas",
1000
+ "vectors": [],
1001
+ "width": "@config.width",
1002
+ "xMax": "@config.duration",
1003
+ "xMin": 0.0,
1004
+ "yMax": "@config.valueMax",
1005
+ "yMin": 0.0
1006
+ },
1007
+ {
1008
+ "content": [
1009
+ "str/concat",
1010
+ "t = ",
1011
+ [
1012
+ "math/round",
1013
+ "@entity.t",
1014
+ 1.0
1015
+ ],
1016
+ " · ",
1017
+ "@config.pLabel",
1018
+ " = ",
1019
+ [
1020
+ "math/round",
1021
+ "@entity.p",
1022
+ 1.0
1023
+ ],
1024
+ " · ",
1025
+ "@config.qLabel",
1026
+ " = ",
1027
+ [
1028
+ "math/round",
1029
+ "@entity.q",
1030
+ 1.0
1031
+ ]
1032
+ ],
1033
+ "type": "typography",
1034
+ "variant": "body"
1035
+ }
1036
+ ],
1037
+ "direction": "vertical",
1038
+ "gap": "md",
1039
+ "type": "stack"
1040
+ }
1041
+ ],
1042
+ "padding": "md",
1043
+ "type": "box"
1044
+ }
1045
+ ]
1046
+ ],
1047
+ "event": "INIT",
1048
+ "eventId": "evt_01M07580NPAZNGHYHWGA4K622M",
1049
+ "from": "idle",
1050
+ "guard": [
1051
+ "==",
1052
+ "@config.matchMode",
1053
+ ""
1054
+ ],
1055
+ "to": "idle"
1056
+ },
1057
+ {
1058
+ "effects": [
1059
+ [
1060
+ "set",
1061
+ "@entity.active",
1062
+ true
1063
+ ],
1064
+ [
1065
+ "set",
1066
+ "@entity.title",
1067
+ "@config.title"
1068
+ ],
1069
+ [
1070
+ "set",
1071
+ "@entity.t",
1072
+ 0.0
1073
+ ],
1074
+ [
1075
+ "set",
1076
+ "@entity.p",
1077
+ "@config.pStart"
1078
+ ],
1079
+ [
1080
+ "set",
1081
+ "@entity.q",
1082
+ "@config.qStart"
1083
+ ],
1084
+ [
1085
+ "set",
1086
+ "@entity.coefA",
1087
+ "@config.coefADefault"
1088
+ ],
1089
+ [
1090
+ "set",
1091
+ "@entity.coefB",
1092
+ "@config.coefBDefault"
1093
+ ],
1094
+ [
1095
+ "set",
1096
+ "@entity.running",
1097
+ "@config.autoRun"
1098
+ ],
1099
+ [
1100
+ "set",
1101
+ "@entity.pSamples",
1102
+ [
1103
+ {
1104
+ "x": 0.0,
1105
+ "y": "@config.pStart"
1106
+ }
1107
+ ]
1108
+ ],
1109
+ [
1110
+ "set",
1111
+ "@entity.qSamples",
1112
+ [
1113
+ {
1114
+ "x": 0.0,
1115
+ "y": "@config.qStart"
1116
+ }
1117
+ ]
1118
+ ],
1119
+ [
1120
+ "set",
1121
+ "@entity.curves",
1122
+ [
1123
+ {
1124
+ "color": "@config.pColor",
1125
+ "label": "@config.pLabel",
1126
+ "samples": "@entity.pSamples"
1127
+ },
1128
+ {
1129
+ "color": "@config.qColor",
1130
+ "label": "@config.qLabel",
1131
+ "samples": "@entity.qSamples"
1132
+ }
1133
+ ]
1134
+ ],
1135
+ [
1136
+ "render-ui",
1137
+ "main",
1138
+ {
1139
+ "children": [
1140
+ {
1141
+ "children": [
1142
+ {
1143
+ "content": "@entity.title",
1144
+ "type": "typography",
1145
+ "variant": "h4"
1146
+ },
1147
+ {
1148
+ "content": "@config.taskText",
1149
+ "type": "typography",
1150
+ "variant": "body"
1151
+ },
1152
+ {
1153
+ "children": [
1154
+ {
1155
+ "action": "RUN",
1156
+ "disabled": [
1157
+ "if",
1158
+ [
1159
+ "and",
1160
+ [
1161
+ "==",
1162
+ "@entity.running",
1163
+ false
1164
+ ],
1165
+ [
1166
+ "<",
1167
+ "@entity.t",
1168
+ "@config.duration"
1169
+ ]
1170
+ ],
1171
+ false,
1172
+ true
1173
+ ],
1174
+ "label": "Run",
1175
+ "type": "button",
1176
+ "variant": "primary"
1177
+ },
1178
+ {
1179
+ "action": "PAUSE",
1180
+ "disabled": [
1181
+ "if",
1182
+ "@entity.running",
1183
+ false,
1184
+ true
1185
+ ],
1186
+ "label": "Pause",
1187
+ "type": "button",
1188
+ "variant": "secondary"
1189
+ },
1190
+ {
1191
+ "action": "RESET",
1192
+ "label": "Reset",
1193
+ "type": "button",
1194
+ "variant": "ghost"
1195
+ },
1196
+ {
1197
+ "action": "SHOCK",
1198
+ "actionPayload": {
1199
+ "delta": "@config.shockSize"
1200
+ },
1201
+ "label": "@config.shockUpLabel",
1202
+ "size": "sm",
1203
+ "type": "button",
1204
+ "variant": "secondary"
1205
+ },
1206
+ {
1207
+ "action": "SHOCK",
1208
+ "actionPayload": {
1209
+ "delta": [
1210
+ "-",
1211
+ 0.0,
1212
+ "@config.shockSize"
1213
+ ]
1214
+ },
1215
+ "label": "@config.shockDownLabel",
1216
+ "size": "sm",
1217
+ "type": "button",
1218
+ "variant": "secondary"
1219
+ }
1220
+ ],
1221
+ "direction": "horizontal",
1222
+ "gap": "sm",
1223
+ "type": "stack"
1224
+ },
1225
+ {
1226
+ "children": [
1227
+ {
1228
+ "content": [
1229
+ "str/concat",
1230
+ "@config.coefALabel",
1231
+ ": ",
1232
+ [
1233
+ "math/round",
1234
+ "@entity.coefA",
1235
+ 3.0
1236
+ ]
1237
+ ],
1238
+ "type": "typography",
1239
+ "variant": "caption"
1240
+ },
1241
+ {
1242
+ "action": "SET_A",
1243
+ "max": "@config.coefAMax",
1244
+ "min": "@config.coefAMin",
1245
+ "showTooltip": true,
1246
+ "step": "@config.coefAStep",
1247
+ "type": "range-slider",
1248
+ "value": "@entity.coefA"
1249
+ }
1250
+ ],
1251
+ "direction": "vertical",
1252
+ "gap": "xs",
1253
+ "type": "stack"
1254
+ },
1255
+ {
1256
+ "children": [
1257
+ {
1258
+ "content": [
1259
+ "str/concat",
1260
+ "@config.coefBLabel",
1261
+ ": ",
1262
+ [
1263
+ "math/round",
1264
+ "@entity.coefB",
1265
+ 3.0
1266
+ ]
1267
+ ],
1268
+ "type": "typography",
1269
+ "variant": "caption"
1270
+ },
1271
+ {
1272
+ "action": "SET_B",
1273
+ "max": "@config.coefBMax",
1274
+ "min": "@config.coefBMin",
1275
+ "showTooltip": true,
1276
+ "step": "@config.coefBStep",
1277
+ "type": "range-slider",
1278
+ "value": "@entity.coefB"
1279
+ }
1280
+ ],
1281
+ "direction": "vertical",
1282
+ "gap": "xs",
1283
+ "type": "stack"
1284
+ },
1285
+ {
1286
+ "animate": false,
1287
+ "curves": "@entity.curves",
1288
+ "gridStep": "@config.gridStep",
1289
+ "height": "@config.height",
1290
+ "interactive": false,
1291
+ "points": [],
1292
+ "shapes": [],
1293
+ "showAxes": true,
1294
+ "showGrid": true,
1295
+ "title": "",
1296
+ "type": "math-canvas",
1297
+ "vectors": [],
1298
+ "width": "@config.width",
1299
+ "xMax": "@config.duration",
1300
+ "xMin": 0.0,
1301
+ "yMax": "@config.valueMax",
1302
+ "yMin": 0.0
1303
+ },
1304
+ {
1305
+ "content": [
1306
+ "str/concat",
1307
+ "t = ",
1308
+ [
1309
+ "math/round",
1310
+ "@entity.t",
1311
+ 1.0
1312
+ ],
1313
+ " · ",
1314
+ "@config.pLabel",
1315
+ " = ",
1316
+ [
1317
+ "math/round",
1318
+ "@entity.p",
1319
+ 1.0
1320
+ ],
1321
+ " · ",
1322
+ "@config.qLabel",
1323
+ " = ",
1324
+ [
1325
+ "math/round",
1326
+ "@entity.q",
1327
+ 1.0
1328
+ ]
1329
+ ],
1330
+ "type": "typography",
1331
+ "variant": "body"
1332
+ }
1333
+ ],
1334
+ "direction": "vertical",
1335
+ "gap": "md",
1336
+ "type": "stack"
1337
+ }
1338
+ ],
1339
+ "padding": "md",
1340
+ "type": "box"
1341
+ }
1342
+ ]
1343
+ ],
1344
+ "event": "MODE_SELECTED",
1345
+ "eventId": "evt_01M07580NZG8GTJXJCXM4HAW12",
1346
+ "from": "idle",
1347
+ "guard": [
1348
+ "==",
1349
+ "@payload.mode",
1350
+ "@config.matchMode"
1351
+ ],
1352
+ "to": "idle"
1353
+ },
1354
+ {
1355
+ "effects": [
1356
+ [
1357
+ "set",
1358
+ "@entity.running",
1359
+ true
1360
+ ],
1361
+ [
1362
+ "render-ui",
1363
+ "main",
1364
+ {
1365
+ "children": [
1366
+ {
1367
+ "children": [
1368
+ {
1369
+ "content": "@entity.title",
1370
+ "type": "typography",
1371
+ "variant": "h4"
1372
+ },
1373
+ {
1374
+ "content": "@config.taskText",
1375
+ "type": "typography",
1376
+ "variant": "body"
1377
+ },
1378
+ {
1379
+ "children": [
1380
+ {
1381
+ "action": "RUN",
1382
+ "disabled": [
1383
+ "if",
1384
+ [
1385
+ "and",
1386
+ [
1387
+ "==",
1388
+ "@entity.running",
1389
+ false
1390
+ ],
1391
+ [
1392
+ "<",
1393
+ "@entity.t",
1394
+ "@config.duration"
1395
+ ]
1396
+ ],
1397
+ false,
1398
+ true
1399
+ ],
1400
+ "label": "Run",
1401
+ "type": "button",
1402
+ "variant": "primary"
1403
+ },
1404
+ {
1405
+ "action": "PAUSE",
1406
+ "disabled": [
1407
+ "if",
1408
+ "@entity.running",
1409
+ false,
1410
+ true
1411
+ ],
1412
+ "label": "Pause",
1413
+ "type": "button",
1414
+ "variant": "secondary"
1415
+ },
1416
+ {
1417
+ "action": "RESET",
1418
+ "label": "Reset",
1419
+ "type": "button",
1420
+ "variant": "ghost"
1421
+ },
1422
+ {
1423
+ "action": "SHOCK",
1424
+ "actionPayload": {
1425
+ "delta": "@config.shockSize"
1426
+ },
1427
+ "label": "@config.shockUpLabel",
1428
+ "size": "sm",
1429
+ "type": "button",
1430
+ "variant": "secondary"
1431
+ },
1432
+ {
1433
+ "action": "SHOCK",
1434
+ "actionPayload": {
1435
+ "delta": [
1436
+ "-",
1437
+ 0.0,
1438
+ "@config.shockSize"
1439
+ ]
1440
+ },
1441
+ "label": "@config.shockDownLabel",
1442
+ "size": "sm",
1443
+ "type": "button",
1444
+ "variant": "secondary"
1445
+ }
1446
+ ],
1447
+ "direction": "horizontal",
1448
+ "gap": "sm",
1449
+ "type": "stack"
1450
+ },
1451
+ {
1452
+ "children": [
1453
+ {
1454
+ "content": [
1455
+ "str/concat",
1456
+ "@config.coefALabel",
1457
+ ": ",
1458
+ [
1459
+ "math/round",
1460
+ "@entity.coefA",
1461
+ 3.0
1462
+ ]
1463
+ ],
1464
+ "type": "typography",
1465
+ "variant": "caption"
1466
+ },
1467
+ {
1468
+ "action": "SET_A",
1469
+ "max": "@config.coefAMax",
1470
+ "min": "@config.coefAMin",
1471
+ "showTooltip": true,
1472
+ "step": "@config.coefAStep",
1473
+ "type": "range-slider",
1474
+ "value": "@entity.coefA"
1475
+ }
1476
+ ],
1477
+ "direction": "vertical",
1478
+ "gap": "xs",
1479
+ "type": "stack"
1480
+ },
1481
+ {
1482
+ "children": [
1483
+ {
1484
+ "content": [
1485
+ "str/concat",
1486
+ "@config.coefBLabel",
1487
+ ": ",
1488
+ [
1489
+ "math/round",
1490
+ "@entity.coefB",
1491
+ 3.0
1492
+ ]
1493
+ ],
1494
+ "type": "typography",
1495
+ "variant": "caption"
1496
+ },
1497
+ {
1498
+ "action": "SET_B",
1499
+ "max": "@config.coefBMax",
1500
+ "min": "@config.coefBMin",
1501
+ "showTooltip": true,
1502
+ "step": "@config.coefBStep",
1503
+ "type": "range-slider",
1504
+ "value": "@entity.coefB"
1505
+ }
1506
+ ],
1507
+ "direction": "vertical",
1508
+ "gap": "xs",
1509
+ "type": "stack"
1510
+ },
1511
+ {
1512
+ "animate": false,
1513
+ "curves": "@entity.curves",
1514
+ "gridStep": "@config.gridStep",
1515
+ "height": "@config.height",
1516
+ "interactive": false,
1517
+ "points": [],
1518
+ "shapes": [],
1519
+ "showAxes": true,
1520
+ "showGrid": true,
1521
+ "title": "",
1522
+ "type": "math-canvas",
1523
+ "vectors": [],
1524
+ "width": "@config.width",
1525
+ "xMax": "@config.duration",
1526
+ "xMin": 0.0,
1527
+ "yMax": "@config.valueMax",
1528
+ "yMin": 0.0
1529
+ },
1530
+ {
1531
+ "content": [
1532
+ "str/concat",
1533
+ "t = ",
1534
+ [
1535
+ "math/round",
1536
+ "@entity.t",
1537
+ 1.0
1538
+ ],
1539
+ " · ",
1540
+ "@config.pLabel",
1541
+ " = ",
1542
+ [
1543
+ "math/round",
1544
+ "@entity.p",
1545
+ 1.0
1546
+ ],
1547
+ " · ",
1548
+ "@config.qLabel",
1549
+ " = ",
1550
+ [
1551
+ "math/round",
1552
+ "@entity.q",
1553
+ 1.0
1554
+ ]
1555
+ ],
1556
+ "type": "typography",
1557
+ "variant": "body"
1558
+ }
1559
+ ],
1560
+ "direction": "vertical",
1561
+ "gap": "md",
1562
+ "type": "stack"
1563
+ }
1564
+ ],
1565
+ "padding": "md",
1566
+ "type": "box"
1567
+ }
1568
+ ],
1569
+ [
1570
+ "emit",
1571
+ "RUN_TOGGLED",
1572
+ {
1573
+ "running": "@entity.running"
1574
+ }
1575
+ ]
1576
+ ],
1577
+ "event": "RUN",
1578
+ "eventId": "evt_01M07580P06DQNTB9WYS6R2GNC",
1579
+ "from": "idle",
1580
+ "guard": [
1581
+ "and",
1582
+ [
1583
+ "==",
1584
+ "@entity.active",
1585
+ true
1586
+ ],
1587
+ [
1588
+ "and",
1589
+ [
1590
+ "==",
1591
+ "@entity.running",
1592
+ false
1593
+ ],
1594
+ [
1595
+ "<",
1596
+ "@entity.t",
1597
+ "@config.duration"
1598
+ ]
1599
+ ]
1600
+ ],
1601
+ "to": "idle"
1602
+ },
1603
+ {
1604
+ "effects": [
1605
+ [
1606
+ "set",
1607
+ "@entity.running",
1608
+ false
1609
+ ],
1610
+ [
1611
+ "render-ui",
1612
+ "main",
1613
+ {
1614
+ "children": [
1615
+ {
1616
+ "children": [
1617
+ {
1618
+ "content": "@entity.title",
1619
+ "type": "typography",
1620
+ "variant": "h4"
1621
+ },
1622
+ {
1623
+ "content": "@config.taskText",
1624
+ "type": "typography",
1625
+ "variant": "body"
1626
+ },
1627
+ {
1628
+ "children": [
1629
+ {
1630
+ "action": "RUN",
1631
+ "disabled": [
1632
+ "if",
1633
+ [
1634
+ "and",
1635
+ [
1636
+ "==",
1637
+ "@entity.running",
1638
+ false
1639
+ ],
1640
+ [
1641
+ "<",
1642
+ "@entity.t",
1643
+ "@config.duration"
1644
+ ]
1645
+ ],
1646
+ false,
1647
+ true
1648
+ ],
1649
+ "label": "Run",
1650
+ "type": "button",
1651
+ "variant": "primary"
1652
+ },
1653
+ {
1654
+ "action": "PAUSE",
1655
+ "disabled": [
1656
+ "if",
1657
+ "@entity.running",
1658
+ false,
1659
+ true
1660
+ ],
1661
+ "label": "Pause",
1662
+ "type": "button",
1663
+ "variant": "secondary"
1664
+ },
1665
+ {
1666
+ "action": "RESET",
1667
+ "label": "Reset",
1668
+ "type": "button",
1669
+ "variant": "ghost"
1670
+ },
1671
+ {
1672
+ "action": "SHOCK",
1673
+ "actionPayload": {
1674
+ "delta": "@config.shockSize"
1675
+ },
1676
+ "label": "@config.shockUpLabel",
1677
+ "size": "sm",
1678
+ "type": "button",
1679
+ "variant": "secondary"
1680
+ },
1681
+ {
1682
+ "action": "SHOCK",
1683
+ "actionPayload": {
1684
+ "delta": [
1685
+ "-",
1686
+ 0.0,
1687
+ "@config.shockSize"
1688
+ ]
1689
+ },
1690
+ "label": "@config.shockDownLabel",
1691
+ "size": "sm",
1692
+ "type": "button",
1693
+ "variant": "secondary"
1694
+ }
1695
+ ],
1696
+ "direction": "horizontal",
1697
+ "gap": "sm",
1698
+ "type": "stack"
1699
+ },
1700
+ {
1701
+ "children": [
1702
+ {
1703
+ "content": [
1704
+ "str/concat",
1705
+ "@config.coefALabel",
1706
+ ": ",
1707
+ [
1708
+ "math/round",
1709
+ "@entity.coefA",
1710
+ 3.0
1711
+ ]
1712
+ ],
1713
+ "type": "typography",
1714
+ "variant": "caption"
1715
+ },
1716
+ {
1717
+ "action": "SET_A",
1718
+ "max": "@config.coefAMax",
1719
+ "min": "@config.coefAMin",
1720
+ "showTooltip": true,
1721
+ "step": "@config.coefAStep",
1722
+ "type": "range-slider",
1723
+ "value": "@entity.coefA"
1724
+ }
1725
+ ],
1726
+ "direction": "vertical",
1727
+ "gap": "xs",
1728
+ "type": "stack"
1729
+ },
1730
+ {
1731
+ "children": [
1732
+ {
1733
+ "content": [
1734
+ "str/concat",
1735
+ "@config.coefBLabel",
1736
+ ": ",
1737
+ [
1738
+ "math/round",
1739
+ "@entity.coefB",
1740
+ 3.0
1741
+ ]
1742
+ ],
1743
+ "type": "typography",
1744
+ "variant": "caption"
1745
+ },
1746
+ {
1747
+ "action": "SET_B",
1748
+ "max": "@config.coefBMax",
1749
+ "min": "@config.coefBMin",
1750
+ "showTooltip": true,
1751
+ "step": "@config.coefBStep",
1752
+ "type": "range-slider",
1753
+ "value": "@entity.coefB"
1754
+ }
1755
+ ],
1756
+ "direction": "vertical",
1757
+ "gap": "xs",
1758
+ "type": "stack"
1759
+ },
1760
+ {
1761
+ "animate": false,
1762
+ "curves": "@entity.curves",
1763
+ "gridStep": "@config.gridStep",
1764
+ "height": "@config.height",
1765
+ "interactive": false,
1766
+ "points": [],
1767
+ "shapes": [],
1768
+ "showAxes": true,
1769
+ "showGrid": true,
1770
+ "title": "",
1771
+ "type": "math-canvas",
1772
+ "vectors": [],
1773
+ "width": "@config.width",
1774
+ "xMax": "@config.duration",
1775
+ "xMin": 0.0,
1776
+ "yMax": "@config.valueMax",
1777
+ "yMin": 0.0
1778
+ },
1779
+ {
1780
+ "content": [
1781
+ "str/concat",
1782
+ "t = ",
1783
+ [
1784
+ "math/round",
1785
+ "@entity.t",
1786
+ 1.0
1787
+ ],
1788
+ " · ",
1789
+ "@config.pLabel",
1790
+ " = ",
1791
+ [
1792
+ "math/round",
1793
+ "@entity.p",
1794
+ 1.0
1795
+ ],
1796
+ " · ",
1797
+ "@config.qLabel",
1798
+ " = ",
1799
+ [
1800
+ "math/round",
1801
+ "@entity.q",
1802
+ 1.0
1803
+ ]
1804
+ ],
1805
+ "type": "typography",
1806
+ "variant": "body"
1807
+ }
1808
+ ],
1809
+ "direction": "vertical",
1810
+ "gap": "md",
1811
+ "type": "stack"
1812
+ }
1813
+ ],
1814
+ "padding": "md",
1815
+ "type": "box"
1816
+ }
1817
+ ],
1818
+ [
1819
+ "emit",
1820
+ "RUN_TOGGLED",
1821
+ {
1822
+ "running": "@entity.running"
1823
+ }
1824
+ ]
1825
+ ],
1826
+ "event": "PAUSE",
1827
+ "eventId": "evt_01M07580P0A9WNF511YN5F64NG",
1828
+ "from": "idle",
1829
+ "guard": [
1830
+ "and",
1831
+ [
1832
+ "==",
1833
+ "@entity.active",
1834
+ true
1835
+ ],
1836
+ [
1837
+ "==",
1838
+ "@entity.running",
1839
+ true
1840
+ ]
1841
+ ],
1842
+ "to": "idle"
1843
+ },
1844
+ {
1845
+ "effects": [
1846
+ [
1847
+ "set",
1848
+ "@entity.t",
1849
+ 0.0
1850
+ ],
1851
+ [
1852
+ "set",
1853
+ "@entity.p",
1854
+ "@config.pStart"
1855
+ ],
1856
+ [
1857
+ "set",
1858
+ "@entity.q",
1859
+ "@config.qStart"
1860
+ ],
1861
+ [
1862
+ "set",
1863
+ "@entity.coefA",
1864
+ "@config.coefADefault"
1865
+ ],
1866
+ [
1867
+ "set",
1868
+ "@entity.coefB",
1869
+ "@config.coefBDefault"
1870
+ ],
1871
+ [
1872
+ "set",
1873
+ "@entity.running",
1874
+ false
1875
+ ],
1876
+ [
1877
+ "set",
1878
+ "@entity.pSamples",
1879
+ [
1880
+ {
1881
+ "x": 0.0,
1882
+ "y": "@config.pStart"
1883
+ }
1884
+ ]
1885
+ ],
1886
+ [
1887
+ "set",
1888
+ "@entity.qSamples",
1889
+ [
1890
+ {
1891
+ "x": 0.0,
1892
+ "y": "@config.qStart"
1893
+ }
1894
+ ]
1895
+ ],
1896
+ [
1897
+ "set",
1898
+ "@entity.curves",
1899
+ [
1900
+ {
1901
+ "color": "@config.pColor",
1902
+ "label": "@config.pLabel",
1903
+ "samples": "@entity.pSamples"
1904
+ },
1905
+ {
1906
+ "color": "@config.qColor",
1907
+ "label": "@config.qLabel",
1908
+ "samples": "@entity.qSamples"
1909
+ }
1910
+ ]
1911
+ ],
1912
+ [
1913
+ "render-ui",
1914
+ "main",
1915
+ {
1916
+ "children": [
1917
+ {
1918
+ "children": [
1919
+ {
1920
+ "content": "@entity.title",
1921
+ "type": "typography",
1922
+ "variant": "h4"
1923
+ },
1924
+ {
1925
+ "content": "@config.taskText",
1926
+ "type": "typography",
1927
+ "variant": "body"
1928
+ },
1929
+ {
1930
+ "children": [
1931
+ {
1932
+ "action": "RUN",
1933
+ "disabled": [
1934
+ "if",
1935
+ [
1936
+ "and",
1937
+ [
1938
+ "==",
1939
+ "@entity.running",
1940
+ false
1941
+ ],
1942
+ [
1943
+ "<",
1944
+ "@entity.t",
1945
+ "@config.duration"
1946
+ ]
1947
+ ],
1948
+ false,
1949
+ true
1950
+ ],
1951
+ "label": "Run",
1952
+ "type": "button",
1953
+ "variant": "primary"
1954
+ },
1955
+ {
1956
+ "action": "PAUSE",
1957
+ "disabled": [
1958
+ "if",
1959
+ "@entity.running",
1960
+ false,
1961
+ true
1962
+ ],
1963
+ "label": "Pause",
1964
+ "type": "button",
1965
+ "variant": "secondary"
1966
+ },
1967
+ {
1968
+ "action": "RESET",
1969
+ "label": "Reset",
1970
+ "type": "button",
1971
+ "variant": "ghost"
1972
+ },
1973
+ {
1974
+ "action": "SHOCK",
1975
+ "actionPayload": {
1976
+ "delta": "@config.shockSize"
1977
+ },
1978
+ "label": "@config.shockUpLabel",
1979
+ "size": "sm",
1980
+ "type": "button",
1981
+ "variant": "secondary"
1982
+ },
1983
+ {
1984
+ "action": "SHOCK",
1985
+ "actionPayload": {
1986
+ "delta": [
1987
+ "-",
1988
+ 0.0,
1989
+ "@config.shockSize"
1990
+ ]
1991
+ },
1992
+ "label": "@config.shockDownLabel",
1993
+ "size": "sm",
1994
+ "type": "button",
1995
+ "variant": "secondary"
1996
+ }
1997
+ ],
1998
+ "direction": "horizontal",
1999
+ "gap": "sm",
2000
+ "type": "stack"
2001
+ },
2002
+ {
2003
+ "children": [
2004
+ {
2005
+ "content": [
2006
+ "str/concat",
2007
+ "@config.coefALabel",
2008
+ ": ",
2009
+ [
2010
+ "math/round",
2011
+ "@entity.coefA",
2012
+ 3.0
2013
+ ]
2014
+ ],
2015
+ "type": "typography",
2016
+ "variant": "caption"
2017
+ },
2018
+ {
2019
+ "action": "SET_A",
2020
+ "max": "@config.coefAMax",
2021
+ "min": "@config.coefAMin",
2022
+ "showTooltip": true,
2023
+ "step": "@config.coefAStep",
2024
+ "type": "range-slider",
2025
+ "value": "@entity.coefA"
2026
+ }
2027
+ ],
2028
+ "direction": "vertical",
2029
+ "gap": "xs",
2030
+ "type": "stack"
2031
+ },
2032
+ {
2033
+ "children": [
2034
+ {
2035
+ "content": [
2036
+ "str/concat",
2037
+ "@config.coefBLabel",
2038
+ ": ",
2039
+ [
2040
+ "math/round",
2041
+ "@entity.coefB",
2042
+ 3.0
2043
+ ]
2044
+ ],
2045
+ "type": "typography",
2046
+ "variant": "caption"
2047
+ },
2048
+ {
2049
+ "action": "SET_B",
2050
+ "max": "@config.coefBMax",
2051
+ "min": "@config.coefBMin",
2052
+ "showTooltip": true,
2053
+ "step": "@config.coefBStep",
2054
+ "type": "range-slider",
2055
+ "value": "@entity.coefB"
2056
+ }
2057
+ ],
2058
+ "direction": "vertical",
2059
+ "gap": "xs",
2060
+ "type": "stack"
2061
+ },
2062
+ {
2063
+ "animate": false,
2064
+ "curves": "@entity.curves",
2065
+ "gridStep": "@config.gridStep",
2066
+ "height": "@config.height",
2067
+ "interactive": false,
2068
+ "points": [],
2069
+ "shapes": [],
2070
+ "showAxes": true,
2071
+ "showGrid": true,
2072
+ "title": "",
2073
+ "type": "math-canvas",
2074
+ "vectors": [],
2075
+ "width": "@config.width",
2076
+ "xMax": "@config.duration",
2077
+ "xMin": 0.0,
2078
+ "yMax": "@config.valueMax",
2079
+ "yMin": 0.0
2080
+ },
2081
+ {
2082
+ "content": [
2083
+ "str/concat",
2084
+ "t = ",
2085
+ [
2086
+ "math/round",
2087
+ "@entity.t",
2088
+ 1.0
2089
+ ],
2090
+ " · ",
2091
+ "@config.pLabel",
2092
+ " = ",
2093
+ [
2094
+ "math/round",
2095
+ "@entity.p",
2096
+ 1.0
2097
+ ],
2098
+ " · ",
2099
+ "@config.qLabel",
2100
+ " = ",
2101
+ [
2102
+ "math/round",
2103
+ "@entity.q",
2104
+ 1.0
2105
+ ]
2106
+ ],
2107
+ "type": "typography",
2108
+ "variant": "body"
2109
+ }
2110
+ ],
2111
+ "direction": "vertical",
2112
+ "gap": "md",
2113
+ "type": "stack"
2114
+ }
2115
+ ],
2116
+ "padding": "md",
2117
+ "type": "box"
2118
+ }
2119
+ ],
2120
+ [
2121
+ "emit",
2122
+ "SIM_RESET",
2123
+ {
2124
+ "pStart": "@config.pStart",
2125
+ "qStart": "@config.qStart"
2126
+ }
2127
+ ]
2128
+ ],
2129
+ "event": "RESET",
2130
+ "eventId": "evt_01M07580P0CSMYHGC4WXW16Q4C",
2131
+ "from": "idle",
2132
+ "guard": [
2133
+ "==",
2134
+ "@entity.active",
2135
+ true
2136
+ ],
2137
+ "to": "idle"
2138
+ },
2139
+ {
2140
+ "effects": [
2141
+ [
2142
+ "set",
2143
+ "@entity.coefA",
2144
+ [
2145
+ "math/clamp",
2146
+ "@payload.value",
2147
+ "@config.coefAMin",
2148
+ "@config.coefAMax"
2149
+ ]
2150
+ ],
2151
+ [
2152
+ "render-ui",
2153
+ "main",
2154
+ {
2155
+ "children": [
2156
+ {
2157
+ "children": [
2158
+ {
2159
+ "content": "@entity.title",
2160
+ "type": "typography",
2161
+ "variant": "h4"
2162
+ },
2163
+ {
2164
+ "content": "@config.taskText",
2165
+ "type": "typography",
2166
+ "variant": "body"
2167
+ },
2168
+ {
2169
+ "children": [
2170
+ {
2171
+ "action": "RUN",
2172
+ "disabled": [
2173
+ "if",
2174
+ [
2175
+ "and",
2176
+ [
2177
+ "==",
2178
+ "@entity.running",
2179
+ false
2180
+ ],
2181
+ [
2182
+ "<",
2183
+ "@entity.t",
2184
+ "@config.duration"
2185
+ ]
2186
+ ],
2187
+ false,
2188
+ true
2189
+ ],
2190
+ "label": "Run",
2191
+ "type": "button",
2192
+ "variant": "primary"
2193
+ },
2194
+ {
2195
+ "action": "PAUSE",
2196
+ "disabled": [
2197
+ "if",
2198
+ "@entity.running",
2199
+ false,
2200
+ true
2201
+ ],
2202
+ "label": "Pause",
2203
+ "type": "button",
2204
+ "variant": "secondary"
2205
+ },
2206
+ {
2207
+ "action": "RESET",
2208
+ "label": "Reset",
2209
+ "type": "button",
2210
+ "variant": "ghost"
2211
+ },
2212
+ {
2213
+ "action": "SHOCK",
2214
+ "actionPayload": {
2215
+ "delta": "@config.shockSize"
2216
+ },
2217
+ "label": "@config.shockUpLabel",
2218
+ "size": "sm",
2219
+ "type": "button",
2220
+ "variant": "secondary"
2221
+ },
2222
+ {
2223
+ "action": "SHOCK",
2224
+ "actionPayload": {
2225
+ "delta": [
2226
+ "-",
2227
+ 0.0,
2228
+ "@config.shockSize"
2229
+ ]
2230
+ },
2231
+ "label": "@config.shockDownLabel",
2232
+ "size": "sm",
2233
+ "type": "button",
2234
+ "variant": "secondary"
2235
+ }
2236
+ ],
2237
+ "direction": "horizontal",
2238
+ "gap": "sm",
2239
+ "type": "stack"
2240
+ },
2241
+ {
2242
+ "children": [
2243
+ {
2244
+ "content": [
2245
+ "str/concat",
2246
+ "@config.coefALabel",
2247
+ ": ",
2248
+ [
2249
+ "math/round",
2250
+ "@entity.coefA",
2251
+ 3.0
2252
+ ]
2253
+ ],
2254
+ "type": "typography",
2255
+ "variant": "caption"
2256
+ },
2257
+ {
2258
+ "action": "SET_A",
2259
+ "max": "@config.coefAMax",
2260
+ "min": "@config.coefAMin",
2261
+ "showTooltip": true,
2262
+ "step": "@config.coefAStep",
2263
+ "type": "range-slider",
2264
+ "value": "@entity.coefA"
2265
+ }
2266
+ ],
2267
+ "direction": "vertical",
2268
+ "gap": "xs",
2269
+ "type": "stack"
2270
+ },
2271
+ {
2272
+ "children": [
2273
+ {
2274
+ "content": [
2275
+ "str/concat",
2276
+ "@config.coefBLabel",
2277
+ ": ",
2278
+ [
2279
+ "math/round",
2280
+ "@entity.coefB",
2281
+ 3.0
2282
+ ]
2283
+ ],
2284
+ "type": "typography",
2285
+ "variant": "caption"
2286
+ },
2287
+ {
2288
+ "action": "SET_B",
2289
+ "max": "@config.coefBMax",
2290
+ "min": "@config.coefBMin",
2291
+ "showTooltip": true,
2292
+ "step": "@config.coefBStep",
2293
+ "type": "range-slider",
2294
+ "value": "@entity.coefB"
2295
+ }
2296
+ ],
2297
+ "direction": "vertical",
2298
+ "gap": "xs",
2299
+ "type": "stack"
2300
+ },
2301
+ {
2302
+ "animate": false,
2303
+ "curves": "@entity.curves",
2304
+ "gridStep": "@config.gridStep",
2305
+ "height": "@config.height",
2306
+ "interactive": false,
2307
+ "points": [],
2308
+ "shapes": [],
2309
+ "showAxes": true,
2310
+ "showGrid": true,
2311
+ "title": "",
2312
+ "type": "math-canvas",
2313
+ "vectors": [],
2314
+ "width": "@config.width",
2315
+ "xMax": "@config.duration",
2316
+ "xMin": 0.0,
2317
+ "yMax": "@config.valueMax",
2318
+ "yMin": 0.0
2319
+ },
2320
+ {
2321
+ "content": [
2322
+ "str/concat",
2323
+ "t = ",
2324
+ [
2325
+ "math/round",
2326
+ "@entity.t",
2327
+ 1.0
2328
+ ],
2329
+ " · ",
2330
+ "@config.pLabel",
2331
+ " = ",
2332
+ [
2333
+ "math/round",
2334
+ "@entity.p",
2335
+ 1.0
2336
+ ],
2337
+ " · ",
2338
+ "@config.qLabel",
2339
+ " = ",
2340
+ [
2341
+ "math/round",
2342
+ "@entity.q",
2343
+ 1.0
2344
+ ]
2345
+ ],
2346
+ "type": "typography",
2347
+ "variant": "body"
2348
+ }
2349
+ ],
2350
+ "direction": "vertical",
2351
+ "gap": "md",
2352
+ "type": "stack"
2353
+ }
2354
+ ],
2355
+ "padding": "md",
2356
+ "type": "box"
2357
+ }
2358
+ ],
2359
+ [
2360
+ "emit",
2361
+ "COEFS_CHANGED",
2362
+ {
2363
+ "coefA": "@entity.coefA",
2364
+ "coefB": "@entity.coefB"
2365
+ }
2366
+ ]
2367
+ ],
2368
+ "event": "SET_A",
2369
+ "eventId": "evt_01M07580P0GPP30NM6FMGYH32V",
2370
+ "from": "idle",
2371
+ "guard": [
2372
+ "==",
2373
+ "@entity.active",
2374
+ true
2375
+ ],
2376
+ "to": "idle"
2377
+ },
2378
+ {
2379
+ "effects": [
2380
+ [
2381
+ "set",
2382
+ "@entity.coefB",
2383
+ [
2384
+ "math/clamp",
2385
+ "@payload.value",
2386
+ "@config.coefBMin",
2387
+ "@config.coefBMax"
2388
+ ]
2389
+ ],
2390
+ [
2391
+ "render-ui",
2392
+ "main",
2393
+ {
2394
+ "children": [
2395
+ {
2396
+ "children": [
2397
+ {
2398
+ "content": "@entity.title",
2399
+ "type": "typography",
2400
+ "variant": "h4"
2401
+ },
2402
+ {
2403
+ "content": "@config.taskText",
2404
+ "type": "typography",
2405
+ "variant": "body"
2406
+ },
2407
+ {
2408
+ "children": [
2409
+ {
2410
+ "action": "RUN",
2411
+ "disabled": [
2412
+ "if",
2413
+ [
2414
+ "and",
2415
+ [
2416
+ "==",
2417
+ "@entity.running",
2418
+ false
2419
+ ],
2420
+ [
2421
+ "<",
2422
+ "@entity.t",
2423
+ "@config.duration"
2424
+ ]
2425
+ ],
2426
+ false,
2427
+ true
2428
+ ],
2429
+ "label": "Run",
2430
+ "type": "button",
2431
+ "variant": "primary"
2432
+ },
2433
+ {
2434
+ "action": "PAUSE",
2435
+ "disabled": [
2436
+ "if",
2437
+ "@entity.running",
2438
+ false,
2439
+ true
2440
+ ],
2441
+ "label": "Pause",
2442
+ "type": "button",
2443
+ "variant": "secondary"
2444
+ },
2445
+ {
2446
+ "action": "RESET",
2447
+ "label": "Reset",
2448
+ "type": "button",
2449
+ "variant": "ghost"
2450
+ },
2451
+ {
2452
+ "action": "SHOCK",
2453
+ "actionPayload": {
2454
+ "delta": "@config.shockSize"
2455
+ },
2456
+ "label": "@config.shockUpLabel",
2457
+ "size": "sm",
2458
+ "type": "button",
2459
+ "variant": "secondary"
2460
+ },
2461
+ {
2462
+ "action": "SHOCK",
2463
+ "actionPayload": {
2464
+ "delta": [
2465
+ "-",
2466
+ 0.0,
2467
+ "@config.shockSize"
2468
+ ]
2469
+ },
2470
+ "label": "@config.shockDownLabel",
2471
+ "size": "sm",
2472
+ "type": "button",
2473
+ "variant": "secondary"
2474
+ }
2475
+ ],
2476
+ "direction": "horizontal",
2477
+ "gap": "sm",
2478
+ "type": "stack"
2479
+ },
2480
+ {
2481
+ "children": [
2482
+ {
2483
+ "content": [
2484
+ "str/concat",
2485
+ "@config.coefALabel",
2486
+ ": ",
2487
+ [
2488
+ "math/round",
2489
+ "@entity.coefA",
2490
+ 3.0
2491
+ ]
2492
+ ],
2493
+ "type": "typography",
2494
+ "variant": "caption"
2495
+ },
2496
+ {
2497
+ "action": "SET_A",
2498
+ "max": "@config.coefAMax",
2499
+ "min": "@config.coefAMin",
2500
+ "showTooltip": true,
2501
+ "step": "@config.coefAStep",
2502
+ "type": "range-slider",
2503
+ "value": "@entity.coefA"
2504
+ }
2505
+ ],
2506
+ "direction": "vertical",
2507
+ "gap": "xs",
2508
+ "type": "stack"
2509
+ },
2510
+ {
2511
+ "children": [
2512
+ {
2513
+ "content": [
2514
+ "str/concat",
2515
+ "@config.coefBLabel",
2516
+ ": ",
2517
+ [
2518
+ "math/round",
2519
+ "@entity.coefB",
2520
+ 3.0
2521
+ ]
2522
+ ],
2523
+ "type": "typography",
2524
+ "variant": "caption"
2525
+ },
2526
+ {
2527
+ "action": "SET_B",
2528
+ "max": "@config.coefBMax",
2529
+ "min": "@config.coefBMin",
2530
+ "showTooltip": true,
2531
+ "step": "@config.coefBStep",
2532
+ "type": "range-slider",
2533
+ "value": "@entity.coefB"
2534
+ }
2535
+ ],
2536
+ "direction": "vertical",
2537
+ "gap": "xs",
2538
+ "type": "stack"
2539
+ },
2540
+ {
2541
+ "animate": false,
2542
+ "curves": "@entity.curves",
2543
+ "gridStep": "@config.gridStep",
2544
+ "height": "@config.height",
2545
+ "interactive": false,
2546
+ "points": [],
2547
+ "shapes": [],
2548
+ "showAxes": true,
2549
+ "showGrid": true,
2550
+ "title": "",
2551
+ "type": "math-canvas",
2552
+ "vectors": [],
2553
+ "width": "@config.width",
2554
+ "xMax": "@config.duration",
2555
+ "xMin": 0.0,
2556
+ "yMax": "@config.valueMax",
2557
+ "yMin": 0.0
2558
+ },
2559
+ {
2560
+ "content": [
2561
+ "str/concat",
2562
+ "t = ",
2563
+ [
2564
+ "math/round",
2565
+ "@entity.t",
2566
+ 1.0
2567
+ ],
2568
+ " · ",
2569
+ "@config.pLabel",
2570
+ " = ",
2571
+ [
2572
+ "math/round",
2573
+ "@entity.p",
2574
+ 1.0
2575
+ ],
2576
+ " · ",
2577
+ "@config.qLabel",
2578
+ " = ",
2579
+ [
2580
+ "math/round",
2581
+ "@entity.q",
2582
+ 1.0
2583
+ ]
2584
+ ],
2585
+ "type": "typography",
2586
+ "variant": "body"
2587
+ }
2588
+ ],
2589
+ "direction": "vertical",
2590
+ "gap": "md",
2591
+ "type": "stack"
2592
+ }
2593
+ ],
2594
+ "padding": "md",
2595
+ "type": "box"
2596
+ }
2597
+ ],
2598
+ [
2599
+ "emit",
2600
+ "COEFS_CHANGED",
2601
+ {
2602
+ "coefA": "@entity.coefA",
2603
+ "coefB": "@entity.coefB"
2604
+ }
2605
+ ]
2606
+ ],
2607
+ "event": "SET_B",
2608
+ "eventId": "evt_01M07580P01GV3DKXDN4CH6BPD",
2609
+ "from": "idle",
2610
+ "guard": [
2611
+ "==",
2612
+ "@entity.active",
2613
+ true
2614
+ ],
2615
+ "to": "idle"
2616
+ },
2617
+ {
2618
+ "effects": [
2619
+ [
2620
+ "set",
2621
+ "@entity.p",
2622
+ [
2623
+ "math/max",
2624
+ 0.0,
2625
+ [
2626
+ "+",
2627
+ "@entity.p",
2628
+ "@payload.delta"
2629
+ ]
2630
+ ]
2631
+ ],
2632
+ [
2633
+ "set",
2634
+ "@entity.pSamples",
2635
+ [
2636
+ "array/append",
2637
+ "@entity.pSamples",
2638
+ {
2639
+ "x": "@entity.t",
2640
+ "y": "@entity.p"
2641
+ }
2642
+ ]
2643
+ ],
2644
+ [
2645
+ "set",
2646
+ "@entity.curves",
2647
+ [
2648
+ {
2649
+ "color": "@config.pColor",
2650
+ "label": "@config.pLabel",
2651
+ "samples": "@entity.pSamples"
2652
+ },
2653
+ {
2654
+ "color": "@config.qColor",
2655
+ "label": "@config.qLabel",
2656
+ "samples": "@entity.qSamples"
2657
+ }
2658
+ ]
2659
+ ],
2660
+ [
2661
+ "render-ui",
2662
+ "main",
2663
+ {
2664
+ "children": [
2665
+ {
2666
+ "children": [
2667
+ {
2668
+ "content": "@entity.title",
2669
+ "type": "typography",
2670
+ "variant": "h4"
2671
+ },
2672
+ {
2673
+ "content": "@config.taskText",
2674
+ "type": "typography",
2675
+ "variant": "body"
2676
+ },
2677
+ {
2678
+ "children": [
2679
+ {
2680
+ "action": "RUN",
2681
+ "disabled": [
2682
+ "if",
2683
+ [
2684
+ "and",
2685
+ [
2686
+ "==",
2687
+ "@entity.running",
2688
+ false
2689
+ ],
2690
+ [
2691
+ "<",
2692
+ "@entity.t",
2693
+ "@config.duration"
2694
+ ]
2695
+ ],
2696
+ false,
2697
+ true
2698
+ ],
2699
+ "label": "Run",
2700
+ "type": "button",
2701
+ "variant": "primary"
2702
+ },
2703
+ {
2704
+ "action": "PAUSE",
2705
+ "disabled": [
2706
+ "if",
2707
+ "@entity.running",
2708
+ false,
2709
+ true
2710
+ ],
2711
+ "label": "Pause",
2712
+ "type": "button",
2713
+ "variant": "secondary"
2714
+ },
2715
+ {
2716
+ "action": "RESET",
2717
+ "label": "Reset",
2718
+ "type": "button",
2719
+ "variant": "ghost"
2720
+ },
2721
+ {
2722
+ "action": "SHOCK",
2723
+ "actionPayload": {
2724
+ "delta": "@config.shockSize"
2725
+ },
2726
+ "label": "@config.shockUpLabel",
2727
+ "size": "sm",
2728
+ "type": "button",
2729
+ "variant": "secondary"
2730
+ },
2731
+ {
2732
+ "action": "SHOCK",
2733
+ "actionPayload": {
2734
+ "delta": [
2735
+ "-",
2736
+ 0.0,
2737
+ "@config.shockSize"
2738
+ ]
2739
+ },
2740
+ "label": "@config.shockDownLabel",
2741
+ "size": "sm",
2742
+ "type": "button",
2743
+ "variant": "secondary"
2744
+ }
2745
+ ],
2746
+ "direction": "horizontal",
2747
+ "gap": "sm",
2748
+ "type": "stack"
2749
+ },
2750
+ {
2751
+ "children": [
2752
+ {
2753
+ "content": [
2754
+ "str/concat",
2755
+ "@config.coefALabel",
2756
+ ": ",
2757
+ [
2758
+ "math/round",
2759
+ "@entity.coefA",
2760
+ 3.0
2761
+ ]
2762
+ ],
2763
+ "type": "typography",
2764
+ "variant": "caption"
2765
+ },
2766
+ {
2767
+ "action": "SET_A",
2768
+ "max": "@config.coefAMax",
2769
+ "min": "@config.coefAMin",
2770
+ "showTooltip": true,
2771
+ "step": "@config.coefAStep",
2772
+ "type": "range-slider",
2773
+ "value": "@entity.coefA"
2774
+ }
2775
+ ],
2776
+ "direction": "vertical",
2777
+ "gap": "xs",
2778
+ "type": "stack"
2779
+ },
2780
+ {
2781
+ "children": [
2782
+ {
2783
+ "content": [
2784
+ "str/concat",
2785
+ "@config.coefBLabel",
2786
+ ": ",
2787
+ [
2788
+ "math/round",
2789
+ "@entity.coefB",
2790
+ 3.0
2791
+ ]
2792
+ ],
2793
+ "type": "typography",
2794
+ "variant": "caption"
2795
+ },
2796
+ {
2797
+ "action": "SET_B",
2798
+ "max": "@config.coefBMax",
2799
+ "min": "@config.coefBMin",
2800
+ "showTooltip": true,
2801
+ "step": "@config.coefBStep",
2802
+ "type": "range-slider",
2803
+ "value": "@entity.coefB"
2804
+ }
2805
+ ],
2806
+ "direction": "vertical",
2807
+ "gap": "xs",
2808
+ "type": "stack"
2809
+ },
2810
+ {
2811
+ "animate": false,
2812
+ "curves": "@entity.curves",
2813
+ "gridStep": "@config.gridStep",
2814
+ "height": "@config.height",
2815
+ "interactive": false,
2816
+ "points": [],
2817
+ "shapes": [],
2818
+ "showAxes": true,
2819
+ "showGrid": true,
2820
+ "title": "",
2821
+ "type": "math-canvas",
2822
+ "vectors": [],
2823
+ "width": "@config.width",
2824
+ "xMax": "@config.duration",
2825
+ "xMin": 0.0,
2826
+ "yMax": "@config.valueMax",
2827
+ "yMin": 0.0
2828
+ },
2829
+ {
2830
+ "content": [
2831
+ "str/concat",
2832
+ "t = ",
2833
+ [
2834
+ "math/round",
2835
+ "@entity.t",
2836
+ 1.0
2837
+ ],
2838
+ " · ",
2839
+ "@config.pLabel",
2840
+ " = ",
2841
+ [
2842
+ "math/round",
2843
+ "@entity.p",
2844
+ 1.0
2845
+ ],
2846
+ " · ",
2847
+ "@config.qLabel",
2848
+ " = ",
2849
+ [
2850
+ "math/round",
2851
+ "@entity.q",
2852
+ 1.0
2853
+ ]
2854
+ ],
2855
+ "type": "typography",
2856
+ "variant": "body"
2857
+ }
2858
+ ],
2859
+ "direction": "vertical",
2860
+ "gap": "md",
2861
+ "type": "stack"
2862
+ }
2863
+ ],
2864
+ "padding": "md",
2865
+ "type": "box"
2866
+ }
2867
+ ],
2868
+ [
2869
+ "emit",
2870
+ "SHOCK_APPLIED",
2871
+ {
2872
+ "delta": "@payload.delta",
2873
+ "p": "@entity.p",
2874
+ "q": "@entity.q"
2875
+ }
2876
+ ]
2877
+ ],
2878
+ "event": "SHOCK",
2879
+ "eventId": "evt_01M07580P0TJ5NZE7BGSPD00W6",
2880
+ "from": "idle",
2881
+ "guard": [
2882
+ "==",
2883
+ "@entity.active",
2884
+ true
2885
+ ],
2886
+ "to": "idle"
2887
+ }
2888
+ ]
2889
+ },
2890
+ "ticks": [
2891
+ {
2892
+ "effects": [
2893
+ [
2894
+ "let",
2895
+ [
2896
+ [
2897
+ "dt",
2898
+ [
2899
+ "*",
2900
+ 0.1,
2901
+ "@config.timeScale"
2902
+ ]
2903
+ ],
2904
+ [
2905
+ "a",
2906
+ "@entity.coefA"
2907
+ ],
2908
+ [
2909
+ "b",
2910
+ "@entity.coefB"
2911
+ ],
2912
+ [
2913
+ "P",
2914
+ "@entity.p"
2915
+ ],
2916
+ [
2917
+ "Q",
2918
+ "@entity.q"
2919
+ ],
2920
+ [
2921
+ "dP",
2922
+ [
2923
+ "if",
2924
+ [
2925
+ "==",
2926
+ "@config.kind",
2927
+ "predator-prey"
2928
+ ],
2929
+ [
2930
+ "-",
2931
+ [
2932
+ "*",
2933
+ "@a",
2934
+ "@P"
2935
+ ],
2936
+ [
2937
+ "*",
2938
+ "@b",
2939
+ "@P",
2940
+ "@Q",
2941
+ 0.01
2942
+ ]
2943
+ ],
2944
+ [
2945
+ "if",
2946
+ [
2947
+ "==",
2948
+ "@config.kind",
2949
+ "epidemic"
2950
+ ],
2951
+ [
2952
+ "-",
2953
+ 0.0,
2954
+ [
2955
+ "*",
2956
+ "@a",
2957
+ "@P",
2958
+ "@Q",
2959
+ 0.01
2960
+ ]
2961
+ ],
2962
+ [
2963
+ "-",
2964
+ 0.0,
2965
+ [
2966
+ "*",
2967
+ "@a",
2968
+ "@P"
2969
+ ]
2970
+ ]
2971
+ ]
2972
+ ]
2973
+ ],
2974
+ [
2975
+ "dQ",
2976
+ [
2977
+ "if",
2978
+ [
2979
+ "==",
2980
+ "@config.kind",
2981
+ "predator-prey"
2982
+ ],
2983
+ [
2984
+ "-",
2985
+ [
2986
+ "*",
2987
+ "@config.coefC",
2988
+ "@b",
2989
+ "@P",
2990
+ "@Q",
2991
+ 0.01
2992
+ ],
2993
+ [
2994
+ "*",
2995
+ "@config.coefD",
2996
+ "@Q"
2997
+ ]
2998
+ ],
2999
+ [
3000
+ "if",
3001
+ [
3002
+ "==",
3003
+ "@config.kind",
3004
+ "epidemic"
3005
+ ],
3006
+ [
3007
+ "-",
3008
+ [
3009
+ "*",
3010
+ "@a",
3011
+ "@P",
3012
+ "@Q",
3013
+ 0.01
3014
+ ],
3015
+ [
3016
+ "*",
3017
+ "@b",
3018
+ "@Q"
3019
+ ]
3020
+ ],
3021
+ [
3022
+ "-",
3023
+ [
3024
+ "*",
3025
+ "@a",
3026
+ "@P"
3027
+ ],
3028
+ [
3029
+ "*",
3030
+ "@b",
3031
+ "@Q"
3032
+ ]
3033
+ ]
3034
+ ]
3035
+ ]
3036
+ ],
3037
+ [
3038
+ "newP",
3039
+ [
3040
+ "math/max",
3041
+ 0.0,
3042
+ [
3043
+ "+",
3044
+ "@P",
3045
+ [
3046
+ "*",
3047
+ "@dP",
3048
+ "@dt"
3049
+ ]
3050
+ ]
3051
+ ]
3052
+ ],
3053
+ [
3054
+ "newQ",
3055
+ [
3056
+ "math/max",
3057
+ 0.0,
3058
+ [
3059
+ "+",
3060
+ "@Q",
3061
+ [
3062
+ "*",
3063
+ "@dQ",
3064
+ "@dt"
3065
+ ]
3066
+ ]
3067
+ ]
3068
+ ]
3069
+ ],
3070
+ [
3071
+ "do",
3072
+ [
3073
+ "set",
3074
+ "@entity.t",
3075
+ [
3076
+ "math/min",
3077
+ "@config.duration",
3078
+ [
3079
+ "+",
3080
+ "@entity.t",
3081
+ 0.1
3082
+ ]
3083
+ ]
3084
+ ],
3085
+ [
3086
+ "set",
3087
+ "@entity.p",
3088
+ "@newP"
3089
+ ],
3090
+ [
3091
+ "set",
3092
+ "@entity.q",
3093
+ "@newQ"
3094
+ ],
3095
+ [
3096
+ "set",
3097
+ "@entity.pSamples",
3098
+ [
3099
+ "array/append",
3100
+ "@entity.pSamples",
3101
+ {
3102
+ "x": "@entity.t",
3103
+ "y": "@newP"
3104
+ }
3105
+ ]
3106
+ ],
3107
+ [
3108
+ "set",
3109
+ "@entity.qSamples",
3110
+ [
3111
+ "array/append",
3112
+ "@entity.qSamples",
3113
+ {
3114
+ "x": "@entity.t",
3115
+ "y": "@newQ"
3116
+ }
3117
+ ]
3118
+ ],
3119
+ [
3120
+ "set",
3121
+ "@entity.curves",
3122
+ [
3123
+ {
3124
+ "color": "@config.pColor",
3125
+ "label": "@config.pLabel",
3126
+ "samples": "@entity.pSamples"
3127
+ },
3128
+ {
3129
+ "color": "@config.qColor",
3130
+ "label": "@config.qLabel",
3131
+ "samples": "@entity.qSamples"
3132
+ }
3133
+ ]
3134
+ ],
3135
+ [
3136
+ "set",
3137
+ "@entity.running",
3138
+ [
3139
+ "if",
3140
+ [
3141
+ ">=",
3142
+ "@entity.t",
3143
+ "@config.duration"
3144
+ ],
3145
+ false,
3146
+ true
3147
+ ]
3148
+ ]
3149
+ ]
3150
+ ]
3151
+ ],
3152
+ "guard": [
3153
+ "and",
3154
+ [
3155
+ "==",
3156
+ "@entity.active",
3157
+ true
3158
+ ],
3159
+ [
3160
+ "and",
3161
+ [
3162
+ "==",
3163
+ "@entity.running",
3164
+ true
3165
+ ],
3166
+ [
3167
+ "<",
3168
+ "@entity.t",
3169
+ "@config.duration"
3170
+ ]
3171
+ ]
3172
+ ],
3173
+ "interval": 100.0,
3174
+ "name": "coupledTick"
3175
+ }
3176
+ ]
3177
+ }
3178
+ ]
3179
+ }
3180
+ ],
3181
+ "schemaVersion": 1,
3182
+ "version": "1.0.0"
3183
+ }