@almadar/std 16.243.0 → 16.244.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 (140) hide show
  1. package/behaviors/behaviors-registry.json +4470 -513
  2. package/behaviors/lolo/agent/atoms/std-agent-context.lolo +24 -4
  3. package/behaviors/lolo/agent/atoms/std-agent-memory.lolo +20 -5
  4. package/behaviors/lolo/agent/atoms/std-agent-proposal.lolo +550 -0
  5. package/behaviors/lolo/agent/atoms/std-agent-session.lolo +284 -25
  6. package/behaviors/lolo/agent/atoms/std-agent-suggestions.lolo +841 -0
  7. package/behaviors/lolo/agent/atoms/std-agent-tool-loop.lolo +58 -8
  8. package/behaviors/lolo/agent/organisms/std-agent-assistant.lolo +1 -0
  9. package/behaviors/lolo/infra/atoms/std-page-treat.lolo +28 -1
  10. package/behaviors/lolo/ui/avl/atoms/ui-avl-state-machine.lolo +22 -0
  11. package/behaviors/lolo/ui/avl/atoms/ui-avl-transition-explainer.lolo +175 -0
  12. package/behaviors/lolo/ui/avl/atoms/ui-module-card.lolo +22 -0
  13. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +23 -4
  14. package/behaviors/lolo/ui/core/atoms/std-hero.lolo +72 -33
  15. package/behaviors/lolo/ui/core/molecules/ui-agent-chat-feed.lolo +1 -1
  16. package/behaviors/lolo/ui/core/molecules/ui-markdown-content.lolo +54 -0
  17. package/behaviors/lolo/ui/core/molecules/ui-upload-drop-zone.lolo +5 -0
  18. package/behaviors/lolo/ui/core/organisms/ui-segment-renderer.lolo +127 -3
  19. package/behaviors/lolo/ui/core/organisms/ui-state-machine-view.lolo +22 -0
  20. package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +2 -2
  21. package/behaviors/lolo/ui/learning/atoms/std-learn-arrangement.lolo +87 -17
  22. package/behaviors/lolo/ui/learning/atoms/std-learn-classify.lolo +172 -37
  23. package/behaviors/lolo/ui/learning/atoms/std-learn-coupled-sim.lolo +183 -70
  24. package/behaviors/lolo/ui/learning/atoms/std-learn-derivation.lolo +78 -13
  25. package/behaviors/lolo/ui/learning/atoms/std-learn-diagram.lolo +58 -2
  26. package/behaviors/lolo/ui/learning/atoms/std-learn-doser.lolo +107 -12
  27. package/behaviors/lolo/ui/learning/atoms/std-learn-estimate.lolo +83 -10
  28. package/behaviors/lolo/ui/learning/atoms/std-learn-goal-seek.lolo +130 -9
  29. package/behaviors/lolo/ui/learning/atoms/std-learn-grid-sim.lolo +143 -59
  30. package/behaviors/lolo/ui/learning/atoms/std-learn-hotspot.lolo +96 -22
  31. package/behaviors/lolo/ui/learning/atoms/std-learn-live-sim.lolo +66 -5
  32. package/behaviors/lolo/ui/learning/atoms/std-learn-predict.lolo +84 -6
  33. package/behaviors/lolo/ui/learning/atoms/std-learn-sandbox.lolo +80 -14
  34. package/behaviors/lolo/ui/learning/atoms/std-learn-scatter-fit.lolo +99 -5
  35. package/behaviors/lolo/ui/learning/atoms/std-learn-scenario.lolo +81 -7
  36. package/behaviors/lolo/ui/learning/atoms/std-learn-speed-drill.lolo +83 -7
  37. package/behaviors/lolo/ui/learning/atoms/std-learn-stepper.lolo +224 -99
  38. package/behaviors/lolo/ui/learning/atoms/std-learn-tour-3d.lolo +63 -2
  39. package/behaviors/lolo/ui/learning/atoms/std-learn-trace-player.lolo +99 -38
  40. package/behaviors/lolo/ui/learning/atoms/std-learn-transport.lolo +7 -7
  41. package/behaviors/lolo/ui/learning/atoms/std-learn-tree.lolo +69 -4
  42. package/behaviors/lolo-behavior-contracts.json +1 -1
  43. package/behaviors/registry/agent/atoms/std-agent-context.orb +205 -6
  44. package/behaviors/registry/agent/atoms/std-agent-memory.orb +146 -4
  45. package/behaviors/registry/agent/atoms/std-agent-proposal.orb +1972 -0
  46. package/behaviors/registry/agent/atoms/std-agent-session.orb +2021 -597
  47. package/behaviors/registry/agent/atoms/std-agent-suggestions.orb +5079 -0
  48. package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +287 -5
  49. package/behaviors/registry/agent/organisms/std-agent-assistant.orb +7 -0
  50. package/behaviors/registry/factory-signatures.json +1 -1
  51. package/behaviors/registry/infra/atoms/std-page-treat.orb +327 -2
  52. package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +134 -0
  53. package/behaviors/registry/ui/avl/atoms/ui-avl-transition-explainer.orb +678 -0
  54. package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +122 -0
  55. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +73 -4
  56. package/behaviors/registry/ui/core/atoms/std-hero.orb +174 -97
  57. package/behaviors/registry/ui/core/molecules/ui-markdown-content.orb +204 -1
  58. package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +12 -0
  59. package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +683 -30
  60. package/behaviors/registry/ui/learning/atoms/std-learn-arrangement.orb +748 -21
  61. package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1429 -41
  62. package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +1031 -185
  63. package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +807 -132
  64. package/behaviors/registry/ui/learning/atoms/std-learn-diagram.orb +553 -6
  65. package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +987 -21
  66. package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +582 -16
  67. package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +954 -13
  68. package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +828 -88
  69. package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +730 -28
  70. package/behaviors/registry/ui/learning/atoms/std-learn-live-sim.orb +479 -9
  71. package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +797 -46
  72. package/behaviors/registry/ui/learning/atoms/std-learn-sandbox.orb +757 -58
  73. package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +1176 -164
  74. package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +599 -12
  75. package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +832 -150
  76. package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +1561 -127
  77. package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +655 -6
  78. package/behaviors/registry/ui/learning/atoms/std-learn-trace-player.orb +634 -43
  79. package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +85 -31
  80. package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +425 -9
  81. package/canonical-operators.json +45 -2
  82. package/dist/behaviors/exports-reader.js +16667 -7868
  83. package/dist/behaviors/functions/index.d.ts +711 -32
  84. package/dist/behaviors/functions/index.js +16651 -7869
  85. package/dist/behaviors/index.d.ts +1 -1
  86. package/dist/behaviors/index.js +16668 -7869
  87. package/dist/behaviors/query.js +16667 -7868
  88. package/dist/behaviors-embeddings.hash.json +3 -3
  89. package/dist/behaviors-embeddings.json +77 -53
  90. package/dist/behaviors-registry.json +4470 -513
  91. package/dist/index.d.ts +3 -3
  92. package/dist/index.js +16101 -7275
  93. package/dist/knob-embeddings.hash.json +3 -3
  94. package/dist/knob-embeddings.json +1309 -685
  95. package/dist/modules/anim.d.ts +1 -1
  96. package/dist/modules/array.d.ts +1 -1
  97. package/dist/modules/async.d.ts +1 -1
  98. package/dist/modules/behavior.d.ts +1 -1
  99. package/dist/modules/browser.d.ts +1 -1
  100. package/dist/modules/composition.d.ts +1 -1
  101. package/dist/modules/contract.d.ts +1 -1
  102. package/dist/modules/core.d.ts +1 -1
  103. package/dist/modules/core.js +29 -2
  104. package/dist/modules/data.d.ts +1 -1
  105. package/dist/modules/ease.d.ts +1 -1
  106. package/dist/modules/format.d.ts +1 -1
  107. package/dist/modules/geo.d.ts +1 -1
  108. package/dist/modules/graph.d.ts +1 -1
  109. package/dist/modules/grid.d.ts +1 -1
  110. package/dist/modules/i18n.d.ts +1 -1
  111. package/dist/modules/index.d.ts +1 -1
  112. package/dist/modules/index.js +29 -2
  113. package/dist/modules/integration.d.ts +1 -1
  114. package/dist/modules/json.d.ts +1 -1
  115. package/dist/modules/llm.d.ts +1 -1
  116. package/dist/modules/math.d.ts +1 -1
  117. package/dist/modules/memory.d.ts +1 -1
  118. package/dist/modules/nn.d.ts +1 -1
  119. package/dist/modules/noise.d.ts +1 -1
  120. package/dist/modules/object.d.ts +1 -1
  121. package/dist/modules/os.d.ts +1 -1
  122. package/dist/modules/path.d.ts +1 -1
  123. package/dist/modules/prob.d.ts +1 -1
  124. package/dist/modules/session.d.ts +1 -1
  125. package/dist/modules/str.d.ts +1 -1
  126. package/dist/modules/tensor.d.ts +1 -1
  127. package/dist/modules/time.d.ts +1 -1
  128. package/dist/modules/trace.d.ts +1 -1
  129. package/dist/modules/train.d.ts +1 -1
  130. package/dist/modules/validate.d.ts +1 -1
  131. package/dist/modules/vector.d.ts +1 -1
  132. package/dist/modules/workspace.d.ts +1 -1
  133. package/dist/registry/factory-signatures.json +1 -1
  134. package/dist/registry.d.ts +2 -2
  135. package/dist/registry.js +29 -2
  136. package/dist/{types-Cdb321uM.d.ts → types-Y-yYWEOX.d.ts} +1 -1
  137. package/i18n/ar.json +3 -1
  138. package/i18n/en.json +2 -0
  139. package/i18n/sl.json +3 -1
  140. package/package.json +3 -3
