@almadar/std 16.173.0 → 16.174.0

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