@almadar/std 16.188.0 → 16.189.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 (46) hide show
  1. package/behaviors/lolo/ui/core/.hand-authored.json +0 -4
  2. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +20 -8
  3. package/behaviors/lolo/ui/core/atoms/std-record-detail.lolo +428 -26
  4. package/behaviors/lolo/ui/core/atoms/std-related.lolo +5 -1
  5. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +1 -1
  6. package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +80 -0
  7. package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +213 -0
  8. package/behaviors/lolo/ui/core/molecules/{ui-rich-block-editor.lolo → ui-rich-text-editor.lolo} +25 -25
  9. package/behaviors/lolo/ui/game/atoms/std-choice-gate.lolo +100 -0
  10. package/behaviors/lolo/ui/game/atoms/std-coef-pad.lolo +114 -0
  11. package/behaviors/lolo/ui/game/atoms/std-curve-fog.lolo +50 -0
  12. package/behaviors/lolo/ui/game/atoms/std-pad-lock.lolo +5 -1
  13. package/behaviors/lolo/ui/game/atoms/std-platformer-body.lolo +29 -3
  14. package/behaviors/lolo/ui/game/atoms/std-zone-card.lolo +95 -0
  15. package/behaviors/lolo/ui/game/organisms/std-platformer-board-2d.lolo +9 -0
  16. package/behaviors/registry/ui/core/atoms/std-calendar.orb +51 -27
  17. package/behaviors/registry/ui/core/atoms/std-record-detail.orb +2399 -180
  18. package/behaviors/registry/ui/core/atoms/std-related.orb +23 -1
  19. package/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -1
  20. package/behaviors/registry/ui/core/molecules/ui-document-details.orb +342 -0
  21. package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +655 -0
  22. package/behaviors/registry/ui/core/molecules/{ui-rich-block-editor.orb → ui-rich-text-editor.orb} +84 -97
  23. package/behaviors/registry/ui/game/atoms/std-choice-gate.orb +855 -0
  24. package/behaviors/registry/ui/game/atoms/std-coef-pad.orb +928 -0
  25. package/behaviors/registry/ui/game/atoms/std-curve-fog.orb +337 -0
  26. package/behaviors/registry/ui/game/atoms/std-pad-lock.orb +31 -1
  27. package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +847 -401
  28. package/behaviors/registry/ui/game/atoms/std-zone-card.orb +642 -0
  29. package/behaviors/registry/ui/game/organisms/std-platformer-board-2d.orb +38 -6
  30. package/dist/behaviors/exports-reader.js +6491 -6163
  31. package/dist/behaviors/functions/index.d.ts +669 -300
  32. package/dist/behaviors/functions/index.js +6469 -6152
  33. package/dist/behaviors/index.d.ts +1 -1
  34. package/dist/behaviors/index.js +6492 -6164
  35. package/dist/behaviors/query.js +6491 -6163
  36. package/dist/behaviors-embeddings.hash.json +3 -3
  37. package/dist/behaviors-embeddings.json +367 -375
  38. package/dist/behaviors-registry.json +4104 -2597
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +6492 -6164
  41. package/dist/knob-embeddings.hash.json +3 -3
  42. package/dist/knob-embeddings.json +1 -1
  43. package/dist/registry/factory-signatures.json +1 -1
  44. package/package.json +4 -4
  45. package/behaviors/lolo/ui/core/atoms/std-rich-editor.lolo +0 -790
  46. package/behaviors/registry/ui/core/atoms/std-rich-editor.orb +0 -2225
