@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,1979 @@
1
+ {
2
+ "description": "Generic measurement lab — a config-declared signal (sine A·sin(B·t), growth A·(1+B)ᵗ, or half-life decay A·(1/2)^(t/B)) evolves live while Run is engaged, drawing its trace across the chart, and the learner presses Probe to record the instantaneous value as a data point: recorded points accumulate on the chart with a running sample count and mean, teaching the discipline of sampling a changing quantity rather than reading a printed table. Pause freezes time mid-run and Reset clears the experiment. All vocabulary and dynamics are config-declared, so the same mechanism serves any measure-the-system exercise: temperature during a reaction, voltage on a discharging capacitor, population through a season, a pendulum's displacement. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.",
3
+ "ledger": {
4
+ "entries": {
5
+ "ent_01M075815GTHB104DEZ60FSNDR": {
6
+ "bakedName": "MeasureScene",
7
+ "curName": "MeasureScene",
8
+ "id": "ent_01M075815GTHB104DEZ60FSNDR",
9
+ "kind": "entity",
10
+ "owner": "workspace",
11
+ "renames": []
12
+ },
13
+ "evt_01M075815GPDQMBY7NKES8CJVV": {
14
+ "bakedName": "INIT",
15
+ "curName": "INIT",
16
+ "id": "evt_01M075815GPDQMBY7NKES8CJVV",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
20
+ "renames": []
21
+ },
22
+ "evt_01M075815M02QD7Q1M0X5MD5X7": {
23
+ "bakedName": "PAUSE",
24
+ "curName": "PAUSE",
25
+ "id": "evt_01M075815M02QD7Q1M0X5MD5X7",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
29
+ "renames": []
30
+ },
31
+ "evt_01M075815M3T4JZ7R5XQGTQHR8": {
32
+ "bakedName": "MEASURE_RESET",
33
+ "curName": "MEASURE_RESET",
34
+ "id": "evt_01M075815M3T4JZ7R5XQGTQHR8",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
38
+ "renames": []
39
+ },
40
+ "evt_01M075815MA03A5SSAB91E1VSJ": {
41
+ "bakedName": "MODE_SELECTED",
42
+ "curName": "MODE_SELECTED",
43
+ "id": "evt_01M075815MA03A5SSAB91E1VSJ",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
47
+ "renames": []
48
+ },
49
+ "evt_01M075815MDMMK99BHXWM8HBNS": {
50
+ "bakedName": "RUN",
51
+ "curName": "RUN",
52
+ "id": "evt_01M075815MDMMK99BHXWM8HBNS",
53
+ "kind": "event",
54
+ "owner": "workspace",
55
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
56
+ "renames": []
57
+ },
58
+ "evt_01M075815MT2YVVDPRXZV26HBN": {
59
+ "bakedName": "PROBE_RECORDED",
60
+ "curName": "PROBE_RECORDED",
61
+ "id": "evt_01M075815MT2YVVDPRXZV26HBN",
62
+ "kind": "event",
63
+ "owner": "workspace",
64
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
65
+ "renames": []
66
+ },
67
+ "evt_01M075815MVARRBHRBJ5M66THK": {
68
+ "bakedName": "RUN_TOGGLED",
69
+ "curName": "RUN_TOGGLED",
70
+ "id": "evt_01M075815MVARRBHRBJ5M66THK",
71
+ "kind": "event",
72
+ "owner": "workspace",
73
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
74
+ "renames": []
75
+ },
76
+ "evt_01M075815MY0JZAPF2QN14H06N": {
77
+ "bakedName": "RESET",
78
+ "curName": "RESET",
79
+ "id": "evt_01M075815MY0JZAPF2QN14H06N",
80
+ "kind": "event",
81
+ "owner": "workspace",
82
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
83
+ "renames": []
84
+ },
85
+ "evt_01M075815MY65KFH437FC3B53T": {
86
+ "bakedName": "PROBE",
87
+ "curName": "PROBE",
88
+ "id": "evt_01M075815MY65KFH437FC3B53T",
89
+ "kind": "event",
90
+ "owner": "workspace",
91
+ "parent": "trt_01M075815GAMP7HHTXCBE7VS66",
92
+ "renames": []
93
+ },
94
+ "orb_01M075815G44PKNH4ZV052M4GM": {
95
+ "bakedName": "MeasureOrbital",
96
+ "curName": "MeasureOrbital",
97
+ "id": "orb_01M075815G44PKNH4ZV052M4GM",
98
+ "kind": "orbital",
99
+ "owner": "workspace",
100
+ "renames": []
101
+ },
102
+ "pag_01M075815NMSFFQWY89W2TDCSE": {
103
+ "bakedName": "MeasurePage",
104
+ "curName": "MeasurePage",
105
+ "id": "pag_01M075815NMSFFQWY89W2TDCSE",
106
+ "kind": "page",
107
+ "owner": "workspace",
108
+ "renames": []
109
+ },
110
+ "trt_01M075815GAMP7HHTXCBE7VS66": {
111
+ "bakedName": "MeasureSim",
112
+ "curName": "MeasureSim",
113
+ "id": "trt_01M075815GAMP7HHTXCBE7VS66",
114
+ "kind": "trait",
115
+ "owner": "workspace",
116
+ "renames": []
117
+ }
118
+ },
119
+ "schemaVersion": 1
120
+ },
121
+ "name": "std-learn-measure",
122
+ "orbitals": [
123
+ {
124
+ "entity": {
125
+ "fields": [
126
+ {
127
+ "name": "id",
128
+ "required": true,
129
+ "type": "string"
130
+ },
131
+ {
132
+ "default": false,
133
+ "name": "active",
134
+ "type": "boolean"
135
+ },
136
+ {
137
+ "name": "title",
138
+ "type": "string"
139
+ },
140
+ {
141
+ "default": 0.0,
142
+ "name": "t",
143
+ "type": "number"
144
+ },
145
+ {
146
+ "default": 0.0,
147
+ "name": "value",
148
+ "type": "number"
149
+ },
150
+ {
151
+ "default": false,
152
+ "name": "running",
153
+ "type": "boolean"
154
+ },
155
+ {
156
+ "items": {
157
+ "properties": {
158
+ "x": {
159
+ "name": "x",
160
+ "required": true,
161
+ "type": "number"
162
+ },
163
+ "y": {
164
+ "name": "y",
165
+ "required": true,
166
+ "type": "number"
167
+ }
168
+ },
169
+ "type": "object"
170
+ },
171
+ "name": "traceSamples",
172
+ "type": "array"
173
+ },
174
+ {
175
+ "items": {
176
+ "properties": {
177
+ "color": {
178
+ "name": "color",
179
+ "required": false,
180
+ "type": "string"
181
+ },
182
+ "label": {
183
+ "name": "label",
184
+ "required": false,
185
+ "type": "string"
186
+ },
187
+ "samples": {
188
+ "items": {
189
+ "properties": {
190
+ "x": {
191
+ "name": "x",
192
+ "required": true,
193
+ "type": "number"
194
+ },
195
+ "y": {
196
+ "name": "y",
197
+ "required": true,
198
+ "type": "number"
199
+ }
200
+ },
201
+ "type": "object"
202
+ },
203
+ "name": "samples",
204
+ "required": true,
205
+ "type": "array"
206
+ }
207
+ },
208
+ "type": "object"
209
+ },
210
+ "name": "traceCurves",
211
+ "type": "array"
212
+ },
213
+ {
214
+ "items": {
215
+ "properties": {
216
+ "color": {
217
+ "name": "color",
218
+ "required": false,
219
+ "type": "string"
220
+ },
221
+ "x": {
222
+ "name": "x",
223
+ "required": true,
224
+ "type": "number"
225
+ },
226
+ "y": {
227
+ "name": "y",
228
+ "required": true,
229
+ "type": "number"
230
+ }
231
+ },
232
+ "type": "object"
233
+ },
234
+ "name": "points",
235
+ "type": "array"
236
+ },
237
+ {
238
+ "default": 0.0,
239
+ "name": "sampleCount",
240
+ "type": "number"
241
+ },
242
+ {
243
+ "default": 0.0,
244
+ "name": "meanValue",
245
+ "type": "number"
246
+ }
247
+ ],
248
+ "id": "ent_01M075815GTHB104DEZ60FSNDR",
249
+ "name": "MeasureScene",
250
+ "persistence": "runtime"
251
+ },
252
+ "id": "orb_01M075815G44PKNH4ZV052M4GM",
253
+ "name": "MeasureOrbital",
254
+ "pages": [
255
+ {
256
+ "id": "pag_01M075815NMSFFQWY89W2TDCSE",
257
+ "name": "MeasurePage",
258
+ "path": "/learn-measure",
259
+ "traits": [
260
+ {
261
+ "ref": "MeasureSim",
262
+ "refId": "trt_01M075815GAMP7HHTXCBE7VS66"
263
+ }
264
+ ]
265
+ }
266
+ ],
267
+ "traits": [
268
+ {
269
+ "category": "interaction",
270
+ "config": {
271
+ "amplitude": {
272
+ "default": 5.0,
273
+ "description": "The A parameter: the signal's scale.",
274
+ "label": "Amplitude",
275
+ "tier": "domain",
276
+ "type": "number"
277
+ },
278
+ "duration": {
279
+ "default": 12.0,
280
+ "description": "Seconds the signal runs before stopping automatically.",
281
+ "label": "Duration",
282
+ "tier": "domain",
283
+ "type": "number"
284
+ },
285
+ "gridStep": {
286
+ "default": 1.0,
287
+ "label": "Grid Step",
288
+ "tier": "presentation",
289
+ "type": "number"
290
+ },
291
+ "height": {
292
+ "default": 360.0,
293
+ "label": "Height",
294
+ "tier": "presentation",
295
+ "type": "number"
296
+ },
297
+ "matchMode": {
298
+ "default": "",
299
+ "description": "When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.",
300
+ "label": "Match Mode",
301
+ "tier": "presentation",
302
+ "type": "string"
303
+ },
304
+ "probeColor": {
305
+ "default": "#dc2626",
306
+ "label": "Probe Color",
307
+ "tier": "presentation",
308
+ "type": "string"
309
+ },
310
+ "probeLabel": {
311
+ "default": "Probe",
312
+ "label": "Probe Label",
313
+ "tier": "presentation",
314
+ "type": "string"
315
+ },
316
+ "rate": {
317
+ "default": 1.2,
318
+ "description": "The B parameter: angular rate for sine, growth rate for growth, half-life in seconds for decay.",
319
+ "label": "Rate",
320
+ "tier": "domain",
321
+ "type": "number"
322
+ },
323
+ "signalColor": {
324
+ "default": "#94a3b8",
325
+ "label": "Signal Color",
326
+ "tier": "presentation",
327
+ "type": "string"
328
+ },
329
+ "signalKind": {
330
+ "default": "sine",
331
+ "description": "How the measured quantity evolves: sine (A·sin(B·t)), growth (A·(1+B)ᵗ), or decay (half-life A·(1/2)^(t/B)).",
332
+ "label": "Signal Kind",
333
+ "synonyms": "signal family, oscillation, exponential growth, half-life decay",
334
+ "tier": "domain",
335
+ "type": "string"
336
+ },
337
+ "taskText": {
338
+ "default": "Run the signal, then press Probe to record measurements. Watch the running mean settle.",
339
+ "description": "One-sentence statement of the measuring task.",
340
+ "label": "Task Text",
341
+ "tier": "domain",
342
+ "type": "string"
343
+ },
344
+ "title": {
345
+ "default": "Measurement Lab",
346
+ "description": "Title shown above the experiment.",
347
+ "label": "Title",
348
+ "tier": "presentation",
349
+ "type": "string"
350
+ },
351
+ "valueLabel": {
352
+ "default": "value",
353
+ "description": "Display name of the measured quantity.",
354
+ "label": "Value Label",
355
+ "tier": "presentation",
356
+ "type": "string"
357
+ },
358
+ "valueMax": {
359
+ "default": 6.0,
360
+ "description": "Upper bound of the chart's y axis.",
361
+ "label": "Value Max",
362
+ "tier": "presentation",
363
+ "type": "number"
364
+ },
365
+ "valueMin": {
366
+ "default": -6.0,
367
+ "description": "Lower bound of the chart's y axis.",
368
+ "label": "Value Min",
369
+ "tier": "presentation",
370
+ "type": "number"
371
+ },
372
+ "width": {
373
+ "default": 600.0,
374
+ "label": "Width",
375
+ "tier": "presentation",
376
+ "type": "number"
377
+ }
378
+ },
379
+ "emits": [
380
+ {
381
+ "description": "The experiment was started or paused — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.",
382
+ "event": "RUN_TOGGLED",
383
+ "eventId": "evt_01M075815MVARRBHRBJ5M66THK",
384
+ "payloadSchema": [
385
+ {
386
+ "name": "running",
387
+ "type": "boolean"
388
+ }
389
+ ],
390
+ "scope": "external",
391
+ "tier": "domain"
392
+ },
393
+ {
394
+ "description": "A measurement was taken: the probed time and value plus the running sample count and mean.",
395
+ "event": "PROBE_RECORDED",
396
+ "eventId": "evt_01M075815MT2YVVDPRXZV26HBN",
397
+ "payloadSchema": [
398
+ {
399
+ "name": "t",
400
+ "type": "number"
401
+ },
402
+ {
403
+ "name": "value",
404
+ "type": "number"
405
+ },
406
+ {
407
+ "name": "count",
408
+ "type": "number"
409
+ },
410
+ {
411
+ "name": "mean",
412
+ "type": "number"
413
+ }
414
+ ],
415
+ "scope": "external",
416
+ "synonyms": "measurement lab, probe, sample the signal, record data points, running mean",
417
+ "tier": "domain"
418
+ },
419
+ {
420
+ "description": "The learner reset the experiment to a clean slate.",
421
+ "event": "MEASURE_RESET",
422
+ "eventId": "evt_01M075815M3T4JZ7R5XQGTQHR8",
423
+ "payloadSchema": [
424
+ {
425
+ "name": "duration",
426
+ "type": "number"
427
+ }
428
+ ],
429
+ "scope": "external",
430
+ "tier": "domain"
431
+ }
432
+ ],
433
+ "entityContract": {
434
+ "provides": [
435
+ "active",
436
+ "meanValue",
437
+ "points",
438
+ "running",
439
+ "sampleCount",
440
+ "t",
441
+ "title",
442
+ "traceCurves",
443
+ "traceSamples",
444
+ "value"
445
+ ],
446
+ "requires": []
447
+ },
448
+ "entityRebindable": true,
449
+ "entityRefIds": {
450
+ "MeasureScene": "ent_01M075815GTHB104DEZ60FSNDR"
451
+ },
452
+ "id": "trt_01M075815GAMP7HHTXCBE7VS66",
453
+ "linkedEntity": "MeasureScene",
454
+ "linkedEntityId": "ent_01M075815GTHB104DEZ60FSNDR",
455
+ "name": "MeasureSim",
456
+ "scope": "instance",
457
+ "stateMachine": {
458
+ "events": [
459
+ {
460
+ "id": "evt_01M075815GPDQMBY7NKES8CJVV",
461
+ "key": "INIT",
462
+ "name": "Initialize"
463
+ },
464
+ {
465
+ "description": "Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.",
466
+ "id": "evt_01M075815MA03A5SSAB91E1VSJ",
467
+ "key": "MODE_SELECTED",
468
+ "name": "Mode Selected",
469
+ "payloadSchema": [
470
+ {
471
+ "name": "mode",
472
+ "type": "string"
473
+ }
474
+ ],
475
+ "tier": "domain"
476
+ },
477
+ {
478
+ "description": "Learner started (or resumed) the signal's evolution; the trace draws live until Pause or the configured duration.",
479
+ "id": "evt_01M075815MDMMK99BHXWM8HBNS",
480
+ "key": "RUN",
481
+ "name": "Run",
482
+ "tier": "domain"
483
+ },
484
+ {
485
+ "description": "Learner froze the signal mid-run; Probe still works on the frozen value.",
486
+ "id": "evt_01M075815M02QD7Q1M0X5MD5X7",
487
+ "key": "PAUSE",
488
+ "name": "Pause",
489
+ "tier": "domain"
490
+ },
491
+ {
492
+ "description": "Learner recorded the signal's instantaneous value as a data point; the sample count and running mean update.",
493
+ "id": "evt_01M075815MY65KFH437FC3B53T",
494
+ "key": "PROBE",
495
+ "name": "Probe",
496
+ "tier": "domain"
497
+ },
498
+ {
499
+ "description": "Learner cleared the experiment — time, trace, and all recorded samples return to zero.",
500
+ "id": "evt_01M075815MY0JZAPF2QN14H06N",
501
+ "key": "RESET",
502
+ "name": "Reset",
503
+ "tier": "domain"
504
+ },
505
+ {
506
+ "description": "The experiment was started or paused — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.",
507
+ "id": "evt_01M075815MVARRBHRBJ5M66THK",
508
+ "key": "RUN_TOGGLED",
509
+ "name": "Run Toggled",
510
+ "payloadSchema": [
511
+ {
512
+ "name": "running",
513
+ "type": "boolean"
514
+ }
515
+ ],
516
+ "tier": "domain"
517
+ },
518
+ {
519
+ "description": "A measurement was taken: the probed time and value plus the running sample count and mean.",
520
+ "id": "evt_01M075815MT2YVVDPRXZV26HBN",
521
+ "key": "PROBE_RECORDED",
522
+ "name": "Probe Recorded",
523
+ "payloadSchema": [
524
+ {
525
+ "name": "t",
526
+ "type": "number"
527
+ },
528
+ {
529
+ "name": "value",
530
+ "type": "number"
531
+ },
532
+ {
533
+ "name": "count",
534
+ "type": "number"
535
+ },
536
+ {
537
+ "name": "mean",
538
+ "type": "number"
539
+ }
540
+ ],
541
+ "synonyms": "measurement lab, probe, sample the signal, record data points, running mean",
542
+ "tier": "domain"
543
+ },
544
+ {
545
+ "description": "The learner reset the experiment to a clean slate.",
546
+ "id": "evt_01M075815M3T4JZ7R5XQGTQHR8",
547
+ "key": "MEASURE_RESET",
548
+ "name": "Measure Reset",
549
+ "payloadSchema": [
550
+ {
551
+ "name": "duration",
552
+ "type": "number"
553
+ }
554
+ ],
555
+ "tier": "domain"
556
+ }
557
+ ],
558
+ "states": [
559
+ {
560
+ "isInitial": true,
561
+ "name": "idle"
562
+ }
563
+ ],
564
+ "transitions": [
565
+ {
566
+ "effects": [
567
+ [
568
+ "set",
569
+ "@entity.active",
570
+ true
571
+ ],
572
+ [
573
+ "set",
574
+ "@entity.title",
575
+ "@config.title"
576
+ ],
577
+ [
578
+ "set",
579
+ "@entity.t",
580
+ 0.0
581
+ ],
582
+ [
583
+ "set",
584
+ "@entity.value",
585
+ [
586
+ "if",
587
+ [
588
+ "==",
589
+ "@config.signalKind",
590
+ "sine"
591
+ ],
592
+ 0.0,
593
+ "@config.amplitude"
594
+ ]
595
+ ],
596
+ [
597
+ "set",
598
+ "@entity.running",
599
+ false
600
+ ],
601
+ [
602
+ "set",
603
+ "@entity.traceSamples",
604
+ []
605
+ ],
606
+ [
607
+ "set",
608
+ "@entity.traceCurves",
609
+ []
610
+ ],
611
+ [
612
+ "set",
613
+ "@entity.points",
614
+ []
615
+ ],
616
+ [
617
+ "set",
618
+ "@entity.sampleCount",
619
+ 0.0
620
+ ],
621
+ [
622
+ "set",
623
+ "@entity.meanValue",
624
+ 0.0
625
+ ],
626
+ [
627
+ "render-ui",
628
+ "main",
629
+ {
630
+ "children": [
631
+ {
632
+ "children": [
633
+ {
634
+ "content": "@entity.title",
635
+ "type": "typography",
636
+ "variant": "h4"
637
+ },
638
+ {
639
+ "content": "@config.taskText",
640
+ "type": "typography",
641
+ "variant": "body"
642
+ },
643
+ {
644
+ "children": [
645
+ {
646
+ "action": "RUN",
647
+ "disabled": [
648
+ "if",
649
+ [
650
+ "and",
651
+ [
652
+ "==",
653
+ "@entity.running",
654
+ false
655
+ ],
656
+ [
657
+ "<",
658
+ "@entity.t",
659
+ "@config.duration"
660
+ ]
661
+ ],
662
+ false,
663
+ true
664
+ ],
665
+ "label": "Run",
666
+ "type": "button",
667
+ "variant": "primary"
668
+ },
669
+ {
670
+ "action": "PAUSE",
671
+ "disabled": [
672
+ "if",
673
+ "@entity.running",
674
+ false,
675
+ true
676
+ ],
677
+ "label": "Pause",
678
+ "type": "button",
679
+ "variant": "secondary"
680
+ },
681
+ {
682
+ "action": "PROBE",
683
+ "disabled": [
684
+ "if",
685
+ [
686
+ ">",
687
+ "@entity.t",
688
+ 0.0
689
+ ],
690
+ false,
691
+ true
692
+ ],
693
+ "label": "@config.probeLabel",
694
+ "type": "button",
695
+ "variant": "primary"
696
+ },
697
+ {
698
+ "action": "RESET",
699
+ "label": "Reset",
700
+ "type": "button",
701
+ "variant": "ghost"
702
+ }
703
+ ],
704
+ "direction": "horizontal",
705
+ "gap": "sm",
706
+ "type": "stack"
707
+ },
708
+ {
709
+ "animate": false,
710
+ "curves": "@entity.traceCurves",
711
+ "gridStep": "@config.gridStep",
712
+ "height": "@config.height",
713
+ "interactive": false,
714
+ "points": "@entity.points",
715
+ "shapes": [],
716
+ "showAxes": true,
717
+ "showGrid": true,
718
+ "title": "",
719
+ "type": "math-canvas",
720
+ "vectors": [],
721
+ "width": "@config.width",
722
+ "xMax": "@config.duration",
723
+ "xMin": 0.0,
724
+ "yMax": "@config.valueMax",
725
+ "yMin": "@config.valueMin"
726
+ },
727
+ {
728
+ "content": [
729
+ "str/concat",
730
+ "t = ",
731
+ [
732
+ "math/round",
733
+ "@entity.t",
734
+ 1.0
735
+ ],
736
+ "s · ",
737
+ "@config.valueLabel",
738
+ " = ",
739
+ [
740
+ "math/round",
741
+ "@entity.value",
742
+ 3.0
743
+ ]
744
+ ],
745
+ "type": "typography",
746
+ "variant": "body"
747
+ },
748
+ {
749
+ "content": [
750
+ "str/concat",
751
+ "Samples recorded: ",
752
+ [
753
+ "str/concat",
754
+ "",
755
+ "@entity.sampleCount"
756
+ ],
757
+ " · mean ",
758
+ "@config.valueLabel",
759
+ ": ",
760
+ [
761
+ "math/round",
762
+ "@entity.meanValue",
763
+ 3.0
764
+ ]
765
+ ],
766
+ "type": "typography",
767
+ "variant": "caption"
768
+ }
769
+ ],
770
+ "direction": "vertical",
771
+ "gap": "md",
772
+ "type": "stack"
773
+ }
774
+ ],
775
+ "padding": "md",
776
+ "type": "box"
777
+ }
778
+ ]
779
+ ],
780
+ "event": "INIT",
781
+ "eventId": "evt_01M075815GPDQMBY7NKES8CJVV",
782
+ "from": "idle",
783
+ "guard": [
784
+ "==",
785
+ "@config.matchMode",
786
+ ""
787
+ ],
788
+ "to": "idle"
789
+ },
790
+ {
791
+ "effects": [
792
+ [
793
+ "set",
794
+ "@entity.active",
795
+ true
796
+ ],
797
+ [
798
+ "set",
799
+ "@entity.title",
800
+ "@config.title"
801
+ ],
802
+ [
803
+ "set",
804
+ "@entity.t",
805
+ 0.0
806
+ ],
807
+ [
808
+ "set",
809
+ "@entity.value",
810
+ [
811
+ "if",
812
+ [
813
+ "==",
814
+ "@config.signalKind",
815
+ "sine"
816
+ ],
817
+ 0.0,
818
+ "@config.amplitude"
819
+ ]
820
+ ],
821
+ [
822
+ "set",
823
+ "@entity.running",
824
+ false
825
+ ],
826
+ [
827
+ "set",
828
+ "@entity.traceSamples",
829
+ []
830
+ ],
831
+ [
832
+ "set",
833
+ "@entity.traceCurves",
834
+ []
835
+ ],
836
+ [
837
+ "set",
838
+ "@entity.points",
839
+ []
840
+ ],
841
+ [
842
+ "set",
843
+ "@entity.sampleCount",
844
+ 0.0
845
+ ],
846
+ [
847
+ "set",
848
+ "@entity.meanValue",
849
+ 0.0
850
+ ],
851
+ [
852
+ "render-ui",
853
+ "main",
854
+ {
855
+ "children": [
856
+ {
857
+ "children": [
858
+ {
859
+ "content": "@entity.title",
860
+ "type": "typography",
861
+ "variant": "h4"
862
+ },
863
+ {
864
+ "content": "@config.taskText",
865
+ "type": "typography",
866
+ "variant": "body"
867
+ },
868
+ {
869
+ "children": [
870
+ {
871
+ "action": "RUN",
872
+ "disabled": [
873
+ "if",
874
+ [
875
+ "and",
876
+ [
877
+ "==",
878
+ "@entity.running",
879
+ false
880
+ ],
881
+ [
882
+ "<",
883
+ "@entity.t",
884
+ "@config.duration"
885
+ ]
886
+ ],
887
+ false,
888
+ true
889
+ ],
890
+ "label": "Run",
891
+ "type": "button",
892
+ "variant": "primary"
893
+ },
894
+ {
895
+ "action": "PAUSE",
896
+ "disabled": [
897
+ "if",
898
+ "@entity.running",
899
+ false,
900
+ true
901
+ ],
902
+ "label": "Pause",
903
+ "type": "button",
904
+ "variant": "secondary"
905
+ },
906
+ {
907
+ "action": "PROBE",
908
+ "disabled": [
909
+ "if",
910
+ [
911
+ ">",
912
+ "@entity.t",
913
+ 0.0
914
+ ],
915
+ false,
916
+ true
917
+ ],
918
+ "label": "@config.probeLabel",
919
+ "type": "button",
920
+ "variant": "primary"
921
+ },
922
+ {
923
+ "action": "RESET",
924
+ "label": "Reset",
925
+ "type": "button",
926
+ "variant": "ghost"
927
+ }
928
+ ],
929
+ "direction": "horizontal",
930
+ "gap": "sm",
931
+ "type": "stack"
932
+ },
933
+ {
934
+ "animate": false,
935
+ "curves": "@entity.traceCurves",
936
+ "gridStep": "@config.gridStep",
937
+ "height": "@config.height",
938
+ "interactive": false,
939
+ "points": "@entity.points",
940
+ "shapes": [],
941
+ "showAxes": true,
942
+ "showGrid": true,
943
+ "title": "",
944
+ "type": "math-canvas",
945
+ "vectors": [],
946
+ "width": "@config.width",
947
+ "xMax": "@config.duration",
948
+ "xMin": 0.0,
949
+ "yMax": "@config.valueMax",
950
+ "yMin": "@config.valueMin"
951
+ },
952
+ {
953
+ "content": [
954
+ "str/concat",
955
+ "t = ",
956
+ [
957
+ "math/round",
958
+ "@entity.t",
959
+ 1.0
960
+ ],
961
+ "s · ",
962
+ "@config.valueLabel",
963
+ " = ",
964
+ [
965
+ "math/round",
966
+ "@entity.value",
967
+ 3.0
968
+ ]
969
+ ],
970
+ "type": "typography",
971
+ "variant": "body"
972
+ },
973
+ {
974
+ "content": [
975
+ "str/concat",
976
+ "Samples recorded: ",
977
+ [
978
+ "str/concat",
979
+ "",
980
+ "@entity.sampleCount"
981
+ ],
982
+ " · mean ",
983
+ "@config.valueLabel",
984
+ ": ",
985
+ [
986
+ "math/round",
987
+ "@entity.meanValue",
988
+ 3.0
989
+ ]
990
+ ],
991
+ "type": "typography",
992
+ "variant": "caption"
993
+ }
994
+ ],
995
+ "direction": "vertical",
996
+ "gap": "md",
997
+ "type": "stack"
998
+ }
999
+ ],
1000
+ "padding": "md",
1001
+ "type": "box"
1002
+ }
1003
+ ]
1004
+ ],
1005
+ "event": "MODE_SELECTED",
1006
+ "eventId": "evt_01M075815MA03A5SSAB91E1VSJ",
1007
+ "from": "idle",
1008
+ "guard": [
1009
+ "==",
1010
+ "@payload.mode",
1011
+ "@config.matchMode"
1012
+ ],
1013
+ "to": "idle"
1014
+ },
1015
+ {
1016
+ "effects": [
1017
+ [
1018
+ "set",
1019
+ "@entity.running",
1020
+ true
1021
+ ],
1022
+ [
1023
+ "render-ui",
1024
+ "main",
1025
+ {
1026
+ "children": [
1027
+ {
1028
+ "children": [
1029
+ {
1030
+ "content": "@entity.title",
1031
+ "type": "typography",
1032
+ "variant": "h4"
1033
+ },
1034
+ {
1035
+ "content": "@config.taskText",
1036
+ "type": "typography",
1037
+ "variant": "body"
1038
+ },
1039
+ {
1040
+ "children": [
1041
+ {
1042
+ "action": "RUN",
1043
+ "disabled": [
1044
+ "if",
1045
+ [
1046
+ "and",
1047
+ [
1048
+ "==",
1049
+ "@entity.running",
1050
+ false
1051
+ ],
1052
+ [
1053
+ "<",
1054
+ "@entity.t",
1055
+ "@config.duration"
1056
+ ]
1057
+ ],
1058
+ false,
1059
+ true
1060
+ ],
1061
+ "label": "Run",
1062
+ "type": "button",
1063
+ "variant": "primary"
1064
+ },
1065
+ {
1066
+ "action": "PAUSE",
1067
+ "disabled": [
1068
+ "if",
1069
+ "@entity.running",
1070
+ false,
1071
+ true
1072
+ ],
1073
+ "label": "Pause",
1074
+ "type": "button",
1075
+ "variant": "secondary"
1076
+ },
1077
+ {
1078
+ "action": "PROBE",
1079
+ "disabled": [
1080
+ "if",
1081
+ [
1082
+ ">",
1083
+ "@entity.t",
1084
+ 0.0
1085
+ ],
1086
+ false,
1087
+ true
1088
+ ],
1089
+ "label": "@config.probeLabel",
1090
+ "type": "button",
1091
+ "variant": "primary"
1092
+ },
1093
+ {
1094
+ "action": "RESET",
1095
+ "label": "Reset",
1096
+ "type": "button",
1097
+ "variant": "ghost"
1098
+ }
1099
+ ],
1100
+ "direction": "horizontal",
1101
+ "gap": "sm",
1102
+ "type": "stack"
1103
+ },
1104
+ {
1105
+ "animate": false,
1106
+ "curves": "@entity.traceCurves",
1107
+ "gridStep": "@config.gridStep",
1108
+ "height": "@config.height",
1109
+ "interactive": false,
1110
+ "points": "@entity.points",
1111
+ "shapes": [],
1112
+ "showAxes": true,
1113
+ "showGrid": true,
1114
+ "title": "",
1115
+ "type": "math-canvas",
1116
+ "vectors": [],
1117
+ "width": "@config.width",
1118
+ "xMax": "@config.duration",
1119
+ "xMin": 0.0,
1120
+ "yMax": "@config.valueMax",
1121
+ "yMin": "@config.valueMin"
1122
+ },
1123
+ {
1124
+ "content": [
1125
+ "str/concat",
1126
+ "t = ",
1127
+ [
1128
+ "math/round",
1129
+ "@entity.t",
1130
+ 1.0
1131
+ ],
1132
+ "s · ",
1133
+ "@config.valueLabel",
1134
+ " = ",
1135
+ [
1136
+ "math/round",
1137
+ "@entity.value",
1138
+ 3.0
1139
+ ]
1140
+ ],
1141
+ "type": "typography",
1142
+ "variant": "body"
1143
+ },
1144
+ {
1145
+ "content": [
1146
+ "str/concat",
1147
+ "Samples recorded: ",
1148
+ [
1149
+ "str/concat",
1150
+ "",
1151
+ "@entity.sampleCount"
1152
+ ],
1153
+ " · mean ",
1154
+ "@config.valueLabel",
1155
+ ": ",
1156
+ [
1157
+ "math/round",
1158
+ "@entity.meanValue",
1159
+ 3.0
1160
+ ]
1161
+ ],
1162
+ "type": "typography",
1163
+ "variant": "caption"
1164
+ }
1165
+ ],
1166
+ "direction": "vertical",
1167
+ "gap": "md",
1168
+ "type": "stack"
1169
+ }
1170
+ ],
1171
+ "padding": "md",
1172
+ "type": "box"
1173
+ }
1174
+ ],
1175
+ [
1176
+ "emit",
1177
+ "RUN_TOGGLED",
1178
+ {
1179
+ "running": "@entity.running"
1180
+ }
1181
+ ]
1182
+ ],
1183
+ "event": "RUN",
1184
+ "eventId": "evt_01M075815MDMMK99BHXWM8HBNS",
1185
+ "from": "idle",
1186
+ "guard": [
1187
+ "and",
1188
+ [
1189
+ "==",
1190
+ "@entity.active",
1191
+ true
1192
+ ],
1193
+ [
1194
+ "and",
1195
+ [
1196
+ "==",
1197
+ "@entity.running",
1198
+ false
1199
+ ],
1200
+ [
1201
+ "<",
1202
+ "@entity.t",
1203
+ "@config.duration"
1204
+ ]
1205
+ ]
1206
+ ],
1207
+ "to": "idle"
1208
+ },
1209
+ {
1210
+ "effects": [
1211
+ [
1212
+ "set",
1213
+ "@entity.running",
1214
+ false
1215
+ ],
1216
+ [
1217
+ "render-ui",
1218
+ "main",
1219
+ {
1220
+ "children": [
1221
+ {
1222
+ "children": [
1223
+ {
1224
+ "content": "@entity.title",
1225
+ "type": "typography",
1226
+ "variant": "h4"
1227
+ },
1228
+ {
1229
+ "content": "@config.taskText",
1230
+ "type": "typography",
1231
+ "variant": "body"
1232
+ },
1233
+ {
1234
+ "children": [
1235
+ {
1236
+ "action": "RUN",
1237
+ "disabled": [
1238
+ "if",
1239
+ [
1240
+ "and",
1241
+ [
1242
+ "==",
1243
+ "@entity.running",
1244
+ false
1245
+ ],
1246
+ [
1247
+ "<",
1248
+ "@entity.t",
1249
+ "@config.duration"
1250
+ ]
1251
+ ],
1252
+ false,
1253
+ true
1254
+ ],
1255
+ "label": "Run",
1256
+ "type": "button",
1257
+ "variant": "primary"
1258
+ },
1259
+ {
1260
+ "action": "PAUSE",
1261
+ "disabled": [
1262
+ "if",
1263
+ "@entity.running",
1264
+ false,
1265
+ true
1266
+ ],
1267
+ "label": "Pause",
1268
+ "type": "button",
1269
+ "variant": "secondary"
1270
+ },
1271
+ {
1272
+ "action": "PROBE",
1273
+ "disabled": [
1274
+ "if",
1275
+ [
1276
+ ">",
1277
+ "@entity.t",
1278
+ 0.0
1279
+ ],
1280
+ false,
1281
+ true
1282
+ ],
1283
+ "label": "@config.probeLabel",
1284
+ "type": "button",
1285
+ "variant": "primary"
1286
+ },
1287
+ {
1288
+ "action": "RESET",
1289
+ "label": "Reset",
1290
+ "type": "button",
1291
+ "variant": "ghost"
1292
+ }
1293
+ ],
1294
+ "direction": "horizontal",
1295
+ "gap": "sm",
1296
+ "type": "stack"
1297
+ },
1298
+ {
1299
+ "animate": false,
1300
+ "curves": "@entity.traceCurves",
1301
+ "gridStep": "@config.gridStep",
1302
+ "height": "@config.height",
1303
+ "interactive": false,
1304
+ "points": "@entity.points",
1305
+ "shapes": [],
1306
+ "showAxes": true,
1307
+ "showGrid": true,
1308
+ "title": "",
1309
+ "type": "math-canvas",
1310
+ "vectors": [],
1311
+ "width": "@config.width",
1312
+ "xMax": "@config.duration",
1313
+ "xMin": 0.0,
1314
+ "yMax": "@config.valueMax",
1315
+ "yMin": "@config.valueMin"
1316
+ },
1317
+ {
1318
+ "content": [
1319
+ "str/concat",
1320
+ "t = ",
1321
+ [
1322
+ "math/round",
1323
+ "@entity.t",
1324
+ 1.0
1325
+ ],
1326
+ "s · ",
1327
+ "@config.valueLabel",
1328
+ " = ",
1329
+ [
1330
+ "math/round",
1331
+ "@entity.value",
1332
+ 3.0
1333
+ ]
1334
+ ],
1335
+ "type": "typography",
1336
+ "variant": "body"
1337
+ },
1338
+ {
1339
+ "content": [
1340
+ "str/concat",
1341
+ "Samples recorded: ",
1342
+ [
1343
+ "str/concat",
1344
+ "",
1345
+ "@entity.sampleCount"
1346
+ ],
1347
+ " · mean ",
1348
+ "@config.valueLabel",
1349
+ ": ",
1350
+ [
1351
+ "math/round",
1352
+ "@entity.meanValue",
1353
+ 3.0
1354
+ ]
1355
+ ],
1356
+ "type": "typography",
1357
+ "variant": "caption"
1358
+ }
1359
+ ],
1360
+ "direction": "vertical",
1361
+ "gap": "md",
1362
+ "type": "stack"
1363
+ }
1364
+ ],
1365
+ "padding": "md",
1366
+ "type": "box"
1367
+ }
1368
+ ],
1369
+ [
1370
+ "emit",
1371
+ "RUN_TOGGLED",
1372
+ {
1373
+ "running": "@entity.running"
1374
+ }
1375
+ ]
1376
+ ],
1377
+ "event": "PAUSE",
1378
+ "eventId": "evt_01M075815M02QD7Q1M0X5MD5X7",
1379
+ "from": "idle",
1380
+ "guard": [
1381
+ "and",
1382
+ [
1383
+ "==",
1384
+ "@entity.active",
1385
+ true
1386
+ ],
1387
+ [
1388
+ "==",
1389
+ "@entity.running",
1390
+ true
1391
+ ]
1392
+ ],
1393
+ "to": "idle"
1394
+ },
1395
+ {
1396
+ "effects": [
1397
+ [
1398
+ "set",
1399
+ "@entity.points",
1400
+ [
1401
+ "array/append",
1402
+ "@entity.points",
1403
+ {
1404
+ "color": "@config.probeColor",
1405
+ "x": "@entity.t",
1406
+ "y": "@entity.value"
1407
+ }
1408
+ ]
1409
+ ],
1410
+ [
1411
+ "set",
1412
+ "@entity.sampleCount",
1413
+ [
1414
+ "array/len",
1415
+ "@entity.points"
1416
+ ]
1417
+ ],
1418
+ [
1419
+ "set",
1420
+ "@entity.meanValue",
1421
+ [
1422
+ "array/avg",
1423
+ [
1424
+ "array/map",
1425
+ "@entity.points",
1426
+ [
1427
+ "fn",
1428
+ "p",
1429
+ [
1430
+ "object/get",
1431
+ "@p",
1432
+ "y"
1433
+ ]
1434
+ ]
1435
+ ]
1436
+ ]
1437
+ ],
1438
+ [
1439
+ "render-ui",
1440
+ "main",
1441
+ {
1442
+ "children": [
1443
+ {
1444
+ "children": [
1445
+ {
1446
+ "content": "@entity.title",
1447
+ "type": "typography",
1448
+ "variant": "h4"
1449
+ },
1450
+ {
1451
+ "content": "@config.taskText",
1452
+ "type": "typography",
1453
+ "variant": "body"
1454
+ },
1455
+ {
1456
+ "children": [
1457
+ {
1458
+ "action": "RUN",
1459
+ "disabled": [
1460
+ "if",
1461
+ [
1462
+ "and",
1463
+ [
1464
+ "==",
1465
+ "@entity.running",
1466
+ false
1467
+ ],
1468
+ [
1469
+ "<",
1470
+ "@entity.t",
1471
+ "@config.duration"
1472
+ ]
1473
+ ],
1474
+ false,
1475
+ true
1476
+ ],
1477
+ "label": "Run",
1478
+ "type": "button",
1479
+ "variant": "primary"
1480
+ },
1481
+ {
1482
+ "action": "PAUSE",
1483
+ "disabled": [
1484
+ "if",
1485
+ "@entity.running",
1486
+ false,
1487
+ true
1488
+ ],
1489
+ "label": "Pause",
1490
+ "type": "button",
1491
+ "variant": "secondary"
1492
+ },
1493
+ {
1494
+ "action": "PROBE",
1495
+ "disabled": [
1496
+ "if",
1497
+ [
1498
+ ">",
1499
+ "@entity.t",
1500
+ 0.0
1501
+ ],
1502
+ false,
1503
+ true
1504
+ ],
1505
+ "label": "@config.probeLabel",
1506
+ "type": "button",
1507
+ "variant": "primary"
1508
+ },
1509
+ {
1510
+ "action": "RESET",
1511
+ "label": "Reset",
1512
+ "type": "button",
1513
+ "variant": "ghost"
1514
+ }
1515
+ ],
1516
+ "direction": "horizontal",
1517
+ "gap": "sm",
1518
+ "type": "stack"
1519
+ },
1520
+ {
1521
+ "animate": false,
1522
+ "curves": "@entity.traceCurves",
1523
+ "gridStep": "@config.gridStep",
1524
+ "height": "@config.height",
1525
+ "interactive": false,
1526
+ "points": "@entity.points",
1527
+ "shapes": [],
1528
+ "showAxes": true,
1529
+ "showGrid": true,
1530
+ "title": "",
1531
+ "type": "math-canvas",
1532
+ "vectors": [],
1533
+ "width": "@config.width",
1534
+ "xMax": "@config.duration",
1535
+ "xMin": 0.0,
1536
+ "yMax": "@config.valueMax",
1537
+ "yMin": "@config.valueMin"
1538
+ },
1539
+ {
1540
+ "content": [
1541
+ "str/concat",
1542
+ "t = ",
1543
+ [
1544
+ "math/round",
1545
+ "@entity.t",
1546
+ 1.0
1547
+ ],
1548
+ "s · ",
1549
+ "@config.valueLabel",
1550
+ " = ",
1551
+ [
1552
+ "math/round",
1553
+ "@entity.value",
1554
+ 3.0
1555
+ ]
1556
+ ],
1557
+ "type": "typography",
1558
+ "variant": "body"
1559
+ },
1560
+ {
1561
+ "content": [
1562
+ "str/concat",
1563
+ "Samples recorded: ",
1564
+ [
1565
+ "str/concat",
1566
+ "",
1567
+ "@entity.sampleCount"
1568
+ ],
1569
+ " · mean ",
1570
+ "@config.valueLabel",
1571
+ ": ",
1572
+ [
1573
+ "math/round",
1574
+ "@entity.meanValue",
1575
+ 3.0
1576
+ ]
1577
+ ],
1578
+ "type": "typography",
1579
+ "variant": "caption"
1580
+ }
1581
+ ],
1582
+ "direction": "vertical",
1583
+ "gap": "md",
1584
+ "type": "stack"
1585
+ }
1586
+ ],
1587
+ "padding": "md",
1588
+ "type": "box"
1589
+ }
1590
+ ],
1591
+ [
1592
+ "emit",
1593
+ "PROBE_RECORDED",
1594
+ {
1595
+ "count": "@entity.sampleCount",
1596
+ "mean": "@entity.meanValue",
1597
+ "t": "@entity.t",
1598
+ "value": "@entity.value"
1599
+ }
1600
+ ]
1601
+ ],
1602
+ "event": "PROBE",
1603
+ "eventId": "evt_01M075815MY65KFH437FC3B53T",
1604
+ "from": "idle",
1605
+ "guard": [
1606
+ "and",
1607
+ [
1608
+ "==",
1609
+ "@entity.active",
1610
+ true
1611
+ ],
1612
+ [
1613
+ ">",
1614
+ "@entity.t",
1615
+ 0.0
1616
+ ]
1617
+ ],
1618
+ "to": "idle"
1619
+ },
1620
+ {
1621
+ "effects": [
1622
+ [
1623
+ "set",
1624
+ "@entity.t",
1625
+ 0.0
1626
+ ],
1627
+ [
1628
+ "set",
1629
+ "@entity.value",
1630
+ [
1631
+ "if",
1632
+ [
1633
+ "==",
1634
+ "@config.signalKind",
1635
+ "sine"
1636
+ ],
1637
+ 0.0,
1638
+ "@config.amplitude"
1639
+ ]
1640
+ ],
1641
+ [
1642
+ "set",
1643
+ "@entity.running",
1644
+ false
1645
+ ],
1646
+ [
1647
+ "set",
1648
+ "@entity.traceSamples",
1649
+ []
1650
+ ],
1651
+ [
1652
+ "set",
1653
+ "@entity.traceCurves",
1654
+ []
1655
+ ],
1656
+ [
1657
+ "set",
1658
+ "@entity.points",
1659
+ []
1660
+ ],
1661
+ [
1662
+ "set",
1663
+ "@entity.sampleCount",
1664
+ 0.0
1665
+ ],
1666
+ [
1667
+ "set",
1668
+ "@entity.meanValue",
1669
+ 0.0
1670
+ ],
1671
+ [
1672
+ "render-ui",
1673
+ "main",
1674
+ {
1675
+ "children": [
1676
+ {
1677
+ "children": [
1678
+ {
1679
+ "content": "@entity.title",
1680
+ "type": "typography",
1681
+ "variant": "h4"
1682
+ },
1683
+ {
1684
+ "content": "@config.taskText",
1685
+ "type": "typography",
1686
+ "variant": "body"
1687
+ },
1688
+ {
1689
+ "children": [
1690
+ {
1691
+ "action": "RUN",
1692
+ "disabled": [
1693
+ "if",
1694
+ [
1695
+ "and",
1696
+ [
1697
+ "==",
1698
+ "@entity.running",
1699
+ false
1700
+ ],
1701
+ [
1702
+ "<",
1703
+ "@entity.t",
1704
+ "@config.duration"
1705
+ ]
1706
+ ],
1707
+ false,
1708
+ true
1709
+ ],
1710
+ "label": "Run",
1711
+ "type": "button",
1712
+ "variant": "primary"
1713
+ },
1714
+ {
1715
+ "action": "PAUSE",
1716
+ "disabled": [
1717
+ "if",
1718
+ "@entity.running",
1719
+ false,
1720
+ true
1721
+ ],
1722
+ "label": "Pause",
1723
+ "type": "button",
1724
+ "variant": "secondary"
1725
+ },
1726
+ {
1727
+ "action": "PROBE",
1728
+ "disabled": [
1729
+ "if",
1730
+ [
1731
+ ">",
1732
+ "@entity.t",
1733
+ 0.0
1734
+ ],
1735
+ false,
1736
+ true
1737
+ ],
1738
+ "label": "@config.probeLabel",
1739
+ "type": "button",
1740
+ "variant": "primary"
1741
+ },
1742
+ {
1743
+ "action": "RESET",
1744
+ "label": "Reset",
1745
+ "type": "button",
1746
+ "variant": "ghost"
1747
+ }
1748
+ ],
1749
+ "direction": "horizontal",
1750
+ "gap": "sm",
1751
+ "type": "stack"
1752
+ },
1753
+ {
1754
+ "animate": false,
1755
+ "curves": "@entity.traceCurves",
1756
+ "gridStep": "@config.gridStep",
1757
+ "height": "@config.height",
1758
+ "interactive": false,
1759
+ "points": "@entity.points",
1760
+ "shapes": [],
1761
+ "showAxes": true,
1762
+ "showGrid": true,
1763
+ "title": "",
1764
+ "type": "math-canvas",
1765
+ "vectors": [],
1766
+ "width": "@config.width",
1767
+ "xMax": "@config.duration",
1768
+ "xMin": 0.0,
1769
+ "yMax": "@config.valueMax",
1770
+ "yMin": "@config.valueMin"
1771
+ },
1772
+ {
1773
+ "content": [
1774
+ "str/concat",
1775
+ "t = ",
1776
+ [
1777
+ "math/round",
1778
+ "@entity.t",
1779
+ 1.0
1780
+ ],
1781
+ "s · ",
1782
+ "@config.valueLabel",
1783
+ " = ",
1784
+ [
1785
+ "math/round",
1786
+ "@entity.value",
1787
+ 3.0
1788
+ ]
1789
+ ],
1790
+ "type": "typography",
1791
+ "variant": "body"
1792
+ },
1793
+ {
1794
+ "content": [
1795
+ "str/concat",
1796
+ "Samples recorded: ",
1797
+ [
1798
+ "str/concat",
1799
+ "",
1800
+ "@entity.sampleCount"
1801
+ ],
1802
+ " · mean ",
1803
+ "@config.valueLabel",
1804
+ ": ",
1805
+ [
1806
+ "math/round",
1807
+ "@entity.meanValue",
1808
+ 3.0
1809
+ ]
1810
+ ],
1811
+ "type": "typography",
1812
+ "variant": "caption"
1813
+ }
1814
+ ],
1815
+ "direction": "vertical",
1816
+ "gap": "md",
1817
+ "type": "stack"
1818
+ }
1819
+ ],
1820
+ "padding": "md",
1821
+ "type": "box"
1822
+ }
1823
+ ],
1824
+ [
1825
+ "emit",
1826
+ "MEASURE_RESET",
1827
+ {
1828
+ "duration": "@config.duration"
1829
+ }
1830
+ ]
1831
+ ],
1832
+ "event": "RESET",
1833
+ "eventId": "evt_01M075815MY0JZAPF2QN14H06N",
1834
+ "from": "idle",
1835
+ "guard": [
1836
+ "==",
1837
+ "@entity.active",
1838
+ true
1839
+ ],
1840
+ "to": "idle"
1841
+ }
1842
+ ]
1843
+ },
1844
+ "ticks": [
1845
+ {
1846
+ "effects": [
1847
+ [
1848
+ "set",
1849
+ "@entity.t",
1850
+ [
1851
+ "math/min",
1852
+ "@config.duration",
1853
+ [
1854
+ "+",
1855
+ "@entity.t",
1856
+ 0.1
1857
+ ]
1858
+ ]
1859
+ ],
1860
+ [
1861
+ "set",
1862
+ "@entity.value",
1863
+ [
1864
+ "if",
1865
+ [
1866
+ "==",
1867
+ "@config.signalKind",
1868
+ "sine"
1869
+ ],
1870
+ [
1871
+ "*",
1872
+ "@config.amplitude",
1873
+ [
1874
+ "math/sin",
1875
+ [
1876
+ "*",
1877
+ "@config.rate",
1878
+ "@entity.t"
1879
+ ]
1880
+ ]
1881
+ ],
1882
+ [
1883
+ "if",
1884
+ [
1885
+ "==",
1886
+ "@config.signalKind",
1887
+ "growth"
1888
+ ],
1889
+ [
1890
+ "*",
1891
+ "@config.amplitude",
1892
+ [
1893
+ "math/pow",
1894
+ [
1895
+ "+",
1896
+ 1.0,
1897
+ "@config.rate"
1898
+ ],
1899
+ "@entity.t"
1900
+ ]
1901
+ ],
1902
+ [
1903
+ "*",
1904
+ "@config.amplitude",
1905
+ [
1906
+ "math/pow",
1907
+ 0.5,
1908
+ [
1909
+ "/",
1910
+ "@entity.t",
1911
+ "@config.rate"
1912
+ ]
1913
+ ]
1914
+ ]
1915
+ ]
1916
+ ]
1917
+ ],
1918
+ [
1919
+ "set",
1920
+ "@entity.traceSamples",
1921
+ [
1922
+ "array/append",
1923
+ "@entity.traceSamples",
1924
+ {
1925
+ "x": "@entity.t",
1926
+ "y": "@entity.value"
1927
+ }
1928
+ ]
1929
+ ],
1930
+ [
1931
+ "set",
1932
+ "@entity.traceCurves",
1933
+ [
1934
+ {
1935
+ "color": "@config.signalColor",
1936
+ "label": "@config.valueLabel",
1937
+ "samples": "@entity.traceSamples"
1938
+ }
1939
+ ]
1940
+ ],
1941
+ [
1942
+ "set",
1943
+ "@entity.running",
1944
+ [
1945
+ "if",
1946
+ [
1947
+ ">=",
1948
+ "@entity.t",
1949
+ "@config.duration"
1950
+ ],
1951
+ false,
1952
+ true
1953
+ ]
1954
+ ]
1955
+ ],
1956
+ "guard": [
1957
+ "and",
1958
+ [
1959
+ "==",
1960
+ "@entity.active",
1961
+ true
1962
+ ],
1963
+ [
1964
+ "==",
1965
+ "@entity.running",
1966
+ true
1967
+ ]
1968
+ ],
1969
+ "interval": 100.0,
1970
+ "name": "measureTick"
1971
+ }
1972
+ ]
1973
+ }
1974
+ ]
1975
+ }
1976
+ ],
1977
+ "schemaVersion": 1,
1978
+ "version": "1.0.0"
1979
+ }