@@ -100,6 +100,15 @@
100
100
  "parent": "trt_01M0CGZ8SPD6WYV3H0J6SV7NBD",
101
101
  "renames": []
102
102
  },
103
+ "evt_01M459WM1T8AZZEB24MTT1XDT1": {
104
+ "bakedName": "ROSTER_LOADED",
105
+ "curName": "ROSTER_LOADED",
106
+ "id": "evt_01M459WM1T8AZZEB24MTT1XDT1",
107
+ "kind": "event",
108
+ "owner": "workspace",
109
+ "parent": "trt_01M0CGZ8SPD6WYV3H0J6SV7NBD",
110
+ "renames": []
111
+ },
103
112
  "orb_01M0CGZ8SPVWFV0VMERY7EXKM3": {
104
113
  "bakedName": "LearnDoserOrbital",
105
114
  "curName": "LearnDoserOrbital",
@@ -270,6 +279,35 @@
270
279
  },
271
280
  "name": "doseSeries",
272
281
  "type": "array"
282
+ },
283
+ {
284
+ "items": {
285
+ "properties": {
286
+ "color": {
287
+ "name": "color",
288
+ "required": true,
289
+ "type": "string"
290
+ },
291
+ "label": {
292
+ "name": "label",
293
+ "required": true,
294
+ "type": "string"
295
+ },
296
+ "terminal": {
297
+ "name": "terminal",
298
+ "required": false,
299
+ "type": "boolean"
300
+ },
301
+ "upperBound": {
302
+ "name": "upperBound",
303
+ "required": true,
304
+ "type": "number"
305
+ }
306
+ },
307
+ "type": "object"
308
+ },
309
+ "name": "bands",
310
+ "type": "array"
273
311
  }
