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