@@ -0,0 +1,855 @@
1
+ {
2
+ "description": "Headless choice-gate mechanic for side-view boards: a gate of N labeled option platforms where progress stops until the player commits to an answer. Listens BODY_MOVED and judges a gate when the player stands grounded on one of its option platforms (|dx| <= reachX of the option center, |dy| <= reachY of the gate's option plane — the pad-lock touch pattern): the correct option stamps the gate solved + chosen on the shared entity and emits CHOICE_CORRECT once (a solved gate never judges again, so the path stays open); a wrong option emits CHOICE_WRONG carrying the gate id, the chosen optionId, and the option's world position, so the board can bounce the player back and float the gate's hint (the board owns the bounce — the atom only reports). RESTART unsolves every gate. Renders nothing; boards draw the option platforms and labels from the shared entity (the render authority).",
3
+ "ledger": {
4
+ "entries": {
5
+ "ent_01M144Y1KF1D8W68N3195C53AC": {
6
+ "bakedName": "ChoiceGateData",
7
+ "curName": "ChoiceGateData",
8
+ "id": "ent_01M144Y1KF1D8W68N3195C53AC",
9
+ "kind": "entity",
10
+ "owner": "workspace",
11
+ "renames": []
12
+ },
13
+ "evt_01M144Y1KF13Z3QV2ZWZME49WQ": {
14
+ "bakedName": "BODY_MOVED",
15
+ "curName": "BODY_MOVED",
16
+ "id": "evt_01M144Y1KF13Z3QV2ZWZME49WQ",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01M144Y1KFRV1XZJ1EE77ZDESR",
20
+ "renames": []
21
+ },
22
+ "evt_01M144Y1KF4SVX6MZ08VNE7C8A": {
23
+ "bakedName": "CHOICE_WRONG",
24
+ "curName": "CHOICE_WRONG",
25
+ "id": "evt_01M144Y1KF4SVX6MZ08VNE7C8A",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01M144Y1KFRV1XZJ1EE77ZDESR",
29
+ "renames": []
30
+ },
31
+ "evt_01M144Y1KFEFSM2YBBVJ9V0NHA": {
32
+ "bakedName": "INIT",
33
+ "curName": "INIT",
34
+ "id": "evt_01M144Y1KFEFSM2YBBVJ9V0NHA",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01M144Y1KFRV1XZJ1EE77ZDESR",
38
+ "renames": []
39
+ },
40
+ "evt_01M144Y1KFKY565GDY3P64AVJQ": {
41
+ "bakedName": "CHOICE_CORRECT",
42
+ "curName": "CHOICE_CORRECT",
43
+ "id": "evt_01M144Y1KFKY565GDY3P64AVJQ",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01M144Y1KFRV1XZJ1EE77ZDESR",
47
+ "renames": []
48
+ },
49
+ "evt_01M144Y1KFQN2TYBD17DKFE0VX": {
50
+ "bakedName": "RESTART",
51
+ "curName": "RESTART",
52
+ "id": "evt_01M144Y1KFQN2TYBD17DKFE0VX",
53
+ "kind": "event",
54
+ "owner": "workspace",
55
+ "parent": "trt_01M144Y1KFRV1XZJ1EE77ZDESR",
56
+ "renames": []
57
+ },
58
+ "orb_01M144Y1KF6CQJ8A3FJ3RX7TQ9": {
59
+ "bakedName": "ChoiceGateOrbital",
60
+ "curName": "ChoiceGateOrbital",
61
+ "id": "orb_01M144Y1KF6CQJ8A3FJ3RX7TQ9",
62
+ "kind": "orbital",
63
+ "owner": "workspace",
64
+ "renames": []
65
+ },
66
+ "pag_01M144Y1KF9JNTNJB605234HGT": {
67
+ "bakedName": "ChoiceGatePage",
68
+ "curName": "ChoiceGatePage",
69
+ "id": "pag_01M144Y1KF9JNTNJB605234HGT",
70
+ "kind": "page",
71
+ "owner": "workspace",
72
+ "renames": []
73
+ },
74
+ "trt_01M144Y1KFRV1XZJ1EE77ZDESR": {
75
+ "bakedName": "ChoiceGate",
76
+ "curName": "ChoiceGate",
77
+ "id": "trt_01M144Y1KFRV1XZJ1EE77ZDESR",
78
+ "kind": "trait",
79
+ "owner": "workspace",
80
+ "renames": []
81
+ }
82
+ },
83
+ "schemaVersion": 1
84
+ },
85
+ "name": "std-choice-gate",
86
+ "orbitals": [
87
+ {
88
+ "entity": {
89
+ "fields": [
90
+ {
91
+ "name": "id",
92
+ "required": true,
93
+ "type": "string"
94
+ },
95
+ {
96
+ "default": [],
97
+ "items": {
98
+ "properties": {
99
+ "chosen": {
100
+ "name": "chosen",
101
+ "required": false,
102
+ "type": "string"
103
+ },
104
+ "hint": {
105
+ "name": "hint",
106
+ "required": false,
107
+ "type": "string"
108
+ },
109
+ "id": {
110
+ "name": "id",
111
+ "required": true,
112
+ "type": "string"
113
+ },
114
+ "options": {
115
+ "items": {
116
+ "properties": {
117
+ "correct": {
118
+ "name": "correct",
119
+ "required": true,
120
+ "type": "boolean"
121
+ },
122
+ "dx": {
123
+ "name": "dx",
124
+ "required": true,
125
+ "type": "number"
126
+ },
127
+ "id": {
128
+ "name": "id",
129
+ "required": true,
130
+ "type": "string"
131
+ },
132
+ "label": {
133
+ "name": "label",
134
+ "required": true,
135
+ "type": "string"
136
+ }
137
+ },
138
+ "type": "object"
139
+ },
140
+ "name": "options",
141
+ "required": true,
142
+ "type": "array"
143
+ },
144
+ "solved": {
145
+ "name": "solved",
146
+ "required": false,
147
+ "type": "boolean"
148
+ },
149
+ "x": {
150
+ "name": "x",
151
+ "required": true,
152
+ "type": "number"
153
+ },
154
+ "y": {
155
+ "name": "y",
156
+ "required": true,
157
+ "type": "number"
158
+ }
159
+ },
160
+ "type": "object"
161
+ },
162
+ "name": "choices",
163
+ "type": "array"
164
+ }
165
+ ],
166
+ "id": "ent_01M144Y1KF1D8W68N3195C53AC",
167
+ "name": "ChoiceGateData",
168
+ "persistence": "runtime",
169
+ "shared": true
170
+ },
171
+ "id": "orb_01M144Y1KF6CQJ8A3FJ3RX7TQ9",
172
+ "name": "ChoiceGateOrbital",
173
+ "pages": [
174
+ {
175
+ "id": "pag_01M144Y1KF9JNTNJB605234HGT",
176
+ "name": "ChoiceGatePage",
177
+ "path": "/choice-gate",
178
+ "traits": [
179
+ {
180
+ "ref": "ChoiceGate",
181
+ "refId": "trt_01M144Y1KFRV1XZJ1EE77ZDESR"
182
+ }
183
+ ]
184
+ }
185
+ ],
186
+ "traits": [
187
+ {
188
+ "category": "lifecycle",
189
+ "config": {
190
+ "gates": {
191
+ "default": [],
192
+ "description": "One row per gate: id, gate center (x, y — y is the option-platform surface the judge tests against), the hint floated on a wrong answer, and the options: id, dx offset from the gate center, the label drawn above the platform, and correct. solved/chosen are stamped at runtime.",
193
+ "items": {
194
+ "properties": {
195
+ "chosen": {
196
+ "name": "chosen",
197
+ "required": false,
198
+ "type": "string"
199
+ },
200
+ "hint": {
201
+ "name": "hint",
202
+ "required": false,
203
+ "type": "string"
204
+ },
205
+ "id": {
206
+ "name": "id",
207
+ "required": true,
208
+ "type": "string"
209
+ },
210
+ "options": {
211
+ "items": {
212
+ "properties": {
213
+ "correct": {
214
+ "name": "correct",
215
+ "required": true,
216
+ "type": "boolean"
217
+ },
218
+ "dx": {
219
+ "name": "dx",
220
+ "required": true,
221
+ "type": "number"
222
+ },
223
+ "id": {
224
+ "name": "id",
225
+ "required": true,
226
+ "type": "string"
227
+ },
228
+ "label": {
229
+ "name": "label",
230
+ "required": true,
231
+ "type": "string"
232
+ }
233
+ },
234
+ "type": "object"
235
+ },
236
+ "name": "options",
237
+ "required": true,
238
+ "type": "array"
239
+ },
240
+ "solved": {
241
+ "name": "solved",
242
+ "required": false,
243
+ "type": "boolean"
244
+ },
245
+ "x": {
246
+ "name": "x",
247
+ "required": true,
248
+ "type": "number"
249
+ },
250
+ "y": {
251
+ "name": "y",
252
+ "required": true,
253
+ "type": "number"
254
+ }
255
+ },
256
+ "type": "object"
257
+ },
258
+ "label": "Choice Gates",
259
+ "tier": "domain",
260
+ "type": "[ChoiceGate]"
261
+ },
262
+ "reachX": {
263
+ "default": 0.7,
264
+ "description": "Horizontal tolerance (world units) around an option platform's center when testing a landing (approximates the body's half-width plus a step).",
265
+ "label": "Reach X",
266
+ "tier": "domain",
267
+ "type": "number"
268
+ },
269
+ "reachY": {
270
+ "default": 1.2,
271
+ "description": "Vertical tolerance (world units) around the gate's option plane when testing a landing (covers small hops onto the platform surface).",
272
+ "label": "Reach Y",
273
+ "tier": "domain",
274
+ "type": "number"
275
+ },
276
+ "running": {
277
+ "default": true,
278
+ "description": "When true, BODY_MOVED judges option landings; toggle to freeze every gate as-is.",
279
+ "label": "Running",
280
+ "tier": "domain",
281
+ "type": "boolean"
282
+ }
283
+ },
284
+ "emits": [
285
+ {
286
+ "description": "The player landed grounded on the gate's correct option; fires once per gate (solved gates stop judging). Carries the gate center so boards can burst the unlock there.",
287
+ "event": "CHOICE_CORRECT",
288
+ "eventId": "evt_01M144Y1KFKY565GDY3P64AVJQ",
289
+ "payloadSchema": [
290
+ {
291
+ "name": "id",
292
+ "required": true,
293
+ "type": "string"
294
+ },
295
+ {
296
+ "name": "x",
297
+ "required": true,
298
+ "type": "number"
299
+ },
300
+ {
301
+ "name": "y",
302
+ "required": true,
303
+ "type": "number"
304
+ }
305
+ ],
306
+ "scope": "external",
307
+ "tier": "domain"
308
+ },
309
+ {
310
+ "description": "The player landed grounded on a wrong option; carries the gate id, the chosen optionId, and the option's world position so boards can bounce the player back to the approach and float the gate's hint.",
311
+ "event": "CHOICE_WRONG",
312
+ "eventId": "evt_01M144Y1KF4SVX6MZ08VNE7C8A",
313
+ "payloadSchema": [
314
+ {
315
+ "name": "id",
316
+ "required": true,
317
+ "type": "string"
318
+ },
319
+ {
320
+ "name": "optionId",
321
+ "required": true,
322
+ "type": "string"
323
+ },
324
+ {
325
+ "name": "x",
326
+ "required": true,
327
+ "type": "number"
328
+ },
329
+ {
330
+ "name": "y",
331
+ "required": true,
332
+ "type": "number"
333
+ }
334
+ ],
335
+ "scope": "external",
336
+ "tier": "domain"
337
+ }
338
+ ],
339
+ "entityContract": {
340
+ "provides": [
341
+ "choices"
342
+ ],
343
+ "requires": []
344
+ },
345
+ "entityRebindable": true,
346
+ "entityRefIds": {
347
+ "ChoiceGateData": "ent_01M144Y1KF1D8W68N3195C53AC"
348
+ },
349
+ "id": "trt_01M144Y1KFRV1XZJ1EE77ZDESR",
350
+ "linkedEntity": "ChoiceGateData",
351
+ "linkedEntityId": "ent_01M144Y1KF1D8W68N3195C53AC",
352
+ "name": "ChoiceGate",
353
+ "scope": "instance",
354
+ "stateMachine": {
355
+ "events": [
356
+ {
357
+ "id": "evt_01M144Y1KFEFSM2YBBVJ9V0NHA",
358
+ "key": "INIT",
359
+ "name": "Initialize"
360
+ },
361
+ {
362
+ "id": "evt_01M144Y1KF13Z3QV2ZWZME49WQ",
363
+ "key": "BODY_MOVED",
364
+ "name": "Body Moved",
365
+ "payloadSchema": [
366
+ {
367
+ "name": "x",
368
+ "required": true,
369
+ "type": "number"
370
+ },
371
+ {
372
+ "name": "y",
373
+ "required": true,
374
+ "type": "number"
375
+ },
376
+ {
377
+ "name": "vx",
378
+ "required": true,
379
+ "type": "number"
380
+ },
381
+ {
382
+ "name": "vy",
383
+ "required": true,
384
+ "type": "number"
385
+ },
386
+ {
387
+ "name": "grounded",
388
+ "required": true,
389
+ "type": "boolean"
390
+ },
391
+ {
392
+ "name": "skating",
393
+ "required": true,
394
+ "type": "boolean"
395
+ },
396
+ {
397
+ "name": "speed",
398
+ "required": true,
399
+ "type": "number"
400
+ }
401
+ ]
402
+ },
403
+ {
404
+ "id": "evt_01M144Y1KFQN2TYBD17DKFE0VX",
405
+ "key": "RESTART",
406
+ "name": "Restart",
407
+ "payloadSchema": [
408
+ {
409
+ "name": "id",
410
+ "type": "string"
411
+ }
412
+ ]
413
+ },
414
+ {
415
+ "description": "The player landed grounded on the gate's correct option; fires once per gate (solved gates stop judging). Carries the gate center so boards can burst the unlock there.",
416
+ "id": "evt_01M144Y1KFKY565GDY3P64AVJQ",
417
+ "key": "CHOICE_CORRECT",
418
+ "name": "Choice Correct",
419
+ "payloadSchema": [
420
+ {
421
+ "name": "id",
422
+ "required": true,
423
+ "type": "string"
424
+ },
425
+ {
426
+ "name": "x",
427
+ "required": true,
428
+ "type": "number"
429
+ },
430
+ {
431
+ "name": "y",
432
+ "required": true,
433
+ "type": "number"
434
+ }
435
+ ],
436
+ "tier": "domain"
437
+ },
438
+ {
439
+ "description": "The player landed grounded on a wrong option; carries the gate id, the chosen optionId, and the option's world position so boards can bounce the player back to the approach and float the gate's hint.",
440
+ "id": "evt_01M144Y1KF4SVX6MZ08VNE7C8A",
441
+ "key": "CHOICE_WRONG",
442
+ "name": "Choice Wrong",
443
+ "payloadSchema": [
444
+ {
445
+ "name": "id",
446
+ "required": true,
447
+ "type": "string"
448
+ },
449
+ {
450
+ "name": "optionId",
451
+ "required": true,
452
+ "type": "string"
453
+ },
454
+ {
455
+ "name": "x",
456
+ "required": true,
457
+ "type": "number"
458
+ },
459
+ {
460
+ "name": "y",
461
+ "required": true,
462
+ "type": "number"
463
+ }
464
+ ],
465
+ "tier": "domain"
466
+ }
467
+ ],
468
+ "states": [
469
+ {
470
+ "isInitial": true,
471
+ "name": "active"
472
+ }
473
+ ],
474
+ "transitions": [
475
+ {
476
+ "effects": [
477
+ [
478
+ "set",
479
+ "@entity.choices",
480
+ [
481
+ "array/map",
482
+ "@config.gates",
483
+ [
484
+ "fn",
485
+ "g",
486
+ [
487
+ "object/merge",
488
+ "@g",
489
+ {
490
+ "chosen": "",
491
+ "solved": false
492
+ }
493
+ ]
494
+ ]
495
+ ]
496
+ ]
497
+ ],
498
+ "event": "INIT",
499
+ "eventId": "evt_01M144Y1KFEFSM2YBBVJ9V0NHA",
500
+ "from": "active",
501
+ "to": "active"
502
+ },
503
+ {
504
+ "effects": [
505
+ [
506
+ "let",
507
+ [
508
+ [
509
+ "touch",
510
+ [
511
+ "array/filter",
512
+ "@entity.choices",
513
+ [
514
+ "fn",
515
+ "g",
516
+ [
517
+ "and",
518
+ [
519
+ "==",
520
+ [
521
+ "object/get",
522
+ "@g",
523
+ "solved"
524
+ ],
525
+ false
526
+ ],
527
+ [
528
+ ">",
529
+ [
530
+ "array/len",
531
+ [
532
+ "array/filter",
533
+ [
534
+ "object/get",
535
+ "@g",
536
+ "options"
537
+ ],
538
+ [
539
+ "fn",
540
+ "o",
541
+ [
542
+ "and",
543
+ [
544
+ "==",
545
+ "@payload.grounded",
546
+ true
547
+ ],
548
+ [
549
+ "and",
550
+ [
551
+ "<=",
552
+ [
553
+ "math/abs",
554
+ [
555
+ "-",
556
+ "@payload.x",
557
+ [
558
+ "+",
559
+ [
560
+ "object/get",
561
+ "@g",
562
+ "x"
563
+ ],
564
+ [
565
+ "object/get",
566
+ "@o",
567
+ "dx"
568
+ ]
569
+ ]
570
+ ]
571
+ ],
572
+ "@config.reachX"
573
+ ],
574
+ [
575
+ "<=",
576
+ [
577
+ "math/abs",
578
+ [
579
+ "-",
580
+ "@payload.y",
581
+ [
582
+ "object/get",
583
+ "@g",
584
+ "y"
585
+ ]
586
+ ]
587
+ ],
588
+ "@config.reachY"
589
+ ]
590
+ ]
591
+ ]
592
+ ]
593
+ ]
594
+ ],
595
+ 0.0
596
+ ]
597
+ ]
598
+ ]
599
+ ]
600
+ ]
601
+ ],
602
+ [
603
+ "if",
604
+ [
605
+ ">",
606
+ [
607
+ "array/len",
608
+ "@touch"
609
+ ],
610
+ 0.0
611
+ ],
612
+ [
613
+ "let",
614
+ [
615
+ [
616
+ "g",
617
+ [
618
+ "array/first",
619
+ "@touch"
620
+ ]
621
+ ]
622
+ ],
623
+ [
624
+ "let",
625
+ [
626
+ [
627
+ "o",
628
+ [
629
+ "array/first",
630
+ [
631
+ "array/filter",
632
+ [
633
+ "object/get",
634
+ "@g",
635
+ "options"
636
+ ],
637
+ [
638
+ "fn",
639
+ "oo",
640
+ [
641
+ "and",
642
+ [
643
+ "==",
644
+ "@payload.grounded",
645
+ true
646
+ ],
647
+ [
648
+ "and",
649
+ [
650
+ "<=",
651
+ [
652
+ "math/abs",
653
+ [
654
+ "-",
655
+ "@payload.x",
656
+ [
657
+ "+",
658
+ [
659
+ "object/get",
660
+ "@g",
661
+ "x"
662
+ ],
663
+ [
664
+ "object/get",
665
+ "@oo",
666
+ "dx"
667
+ ]
668
+ ]
669
+ ]
670
+ ],
671
+ "@config.reachX"
672
+ ],
673
+ [
674
+ "<=",
675
+ [
676
+ "math/abs",
677
+ [
678
+ "-",
679
+ "@payload.y",
680
+ [
681
+ "object/get",
682
+ "@g",
683
+ "y"
684
+ ]
685
+ ]
686
+ ],
687
+ "@config.reachY"
688
+ ]
689
+ ]
690
+ ]
691
+ ]
692
+ ]
693
+ ]
694
+ ]
695
+ ],
696
+ [
697
+ "if",
698
+ [
699
+ "==",
700
+ [
701
+ "object/get",
702
+ "@o",
703
+ "correct"
704
+ ],
705
+ true
706
+ ],
707
+ [
708
+ "do",
709
+ [
710
+ "set",
711
+ "@entity.choices",
712
+ [
713
+ "array/map",
714
+ "@entity.choices",
715
+ [
716
+ "fn",
717
+ "c",
718
+ [
719
+ "if",
720
+ [
721
+ "==",
722
+ [
723
+ "object/get",
724
+ "@c",
725
+ "id"
726
+ ],
727
+ [
728
+ "object/get",
729
+ "@g",
730
+ "id"
731
+ ]
732
+ ],
733
+ [
734
+ "object/merge",
735
+ "@c",
736
+ {
737
+ "chosen": [
738
+ "object/get",
739
+ "@o",
740
+ "id"
741
+ ],
742
+ "solved": true
743
+ }
744
+ ],
745
+ "@c"
746
+ ]
747
+ ]
748
+ ]
749
+ ],
750
+ [
751
+ "emit",
752
+ "CHOICE_CORRECT",
753
+ {
754
+ "id": [
755
+ "object/get",
756
+ "@g",
757
+ "id"
758
+ ],
759
+ "x": [
760
+ "object/get",
761
+ "@g",
762
+ "x"
763
+ ],
764
+ "y": [
765
+ "object/get",
766
+ "@g",
767
+ "y"
768
+ ]
769
+ }
770
+ ]
771
+ ],
772
+ [
773
+ "emit",
774
+ "CHOICE_WRONG",
775
+ {
776
+ "id": [
777
+ "object/get",
778
+ "@g",
779
+ "id"
780
+ ],
781
+ "optionId": [
782
+ "object/get",
783
+ "@o",
784
+ "id"
785
+ ],
786
+ "x": [
787
+ "+",
788
+ [
789
+ "object/get",
790
+ "@g",
791
+ "x"
792
+ ],
793
+ [
794
+ "object/get",
795
+ "@o",
796
+ "dx"
797
+ ]
798
+ ],
799
+ "y": [
800
+ "object/get",
801
+ "@g",
802
+ "y"
803
+ ]
804
+ }
805
+ ]
806
+ ]
807
+ ]
808
+ ],
809
+ null
810
+ ]
811
+ ]
812
+ ],
813
+ "event": "BODY_MOVED",
814
+ "eventId": "evt_01M144Y1KF13Z3QV2ZWZME49WQ",
815
+ "from": "active",
816
+ "guard": "@config.running",
817
+ "to": "active"
818
+ },
819
+ {
820
+ "effects": [
821
+ [
822
+ "set",
823
+ "@entity.choices",
824
+ [
825
+ "array/map",
826
+ "@config.gates",
827
+ [
828
+ "fn",
829
+ "g",
830
+ [
831
+ "object/merge",
832
+ "@g",
833
+ {
834
+ "chosen": "",
835
+ "solved": false
836
+ }
837
+ ]
838
+ ]
839
+ ]
840
+ ]
841
+ ],
842
+ "event": "RESTART",
843
+ "eventId": "evt_01M144Y1KFQN2TYBD17DKFE0VX",
844
+ "from": "active",
845
+ "to": "active"
846
+ }
847
+ ]
848
+ }
849
+ }
850
+ ]
851
+ }
852
+ ],
853
+ "schemaVersion": 1,
854
+ "version": "1.0.0"
855
+ }