274
312
  ],
275
313
  "id": "ent_01M0CGZ8SP7WAX9ZZT3E63FRWT",
@@ -407,6 +445,17 @@
407
445
  "tier": "presentation",
408
446
  "type": "string"
409
447
  },
448
+ "rosterSource": {
449
+ "default": "config",
450
+ "description": "Where the band roster comes from: config reads the bands knob at INIT; event waits for ROSTER_LOADED and takes the roster from its payload.",
451
+ "label": "Roster Source",
452
+ "tier": "domain",
453
+ "type": "string",
454
+ "values": [
455
+ "config",
456
+ "event"
457
+ ]
458
+ },
410
459
  "series": {
411
460
  "default": [],
412
461
  "description": "Overrides the theme's categorical palette on the canvas (series-1…N) — a subject's real-world color convention, such as indicator colors. Empty uses the theme's palette.",
@@ -527,6 +576,10 @@
527
576
  "kind": "set",
528
577
  "resource": "@entity.bandLabel"
529
578
  },
579
+ {
580
+ "kind": "set",
581
+ "resource": "@entity.bands"
582
+ },
530
583
  {
531
584
  "kind": "set",
532
585
  "resource": "@entity.containers"
@@ -658,6 +711,7 @@
658
711
  "active",
659
712
  "bandColor",
660
713
  "bandLabel",
714
+ "bands",
661
715
  "containers",
662
716
  "done",
663
717
  "dose",
@@ -699,6 +753,46 @@
699
753
  ],
700
754
  "tier": "domain"
701
755
  },
756
+ {
757
+ "description": "Runtime content feed, honoured only when rosterSource is event — mode names the instrument it is for (the matchMode it carries, blank when standalone) and bands is the band roster; a matching instrument re-initialises from it exactly as INIT does from config, any other instrument hides.",
758
+ "id": "evt_01M459WM1T8AZZEB24MTT1XDT1",
759
+ "key": "ROSTER_LOADED",
760
+ "name": "Roster Loaded",
761
+ "payloadSchema": [
762
+ {
763
+ "name": "mode",
764
+ "required": true,
765
+ "type": "string"
766
+ },
767
+ {
768
+ "name": "bands",
769
+ "properties": [
770
+ {
771
+ "name": "upperBound",
772
+ "required": true,
773
+ "type": "number"
774
+ },
775
+ {
776
+ "name": "label",
777
+ "required": true,
778
+ "type": "string"
779
+ },
780
+ {
781
+ "name": "color",
782
+ "required": true,
783
+ "type": "string"
784
+ },
785
+ {
786
+ "name": "terminal",
787
+ "type": "boolean"
788
+ }
789
+ ],
790
+ "required": true,
791
+ "type": "[object]"
792
+ }
793
+ ],
794
+ "tier": "domain"
795
+ },
702
796
  {
703
797
  "id": "evt_01M0CGZ8SPACRAV5BKCG4WH64Y",
704
798
  "key": "ADD_SMALL",
@@ -817,6 +911,11 @@
817
911
  "@entity.title",
818
912
  "@config.title"
819
913
  ],
914
+ [
915
+ "set",
916
+ "@entity.bands",
917
+ "@config.bands"
918
+ ],
820
919
  [
821
920
  "set",
822
921
  "@entity.dose",
@@ -844,7 +943,7 @@
844
943
  "matched",
845
944
  [
846
945
  "array/filter",
847
- "@config.bands",
946
+ "@entity.bands",
848
947
  [
849
948
  "fn",
850
949
  "b",
@@ -878,12 +977,12 @@
878
977
  ],
879
978
  [
880
979
  "array/nth",
881
- "@config.bands",
980
+ "@entity.bands",
882
981
  [
883
982
  "-",
884
983
  [
885
984
  "array/len",
886
- "@config.bands"
985
+ "@entity.bands"
887
986
  ],
888
987
  1.0
889
988
  ]
@@ -1582,9 +1681,17 @@
1582
1681
  "eventId": "evt_01M0CGZ8SPH5C42ESXGKNMKQMQ",
1583
1682
  "from": "idle",
1584
1683
  "guard": [
1585
- "==",
1586
- "@config.matchMode",
1587
- ""
1684
+ "and",
1685
+ [
1686
+ "==",
1687
+ "@config.matchMode",
1688
+ ""
1689
+ ],
1690
+ [
1691
+ "==",
1692
+ "@config.rosterSource",
1693
+ "config"
1694
+ ]
1588
1695
  ],
1589
1696
  "to": "idle"
1590
1697
  },
@@ -1642,6 +1749,11 @@
1642
1749
  "@entity.title",
1643
1750
  "@config.title"
1644
1751
  ],
1752
+ [
1753
+ "set",
1754
+ "@entity.bands",
1755
+ "@config.bands"
1756
+ ],
1645
1757
  [
1646
1758
  "set",
1647
1759
  "@entity.dose",
@@ -1669,7 +1781,7 @@
1669
1781
  "matched",
1670
1782
  [
1671
1783
  "array/filter",
1672
- "@config.bands",
1784
+ "@entity.bands",
1673
1785
  [
1674
1786
  "fn",
1675
1787
  "b",
@@ -1703,12 +1815,12 @@
1703
1815
  ],
1704
1816
  [
1705
1817
  "array/nth",
1706
- "@config.bands",
1818
+ "@entity.bands",
1707
1819
  [
1708
1820
  "-",
1709
1821
  [
1710
1822
  "array/len",
1711
- "@config.bands"
1823
+ "@entity.bands"
1712
1824
  ],
1713
1825
  1.0
1714
1826
  ]
@@ -2407,9 +2519,863 @@
2407
2519
  "eventId": "evt_01M0CGZ8SPCJWD38ZCMJGGA4EF",
2408
2520
  "from": "idle",
2409
2521
  "guard": [
2410
- "==",
2411
- "@payload.mode",
2412
- "@config.matchMode"
2522
+ "and",
2523
+ [
2524
+ "==",
2525
+ "@payload.mode",
2526
+ "@config.matchMode"
2527
+ ],
2528
+ [
2529
+ "==",
2530
+ "@config.rosterSource",
2531
+ "config"
2532
+ ]
2533
+ ],
2534
+ "to": "idle"
2535
+ },
2536
+ {
2537
+ "effects": [
2538
+ [
2539
+ "set",
2540
+ "@entity.active",
2541
+ true
2542
+ ],
2543
+ [
2544
+ "set",
2545
+ "@entity.title",
2546
+ "@config.title"
2547
+ ],
2548
+ [
2549
+ "set",
2550
+ "@entity.bands",
2551
+ "@payload.bands"
2552
+ ],
2553
+ [
2554
+ "set",
2555
+ "@entity.dose",
2556
+ 0.0
2557
+ ],
2558
+ [
2559
+ "set",
2560
+ "@entity.done",
2561
+ false
2562
+ ],
2563
+ [
2564
+ "set",
2565
+ "@entity.running",
2566
+ "@config.autoDrip"
2567
+ ],
2568
+ [
2569
+ "set",
2570
+ "@entity.elapsedMs",
2571
+ 0.0
2572
+ ],
2573
+ [
2574
+ "let",
2575
+ [
2576
+ [
2577
+ "matched",
2578
+ [
2579
+ "array/filter",
2580
+ "@entity.bands",
2581
+ [
2582
+ "fn",
2583
+ "b",
2584
+ [
2585
+ "<=",
2586
+ "@entity.dose",
2587
+ [
2588
+ "object/get",
2589
+ "@b",
2590
+ "upperBound"
2591
+ ]
2592
+ ]
2593
+ ]
2594
+ ]
2595
+ ],
2596
+ [
2597
+ "band",
2598
+ [
2599
+ "if",
2600
+ [
2601
+ ">",
2602
+ [
2603
+ "array/len",
2604
+ "@matched"
2605
+ ],
2606
+ 0.0
2607
+ ],
2608
+ [
2609
+ "array/first",
2610
+ "@matched"
2611
+ ],
2612
+ [
2613
+ "array/nth",
2614
+ "@entity.bands",
2615
+ [
2616
+ "-",
2617
+ [
2618
+ "array/len",
2619
+ "@entity.bands"
2620
+ ],
2621
+ 1.0
2622
+ ]
2623
+ ]
2624
+ ]
2625
+ ]
2626
+ ],
2627
+ [
2628
+ "do",
2629
+ [
2630
+ "set",
2631
+ "@entity.bandLabel",
2632
+ [
2633
+ "object/get",
2634
+ "@band",
2635
+ "label"
2636
+ ]
2637
+ ],
2638
+ [
2639
+ "set",
2640
+ "@entity.bandColor",
2641
+ [
2642
+ "object/get",
2643
+ "@band",
2644
+ "color"
2645
+ ]
2646
+ ],
2647
+ [
2648
+ "set",
2649
+ "@entity.done",
2650
+ [
2651
+ "if",
2652
+ [
2653
+ "object/get",
2654
+ "@band",
2655
+ "terminal",
2656
+ false
2657
+ ],
2658
+ true,
2659
+ "@entity.done"
2660
+ ]
2661
+ ]
2662
+ ]
2663
+ ],
2664
+ [
2665
+ "set",
2666
+ "@entity.containers",
2667
+ [
2668
+ {
2669
+ "divider": "none",
2670
+ "height": [
2671
+ "*",
2672
+ "@config.height",
2673
+ 0.6
2674
+ ],
2675
+ "label": "@config.reservoirLabel",
2676
+ "level": [
2677
+ "math/clamp",
2678
+ [
2679
+ "/",
2680
+ "@entity.dose",
2681
+ "@config.capacity"
2682
+ ],
2683
+ 0.0,
2684
+ 1.0
2685
+ ],
2686
+ "levelColor": "@entity.bandColor",
2687
+ "width": [
2688
+ "*",
2689
+ "@config.width",
2690
+ 0.28
2691
+ ],
2692
+ "x": [
2693
+ "*",
2694
+ "@config.width",
2695
+ 0.12
2696
+ ],
2697
+ "y": [
2698
+ "*",
2699
+ "@config.height",
2700
+ 0.3
2701
+ ]
2702
+ },
2703
+ {
2704
+ "divider": "none",
2705
+ "height": [
2706
+ "*",
2707
+ "@config.height",
2708
+ 0.55
2709
+ ],
2710
+ "label": "@config.sourceLabel",
2711
+ "level": [
2712
+ "math/clamp",
2713
+ [
2714
+ "/",
2715
+ [
2716
+ "-",
2717
+ "@config.capacity",
2718
+ "@entity.dose"
2719
+ ],
2720
+ "@config.capacity"
2721
+ ],
2722
+ 0.0,
2723
+ 1.0
2724
+ ],
2725
+ "levelColor": "@config.sourceColor",
2726
+ "width": [
2727
+ "*",
2728
+ "@config.width",
2729
+ 0.06
2730
+ ],
2731
+ "x": [
2732
+ "*",
2733
+ "@config.width",
2734
+ 0.58
2735
+ ],
2736
+ "y": [
2737
+ "*",
2738
+ "@config.height",
2739
+ 0.05
2740
+ ]
2741
+ }
2742
+ ]
2743
+ ],
2744
+ [
2745
+ "set",
2746
+ "@entity.readouts",
2747
+ [
2748
+ {
2749
+ "label": "@config.quantityLabel",
2750
+ "value": [
2751
+ "str/concat",
2752
+ "",
2753
+ [
2754
+ "math/round",
2755
+ "@entity.dose",
2756
+ 2.0
2757
+ ]
2758
+ ]
2759
+ },
2760
+ {
2761
+ "label": "@config.zoneReadoutLabel",
2762
+ "value": "@entity.bandLabel"
2763
+ }
2764
+ ]
2765
+ ],
2766
+ [
2767
+ "set",
2768
+ "@entity.doseSeries",
2769
+ [
2770
+ {
2771
+ "x": 0.0,
2772
+ "y": "@entity.dose"
2773
+ }
2774
+ ]
2775
+ ],
2776
+ [
2777
+ "set",
2778
+ "@entity.narration",
2779
+ [
2780
+ "str/concat",
2781
+ "@config.quantityLabel",
2782
+ [
2783
+ "str/concat",
2784
+ " at ",
2785
+ [
2786
+ "str/concat",
2787
+ [
2788
+ "str/concat",
2789
+ "",
2790
+ [
2791
+ "math/round",
2792
+ "@entity.dose",
2793
+ 2.0
2794
+ ]
2795
+ ],
2796
+ [
2797
+ "str/concat",
2798
+ " — ",
2799
+ "@entity.bandLabel"
2800
+ ]
2801
+ ]
2802
+ ]
2803
+ ]
2804
+ ],
2805
+ [
2806
+ "if",
2807
+ "@config.showCanvas",
2808
+ [
2809
+ "render-ui",
2810
+ "main",
2811
+ {
2812
+ "children": [
2813
+ {
2814
+ "children": [
2815
+ {
2816
+ "align": "start",
2817
+ "children": [
2818
+ {
2819
+ "children": [
2820
+ {
2821
+ "content": "@entity.title",
2822
+ "type": "typography",
2823
+ "variant": "h4"
2824
+ },
2825
+ [
2826
+ "if",
2827
+ [
2828
+ "==",
2829
+ "@config.summary",
2830
+ ""
2831
+ ],
2832
+ null,
2833
+ {
2834
+ "color": "muted",
2835
+ "content": "@config.summary",
2836
+ "type": "typography",
2837
+ "variant": "body2"
2838
+ }
2839
+ ]
2840
+ ],
2841
+ "direction": "vertical",
2842
+ "gap": "xs",
2843
+ "type": "stack"
2844
+ },
2845
+ {
2846
+ "label": [
2847
+ "if",
2848
+ "@entity.done",
2849
+ "Locked",
2850
+ [
2851
+ "if",
2852
+ "@entity.running",
2853
+ "Auto-dosing",
2854
+ "Ready"
2855
+ ]
2856
+ ],
2857
+ "type": "badge",
2858
+ "variant": [
2859
+ "if",
2860
+ "@entity.done",
2861
+ "warning",
2862
+ [
2863
+ "if",
2864
+ "@entity.running",
2865
+ "primary",
2866
+ "neutral"
2867
+ ]
2868
+ ]
2869
+ }
2870
+ ],
2871
+ "direction": "horizontal",
2872
+ "gap": "md",
2873
+ "justify": "between",
2874
+ "type": "stack"
2875
+ },
2876
+ {
2877
+ "align": "center",
2878
+ "children": [
2879
+ {
2880
+ "action": "ADD_SMALL",
2881
+ "disabled": "@entity.done",
2882
+ "icon": "plus",
2883
+ "label": [
2884
+ "str/concat",
2885
+ "Add ",
2886
+ [
2887
+ "str/concat",
2888
+ [
2889
+ "str/concat",
2890
+ "",
2891
+ "@config.stepSmall"
2892
+ ],
2893
+ [
2894
+ "if",
2895
+ [
2896
+ "==",
2897
+ "@config.unit",
2898
+ ""
2899
+ ],
2900
+ "",
2901
+ [
2902
+ "str/concat",
2903
+ " ",
2904
+ "@config.unit"
2905
+ ]
2906
+ ]
2907
+ ]
2908
+ ],
2909
+ "type": "button",
2910
+ "variant": "primary"
2911
+ },
2912
+ {
2913
+ "action": "ADD_LARGE",
2914
+ "disabled": "@entity.done",
2915
+ "icon": "plus",
2916
+ "label": [
2917
+ "str/concat",
2918
+ "Add ",
2919
+ [
2920
+ "str/concat",
2921
+ [
2922
+ "str/concat",
2923
+ "",
2924
+ "@config.stepLarge"
2925
+ ],
2926
+ [
2927
+ "if",
2928
+ [
2929
+ "==",
2930
+ "@config.unit",
2931
+ ""
2932
+ ],
2933
+ "",
2934
+ [
2935
+ "str/concat",
2936
+ " ",
2937
+ "@config.unit"
2938
+ ]
2939
+ ]
2940
+ ]
2941
+ ],
2942
+ "type": "button",
2943
+ "variant": "secondary"
2944
+ },
2945
+ [
2946
+ "if",
2947
+ "@entity.running",
2948
+ {
2949
+ "action": "TOGGLE_DRIP",
2950
+ "aria-pressed": "true",
2951
+ "icon": "pause",
2952
+ "label": "Pause",
2953
+ "type": "button",
2954
+ "variant": "secondary"
2955
+ },
2956
+ {
2957
+ "action": "TOGGLE_DRIP",
2958
+ "aria-pressed": "false",
2959
+ "disabled": "@entity.done",
2960
+ "icon": "play",
2961
+ "label": "Auto-dose",
2962
+ "type": "button",
2963
+ "variant": "secondary"
2964
+ }
2965
+ ],
2966
+ {
2967
+ "action": "RESET",
2968
+ "icon": "rotate-ccw",
2969
+ "label": "Reset",
2970
+ "type": "button",
2971
+ "variant": "ghost"
2972
+ },
2973
+ {
2974
+ "color": "muted",
2975
+ "content": [
2976
+ "str/concat",
2977
+ "@config.quantityLabel",
2978
+ [
2979
+ "str/concat",
2980
+ " ",
2981
+ [
2982
+ "str/concat",
2983
+ [
2984
+ "str/concat",
2985
+ "",
2986
+ [
2987
+ "math/round",
2988
+ "@entity.dose",
2989
+ 2.0
2990
+ ]
2991
+ ],
2992
+ [
2993
+ "str/concat",
2994
+ " of ",
2995
+ [
2996
+ "str/concat",
2997
+ [
2998
+ "str/concat",
2999
+ "",
3000
+ "@config.capacity"
3001
+ ],
3002
+ [
3003
+ "if",
3004
+ [
3005
+ "==",
3006
+ "@config.unit",
3007
+ ""
3008
+ ],
3009
+ "",
3010
+ [
3011
+ "str/concat",
3012
+ " ",
3013
+ "@config.unit"
3014
+ ]
3015
+ ]
3016
+ ]
3017
+ ]
3018
+ ]
3019
+ ]
3020
+ ],
3021
+ "type": "typography",
3022
+ "variant": "caption"
3023
+ }
3024
+ ],
3025
+ "direction": "horizontal",
3026
+ "gap": "sm",
3027
+ "type": "stack",
3028
+ "wrap": true
3029
+ },
3030
+ {
3031
+ "backgroundColor": "@config.backgroundColor",
3032
+ "containers": "@entity.containers",
3033
+ "height": "@config.height",
3034
+ "keyMap": {
3035
+ "KeyR": "RESET",
3036
+ "Space": "TOGGLE_DRIP"
3037
+ },
3038
+ "readouts": "@entity.readouts",
3039
+ "series": "@config.series",
3040
+ "traces": [
3041
+ {
3042
+ "series": [
3043
+ {
3044
+ "label": "@config.quantityLabel",
3045
+ "samples": "@entity.doseSeries"
3046
+ }
3047
+ ],
3048
+ "xLabel": "step",
3049
+ "yLabel": "@config.quantityLabel"
3050
+ }
3051
+ ],
3052
+ "type": "chemistry-canvas",
3053
+ "width": "@config.width"
3054
+ },
3055
+ {
3056
+ "content": "@entity.narration",
3057
+ "type": "typography",
3058
+ "variant": "body"
3059
+ }
3060
+ ],
3061
+ "direction": "vertical",
3062
+ "gap": "md",
3063
+ "type": "stack"
3064
+ }
3065
+ ],
3066
+ "padding": "md",
3067
+ "type": "box"
3068
+ }
3069
+ ],
3070
+ [
3071
+ "render-ui",
3072
+ "main",
3073
+ {
3074
+ "children": [
3075
+ {
3076
+ "children": [
3077
+ {
3078
+ "align": "start",
3079
+ "children": [
3080
+ {
3081
+ "children": [
3082
+ {
3083
+ "content": "@entity.title",
3084
+ "type": "typography",
3085
+ "variant": "h4"
3086
+ },
3087
+ [
3088
+ "if",
3089
+ [
3090
+ "==",
3091
+ "@config.summary",
3092
+ ""
3093
+ ],
3094
+ null,
3095
+ {
3096
+ "color": "muted",
3097
+ "content": "@config.summary",
3098
+ "type": "typography",
3099
+ "variant": "body2"
3100
+ }
3101
+ ]
3102
+ ],
3103
+ "direction": "vertical",
3104
+ "gap": "xs",
3105
+ "type": "stack"
3106
+ },
3107
+ {
3108
+ "label": [
3109
+ "if",
3110
+ "@entity.done",
3111
+ "Locked",
3112
+ [
3113
+ "if",
3114
+ "@entity.running",
3115
+ "Auto-dosing",
3116
+ "Ready"
3117
+ ]
3118
+ ],
3119
+ "type": "badge",
3120
+ "variant": [
3121
+ "if",
3122
+ "@entity.done",
3123
+ "warning",
3124
+ [
3125
+ "if",
3126
+ "@entity.running",
3127
+ "primary",
3128
+ "neutral"
3129
+ ]
3130
+ ]
3131
+ }
3132
+ ],
3133
+ "direction": "horizontal",
3134
+ "gap": "md",
3135
+ "justify": "between",
3136
+ "type": "stack"
3137
+ },
3138
+ {
3139
+ "align": "center",
3140
+ "children": [
3141
+ {
3142
+ "action": "ADD_SMALL",
3143
+ "disabled": "@entity.done",
3144
+ "icon": "plus",
3145
+ "label": [
3146
+ "str/concat",
3147
+ "Add ",
3148
+ [
3149
+ "str/concat",
3150
+ [
3151
+ "str/concat",
3152
+ "",
3153
+ "@config.stepSmall"
3154
+ ],
3155
+ [
3156
+ "if",
3157
+ [
3158
+ "==",
3159
+ "@config.unit",
3160
+ ""
3161
+ ],
3162
+ "",
3163
+ [
3164
+ "str/concat",
3165
+ " ",
3166
+ "@config.unit"
3167
+ ]
3168
+ ]
3169
+ ]
3170
+ ],
3171
+ "type": "button",
3172
+ "variant": "primary"
3173
+ },
3174
+ {
3175
+ "action": "ADD_LARGE",
3176
+ "disabled": "@entity.done",
3177
+ "icon": "plus",
3178
+ "label": [
3179
+ "str/concat",
3180
+ "Add ",
3181
+ [
3182
+ "str/concat",
3183
+ [
3184
+ "str/concat",
3185
+ "",
3186
+ "@config.stepLarge"
3187
+ ],
3188
+ [
3189
+ "if",
3190
+ [
3191
+ "==",
3192
+ "@config.unit",
3193
+ ""
3194
+ ],
3195
+ "",
3196
+ [
3197
+ "str/concat",
3198
+ " ",
3199
+ "@config.unit"
3200
+ ]
3201
+ ]
3202
+ ]
3203
+ ],
3204
+ "type": "button",
3205
+ "variant": "secondary"
3206
+ },
3207
+ [
3208
+ "if",
3209
+ "@entity.running",
3210
+ {
3211
+ "action": "TOGGLE_DRIP",
3212
+ "aria-pressed": "true",
3213
+ "icon": "pause",
3214
+ "label": "Pause",
3215
+ "type": "button",
3216
+ "variant": "secondary"
3217
+ },
3218
+ {
3219
+ "action": "TOGGLE_DRIP",
3220
+ "aria-pressed": "false",
3221
+ "disabled": "@entity.done",
3222
+ "icon": "play",
3223
+ "label": "Auto-dose",
3224
+ "type": "button",
3225
+ "variant": "secondary"
3226
+ }
3227
+ ],
3228
+ {
3229
+ "action": "RESET",
3230
+ "icon": "rotate-ccw",
3231
+ "label": "Reset",
3232
+ "type": "button",
3233
+ "variant": "ghost"
3234
+ },
3235
+ {
3236
+ "color": "muted",
3237
+ "content": [
3238
+ "str/concat",
3239
+ "@config.quantityLabel",
3240
+ [
3241
+ "str/concat",
3242
+ " ",
3243
+ [
3244
+ "str/concat",
3245
+ [
3246
+ "str/concat",
3247
+ "",
3248
+ [
3249
+ "math/round",
3250
+ "@entity.dose",
3251
+ 2.0
3252
+ ]
3253
+ ],
3254
+ [
3255
+ "str/concat",
3256
+ " of ",
3257
+ [
3258
+ "str/concat",
3259
+ [
3260
+ "str/concat",
3261
+ "",
3262
+ "@config.capacity"
3263
+ ],
3264
+ [
3265
+ "if",
3266
+ [
3267
+ "==",
3268
+ "@config.unit",
3269
+ ""
3270
+ ],
3271
+ "",
3272
+ [
3273
+ "str/concat",
3274
+ " ",
3275
+ "@config.unit"
3276
+ ]
3277
+ ]
3278
+ ]
3279
+ ]
3280
+ ]
3281
+ ]
3282
+ ],
3283
+ "type": "typography",
3284
+ "variant": "caption"
3285
+ }
3286
+ ],
3287
+ "direction": "horizontal",
3288
+ "gap": "sm",
3289
+ "type": "stack",
3290
+ "wrap": true
3291
+ }
3292
+ ],
3293
+ "direction": "vertical",
3294
+ "gap": "md",
3295
+ "type": "stack"
3296
+ }
3297
+ ],
3298
+ "padding": "md",
3299
+ "type": "box"
3300
+ }
3301
+ ]
3302
+ ],
3303
+ [
3304
+ "emit",
3305
+ "DOSER_UPDATED",
3306
+ {
3307
+ "bandLabel": "@entity.bandLabel",
3308
+ "done": "@entity.done",
3309
+ "dose": "@entity.dose",
3310
+ "running": "@entity.running"
3311
+ }
3312
+ ]
3313
+ ],
3314
+ "event": "ROSTER_LOADED",
3315
+ "eventId": "evt_01M459WM1T8AZZEB24MTT1XDT1",
3316
+ "from": "idle",
3317
+ "guard": [
3318
+ "and",
3319
+ [
3320
+ "==",
3321
+ "@config.rosterSource",
3322
+ "event"
3323
+ ],
3324
+ [
3325
+ "and",
3326
+ [
3327
+ "==",
3328
+ "@payload.mode",
3329
+ "@config.matchMode"
3330
+ ],
3331
+ [
3332
+ ">",
3333
+ [
3334
+ "array/len",
3335
+ "@payload.bands"
3336
+ ],
3337
+ 0.0
3338
+ ]
3339
+ ]
3340
+ ],
3341
+ "to": "idle"
3342
+ },
3343
+ {
3344
+ "effects": [
3345
+ [
3346
+ "set",
3347
+ "@entity.active",
3348
+ false
3349
+ ],
3350
+ [
3351
+ "set",
3352
+ "@entity.running",
3353
+ false
3354
+ ],
3355
+ [
3356
+ "render-ui",
3357
+ "main",
3358
+ null
3359
+ ]
3360
+ ],
3361
+ "event": "ROSTER_LOADED",
3362
+ "eventId": "evt_01M459WM1T8AZZEB24MTT1XDT1",
3363
+ "from": "idle",
3364
+ "guard": [
3365
+ "and",
3366
+ [
3367
+ "==",
3368
+ "@config.rosterSource",
3369
+ "event"
3370
+ ],
3371
+ [
3372
+ "not",
3373
+ [
3374
+ "==",
3375
+ "@payload.mode",
3376
+ "@config.matchMode"
3377
+ ]
3378
+ ]
2413
3379
  ],
2414
3380
  "to": "idle"
2415
3381
  },
@@ -2435,7 +3401,7 @@
2435
3401
  "matched",
2436
3402
  [
2437
3403
  "array/filter",
2438
- "@config.bands",
3404
+ "@entity.bands",
2439
3405
  [
2440
3406
  "fn",
2441
3407
  "b",
@@ -2469,12 +3435,12 @@
2469
3435
  ],
2470
3436
  [
2471
3437
  "array/nth",
2472
- "@config.bands",
3438
+ "@entity.bands",
2473
3439
  [
2474
3440
  "-",
2475
3441
  [
2476
3442
  "array/len",
2477
- "@config.bands"
3443
+ "@entity.bands"
2478
3444
  ],
2479
3445
  1.0
2480
3446
  ]
@@ -3245,7 +4211,7 @@
3245
4211
  "matched",
3246
4212
  [
3247
4213
  "array/filter",
3248
- "@config.bands",
4214
+ "@entity.bands",
3249
4215
  [
3250
4216
  "fn",
3251
4217
  "b",
@@ -3279,12 +4245,12 @@
3279
4245
  ],
3280
4246
  [
3281
4247
  "array/nth",
3282
- "@config.bands",
4248
+ "@entity.bands",
3283
4249
  [
3284
4250
  "-",
3285
4251
  [
3286
4252
  "array/len",
3287
- "@config.bands"
4253
+ "@entity.bands"
3288
4254
  ],
3289
4255
  1.0
3290
4256
  ]
@@ -4601,7 +5567,7 @@
4601
5567
  "matched",
4602
5568
  [
4603
5569
  "array/filter",
4604
- "@config.bands",
5570
+ "@entity.bands",
4605
5571
  [
4606
5572
  "fn",
4607
5573
  "b",
@@ -4635,12 +5601,12 @@
4635
5601
  ],
4636
5602
  [
4637
5603
  "array/nth",
4638
- "@config.bands",
5604
+ "@entity.bands",
4639
5605
  [
4640
5606
  "-",
4641
5607
  [
4642
5608
  "array/len",
4643
- "@config.bands"
5609
+ "@entity.bands"
4644
5610
  ],
4645
5611
  1.0
4646
5612
  ]