@almadar/std 16.183.0 → 16.184.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 (44) hide show
  1. package/behaviors/lolo/ui/core/.hand-authored.json +4 -0
  2. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +11 -0
  3. package/behaviors/lolo/ui/core/atoms/std-related.lolo +86 -9
  4. package/behaviors/lolo/ui/core/atoms/std-rich-editor.lolo +115 -1
  5. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +62 -2
  6. package/behaviors/lolo/ui/core/atoms/std-thread.lolo +43 -2
  7. package/behaviors/lolo/ui/core/atoms/std-tree.lolo +247 -0
  8. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +110 -2
  9. package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +18 -2
  10. package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +6 -2
  11. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +2 -2
  12. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +2 -2
  13. package/behaviors/lolo/ui/game/atoms/std-tutorial-autodemo.lolo +136 -0
  14. package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +41 -8
  15. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +3 -3
  16. package/behaviors/registry/ui/core/atoms/std-browse.orb +17 -0
  17. package/behaviors/registry/ui/core/atoms/std-related.orb +256 -3
  18. package/behaviors/registry/ui/core/atoms/std-rich-editor.orb +407 -1
  19. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +240 -8
  20. package/behaviors/registry/ui/core/atoms/std-thread.orb +254 -4
  21. package/behaviors/registry/ui/core/atoms/std-tree.orb +656 -0
  22. package/behaviors/registry/ui/core/atoms/std-version-history.orb +479 -6
  23. package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +43 -19
  24. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +28 -3
  25. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +8 -2
  26. package/behaviors/registry/ui/core/organisms/ui-form.orb +8 -2
  27. package/behaviors/registry/ui/game/atoms/std-tutorial-autodemo.orb +732 -0
  28. package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +305 -153
  29. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +26 -0
  30. package/dist/behaviors/exports-reader.js +4320 -2060
  31. package/dist/behaviors/functions/index.d.ts +259 -44
  32. package/dist/behaviors/functions/index.js +4306 -2058
  33. package/dist/behaviors/index.d.ts +1 -1
  34. package/dist/behaviors/index.js +4321 -2061
  35. package/dist/behaviors/query.js +4320 -2060
  36. package/dist/behaviors-embeddings.hash.json +3 -3
  37. package/dist/behaviors-embeddings.json +274 -266
  38. package/dist/behaviors-registry.json +820 -33
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +4321 -2061
  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 +2 -2
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Tutorial modal with media steps for game boards and learning shells: a paged overlay — title, an animated GIF/clip showing exactly how the mechanic is done, one line of body copy, a step counter, and Back / Next / Skip — composed entirely from registered render types (stack + text + image + button) into the overlay slot, so no new UI component is needed. autoShow opens it on INIT for first-time players; a board's help button re-opens it any time via SHOW (which rewinds to step one). DISMISS (or finishing the last step) marks the run done, clears the overlay, and emits TUTORIAL_DONE so the board can unpause or log. Steps are pure config — a board teaches a new mechanic by adding one { id, title, body, media } row.",
2
+ "description": "Tutorial modal with live-demo steps for game boards and learning shells: a paged overlay — title, a live previewTrait frame playing the mechanic via std-tutorial-autodemo (a bare game canvas, no shell chrome), one line of body copy, a step counter, and Back / Next / Skip — composed entirely from registered render types (stack + text + button + trait frame) into the overlay slot, so no new UI component is needed. autoShow opens it on INIT for first-time players; a board's help button re-opens it any time via SHOW (which rewinds to step one). DISMISS (or finishing the last step) marks the run done, clears the overlay, and emits TUTORIAL_DONE so the board can unpause or log. Steps are pure config — a board teaches a new mechanic by adding one { id, title, body, demoId } row plus a previewTrait binding.",
3
3
  "ledger": {
4
4
  "entries": {
5
5
  "ent_01M0PEDYHYWBHKSA6ZVNM086R4": {
@@ -73,6 +73,33 @@
73
73
  "parent": "trt_01M0PEDYHY2HA8AFMMAD5883VT",
74
74
  "renames": []
75
75
  },
76
+ "evt_01M0S0M8T1MCJ051JCTX2K24E1": {
77
+ "bakedName": "TUTORIAL_DEMO_STOP",
78
+ "curName": "TUTORIAL_DEMO_STOP",
79
+ "id": "evt_01M0S0M8T1MCJ051JCTX2K24E1",
80
+ "kind": "event",
81
+ "owner": "workspace",
82
+ "parent": "trt_01M0PEDYHY2HA8AFMMAD5883VT",
83
+ "renames": []
84
+ },
85
+ "evt_01M0S0M8T1W8J768EA9RE2QKYV": {
86
+ "bakedName": "TUTORIAL_DEMO_START",
87
+ "curName": "TUTORIAL_DEMO_START",
88
+ "id": "evt_01M0S0M8T1W8J768EA9RE2QKYV",
89
+ "kind": "event",
90
+ "owner": "workspace",
91
+ "parent": "trt_01M0PEDYHY2HA8AFMMAD5883VT",
92
+ "renames": []
93
+ },
94
+ "evt_01M0S4ZSRVVV6WKG0VWGTMRV88": {
95
+ "bakedName": "INIT",
96
+ "curName": "INIT",
97
+ "id": "evt_01M0S4ZSRVVV6WKG0VWGTMRV88",
98
+ "kind": "event",
99
+ "owner": "workspace",
100
+ "parent": "trt_01M0S4ZSRVQBN2JT81Y534547C",
101
+ "renames": []
102
+ },
76
103
  "orb_01M0PEDYHYEZSSAA4NT93JBSNS": {
77
104
  "bakedName": "TutorialOverlayOrbital",
78
105
  "curName": "TutorialOverlayOrbital",
@@ -96,6 +123,14 @@
96
123
  "kind": "trait",
97
124
  "owner": "workspace",
98
125
  "renames": []
126
+ },
127
+ "trt_01M0S4ZSRVQBN2JT81Y534547C": {
128
+ "bakedName": "TutorialEmptyPreview",
129
+ "curName": "TutorialEmptyPreview",
130
+ "id": "trt_01M0S4ZSRVQBN2JT81Y534547C",
131
+ "kind": "trait",
132
+ "owner": "workspace",
133
+ "renames": []
99
134
  }
100
135
  },
101
136
  "schemaVersion": 1
@@ -142,6 +177,47 @@
142
177
  }
143
178
  ],
144
179
  "traits": [
180
+ {
181
+ "category": "interaction",
182
+ "entityRefIds": {
183
+ "TutorialState": "ent_01M0PEDYHYWBHKSA6ZVNM086R4"
184
+ },
185
+ "id": "trt_01M0S4ZSRVQBN2JT81Y534547C",
186
+ "linkedEntity": "TutorialState",
187
+ "linkedEntityId": "ent_01M0PEDYHYWBHKSA6ZVNM086R4",
188
+ "name": "TutorialEmptyPreview",
189
+ "scope": "instance",
190
+ "stateMachine": {
191
+ "events": [
192
+ {
193
+ "id": "evt_01M0S4ZSRVVV6WKG0VWGTMRV88",
194
+ "key": "INIT",
195
+ "name": "Initialize"
196
+ }
197
+ ],
198
+ "states": [
199
+ {
200
+ "isInitial": true,
201
+ "name": "idle"
202
+ }
203
+ ],
204
+ "transitions": [
205
+ {
206
+ "effects": [
207
+ [
208
+ "render-ui",
209
+ "overlay",
210
+ null
211
+ ]
212
+ ],
213
+ "event": "INIT",
214
+ "eventId": "evt_01M0S4ZSRVVV6WKG0VWGTMRV88",
215
+ "from": "idle",
216
+ "to": "idle"
217
+ }
218
+ ]
219
+ }
220
+ },
145
221
  {
146
222
  "category": "interaction",
147
223
  "config": {
@@ -152,9 +228,17 @@
152
228
  "tier": "domain",
153
229
  "type": "boolean"
154
230
  },
231
+ "previewTrait": {
232
+ "default": "@trait.TutorialEmptyPreview",
233
+ "description": "Trait rendered in the media position of the modal — the live, demo-driven preview of the mechanic (a bare game canvas, no shell chrome). '@trait.TutorialEmptyPreview' leaves the slot blank. Override with '@trait.<TraitName>' to show a board's live frame.",
234
+ "label": "Preview trait",
235
+ "refId": "trt_01M0S4ZSRVQBN2JT81Y534547C",
236
+ "tier": "presentation",
237
+ "type": "trait"
238
+ },
155
239
  "steps": {
156
240
  "default": [],
157
- "description": "One row per tutorial page: title, one line of body copy, and media — the URL of an animated GIF/clip showing exactly how the mechanic is performed (recorded from real gameplay).",
241
+ "description": "One row per tutorial page: title, one line of body copy, and an optional demoId that plays a scripted live demo (std-tutorial-autodemo) for the mechanic being taught.",
158
242
  "items": {
159
243
  "properties": {
160
244
  "body": {
@@ -162,19 +246,14 @@
162
246
  "required": false,
163
247
  "type": "string"
164
248
  },
165
- "id": {
166
- "name": "id",
167
- "required": true,
168
- "type": "string"
169
- },
170
- "media": {
171
- "name": "media",
249
+ "demoId": {
250
+ "name": "demoId",
172
251
  "required": false,
173
252
  "type": "string"
174
253
  },
175
- "mediaAlt": {
176
- "name": "mediaAlt",
177
- "required": false,
254
+ "id": {
255
+ "name": "id",
256
+ "required": true,
178
257
  "type": "string"
179
258
  },
180
259
  "title": {
@@ -269,6 +348,27 @@
269
348
  ],
270
349
  "scope": "external",
271
350
  "tier": "domain"
351
+ },
352
+ {
353
+ "description": "Emitted when a tutorial step carrying a demoId is shown; the composed std-tutorial-autodemo atom plays that scripted demo.",
354
+ "event": "TUTORIAL_DEMO_START",
355
+ "eventId": "evt_01M0S0M8T1W8J768EA9RE2QKYV",
356
+ "payloadSchema": [
357
+ {
358
+ "name": "demoId",
359
+ "required": true,
360
+ "type": "string"
361
+ }
362
+ ],
363
+ "scope": "external",
364
+ "tier": "domain"
365
+ },
366
+ {
367
+ "description": "Emitted when the tutorial leaves a demo step (next/back) or is dismissed/finished; the autodemo atom stops and releases control.",
368
+ "event": "TUTORIAL_DEMO_STOP",
369
+ "eventId": "evt_01M0S0M8T1MCJ051JCTX2K24E1",
370
+ "scope": "external",
371
+ "tier": "domain"
272
372
  }
273
373
  ],
274
374
  "entityContract": {
@@ -372,6 +472,27 @@
372
472
  }
373
473
  ],
374
474
  "tier": "domain"
475
+ },
476
+ {
477
+ "description": "Emitted when a tutorial step carrying a demoId is shown; the composed std-tutorial-autodemo atom plays that scripted demo.",
478
+ "id": "evt_01M0S0M8T1W8J768EA9RE2QKYV",
479
+ "key": "TUTORIAL_DEMO_START",
480
+ "name": "Tutorial Demo Start",
481
+ "payloadSchema": [
482
+ {
483
+ "name": "demoId",
484
+ "required": true,
485
+ "type": "string"
486
+ }
487
+ ],
488
+ "tier": "domain"
489
+ },
490
+ {
491
+ "description": "Emitted when the tutorial leaves a demo step (next/back) or is dismissed/finished; the autodemo atom stops and releases control.",
492
+ "id": "evt_01M0S0M8T1MCJ051JCTX2K24E1",
493
+ "key": "TUTORIAL_DEMO_STOP",
494
+ "name": "Tutorial Demo Stop",
495
+ "tier": "domain"
375
496
  }
376
497
  ],
377
498
  "states": [
@@ -434,41 +555,7 @@
434
555
  "variant": "h4",
435
556
  "weight": "bold"
436
557
  },
437
- {
438
- "alt": [
439
- "object/get",
440
- [
441
- "array/nth",
442
- "@config.steps",
443
- 0.0
444
- ],
445
- "mediaAlt"
446
- ],
447
- "asset": {
448
- "category": "tutorial",
449
- "name": [
450
- "object/get",
451
- [
452
- "array/nth",
453
- "@config.steps",
454
- 0.0
455
- ],
456
- "id"
457
- ],
458
- "url": [
459
- "object/get",
460
- [
461
- "array/nth",
462
- "@config.steps",
463
- 0.0
464
- ],
465
- "media"
466
- ]
467
- },
468
- "className": "rounded-md",
469
- "fit": "contain",
470
- "type": "atlas-image"
471
- },
558
+ "@config.previewTrait",
472
559
  {
473
560
  "content": [
474
561
  "object/get",
@@ -532,6 +619,42 @@
532
619
  "direction": "vertical",
533
620
  "type": "stack"
534
621
  }
622
+ ],
623
+ [
624
+ "when",
625
+ [
626
+ "!=",
627
+ [
628
+ "object/get",
629
+ [
630
+ "array/nth",
631
+ "@config.steps",
632
+ 0.0
633
+ ],
634
+ "demoId",
635
+ ""
636
+ ],
637
+ ""
638
+ ],
639
+ [
640
+ "do",
641
+ [
642
+ "emit",
643
+ "TUTORIAL_DEMO_START",
644
+ {
645
+ "demoId": [
646
+ "object/get",
647
+ [
648
+ "array/nth",
649
+ "@config.steps",
650
+ 0.0
651
+ ],
652
+ "demoId",
653
+ ""
654
+ ]
655
+ }
656
+ ]
657
+ ]
535
658
  ]
536
659
  ],
537
660
  "event": "TUT_AUTO",
@@ -565,41 +688,7 @@
565
688
  "variant": "h4",
566
689
  "weight": "bold"
567
690
  },
568
- {
569
- "alt": [
570
- "object/get",
571
- [
572
- "array/nth",
573
- "@config.steps",
574
- 0.0
575
- ],
576
- "mediaAlt"
577
- ],
578
- "asset": {
579
- "category": "tutorial",
580
- "name": [
581
- "object/get",
582
- [
583
- "array/nth",
584
- "@config.steps",
585
- 0.0
586
- ],
587
- "id"
588
- ],
589
- "url": [
590
- "object/get",
591
- [
592
- "array/nth",
593
- "@config.steps",
594
- 0.0
595
- ],
596
- "media"
597
- ]
598
- },
599
- "className": "rounded-md",
600
- "fit": "contain",
601
- "type": "atlas-image"
602
- },
691
+ "@config.previewTrait",
603
692
  {
604
693
  "content": [
605
694
  "object/get",
@@ -663,6 +752,42 @@
663
752
  "direction": "vertical",
664
753
  "type": "stack"
665
754
  }
755
+ ],
756
+ [
757
+ "when",
758
+ [
759
+ "!=",
760
+ [
761
+ "object/get",
762
+ [
763
+ "array/nth",
764
+ "@config.steps",
765
+ 0.0
766
+ ],
767
+ "demoId",
768
+ ""
769
+ ],
770
+ ""
771
+ ],
772
+ [
773
+ "do",
774
+ [
775
+ "emit",
776
+ "TUTORIAL_DEMO_START",
777
+ {
778
+ "demoId": [
779
+ "object/get",
780
+ [
781
+ "array/nth",
782
+ "@config.steps",
783
+ 0.0
784
+ ],
785
+ "demoId",
786
+ ""
787
+ ]
788
+ }
789
+ ]
790
+ ]
666
791
  ]
667
792
  ],
668
793
  "event": "SHOW",
@@ -700,41 +825,7 @@
700
825
  "variant": "h4",
701
826
  "weight": "bold"
702
827
  },
703
- {
704
- "alt": [
705
- "object/get",
706
- [
707
- "array/nth",
708
- "@config.steps",
709
- "@entity.step"
710
- ],
711
- "mediaAlt"
712
- ],
713
- "asset": {
714
- "category": "tutorial",
715
- "name": [
716
- "object/get",
717
- [
718
- "array/nth",
719
- "@config.steps",
720
- "@entity.step"
721
- ],
722
- "id"
723
- ],
724
- "url": [
725
- "object/get",
726
- [
727
- "array/nth",
728
- "@config.steps",
729
- "@entity.step"
730
- ],
731
- "media"
732
- ]
733
- },
734
- "className": "rounded-md",
735
- "fit": "contain",
736
- "type": "atlas-image"
737
- },
828
+ "@config.previewTrait",
738
829
  {
739
830
  "content": [
740
831
  "object/get",
@@ -813,6 +904,47 @@
813
904
  "direction": "vertical",
814
905
  "type": "stack"
815
906
  }
907
+ ],
908
+ [
909
+ "emit",
910
+ "TUTORIAL_DEMO_STOP",
911
+ {}
912
+ ],
913
+ [
914
+ "when",
915
+ [
916
+ "!=",
917
+ [
918
+ "object/get",
919
+ [
920
+ "array/nth",
921
+ "@config.steps",
922
+ "@entity.step"
923
+ ],
924
+ "demoId",
925
+ ""
926
+ ],
927
+ ""
928
+ ],
929
+ [
930
+ "do",
931
+ [
932
+ "emit",
933
+ "TUTORIAL_DEMO_START",
934
+ {
935
+ "demoId": [
936
+ "object/get",
937
+ [
938
+ "array/nth",
939
+ "@config.steps",
940
+ "@entity.step"
941
+ ],
942
+ "demoId",
943
+ ""
944
+ ]
945
+ }
946
+ ]
947
+ ]
816
948
  ]
817
949
  ],
818
950
  "event": "TUT_NEXT",
@@ -844,6 +976,11 @@
844
976
  "overlay",
845
977
  null
846
978
  ],
979
+ [
980
+ "emit",
981
+ "TUTORIAL_DEMO_STOP",
982
+ {}
983
+ ],
847
984
  [
848
985
  "emit",
849
986
  "TUTORIAL_DONE",
@@ -899,41 +1036,7 @@
899
1036
  "variant": "h4",
900
1037
  "weight": "bold"
901
1038
  },
902
- {
903
- "alt": [
904
- "object/get",
905
- [
906
- "array/nth",
907
- "@config.steps",
908
- "@entity.step"
909
- ],
910
- "mediaAlt"
911
- ],
912
- "asset": {
913
- "category": "tutorial",
914
- "name": [
915
- "object/get",
916
- [
917
- "array/nth",
918
- "@config.steps",
919
- "@entity.step"
920
- ],
921
- "id"
922
- ],
923
- "url": [
924
- "object/get",
925
- [
926
- "array/nth",
927
- "@config.steps",
928
- "@entity.step"
929
- ],
930
- "media"
931
- ]
932
- },
933
- "className": "rounded-md",
934
- "fit": "contain",
935
- "type": "atlas-image"
936
- },
1039
+ "@config.previewTrait",
937
1040
  {
938
1041
  "content": [
939
1042
  "object/get",
@@ -1012,6 +1115,47 @@
1012
1115
  "direction": "vertical",
1013
1116
  "type": "stack"
1014
1117
  }
1118
+ ],
1119
+ [
1120
+ "emit",
1121
+ "TUTORIAL_DEMO_STOP",
1122
+ {}
1123
+ ],
1124
+ [
1125
+ "when",
1126
+ [
1127
+ "!=",
1128
+ [
1129
+ "object/get",
1130
+ [
1131
+ "array/nth",
1132
+ "@config.steps",
1133
+ "@entity.step"
1134
+ ],
1135
+ "demoId",
1136
+ ""
1137
+ ],
1138
+ ""
1139
+ ],
1140
+ [
1141
+ "do",
1142
+ [
1143
+ "emit",
1144
+ "TUTORIAL_DEMO_START",
1145
+ {
1146
+ "demoId": [
1147
+ "object/get",
1148
+ [
1149
+ "array/nth",
1150
+ "@config.steps",
1151
+ "@entity.step"
1152
+ ],
1153
+ "demoId",
1154
+ ""
1155
+ ]
1156
+ }
1157
+ ]
1158
+ ]
1015
1159
  ]
1016
1160
  ],
1017
1161
  "event": "TUT_BACK",
@@ -1036,6 +1180,11 @@
1036
1180
  "overlay",
1037
1181
  null
1038
1182
  ],
1183
+ [
1184
+ "emit",
1185
+ "TUTORIAL_DEMO_STOP",
1186
+ {}
1187
+ ],
1039
1188
  [
1040
1189
  "emit",
1041
1190
  "TUTORIAL_DONE",
@@ -1050,6 +1199,9 @@
1050
1199
  "to": "hidden"
1051
1200
  }
1052
1201
  ]
1202
+ },
1203
+ "traitEmbedIds": {
1204
+ "TutorialEmptyPreview": "trt_01M0S4ZSRVQBN2JT81Y534547C"
1053
1205
  }
1054
1206
  }
1055
1207
  ]
@@ -1057,4 +1209,4 @@
1057
1209
  ],
1058
1210
  "schemaVersion": 1,
1059
1211
  "version": "1.0.0"
1060
- }
1212
+ }
@@ -152,6 +152,19 @@
152
152
  "tier": "presentation",
153
153
  "type": "boolean"
154
154
  },
155
+ "axisColor": {
156
+ "default": "var(--color-muted-foreground, #374151)",
157
+ "description": "Axis line color; resolves theme tokens (default `var(--color-muted-foreground, #374151)`).",
158
+ "label": "Axis Color",
159
+ "tier": "presentation",
160
+ "type": "string"
161
+ },
162
+ "backgroundColor": {
163
+ "description": "Canvas fill color; `var(--token, fallback)` strings resolve against the active theme. Default transparent.",
164
+ "label": "Background Color",
165
+ "tier": "presentation",
166
+ "type": "string"
167
+ },
155
168
  "bars": {
156
169
  "default": [],
157
170
  "description": "Riemann/histogram bar strips.",
@@ -279,6 +292,13 @@
279
292
  "tier": "presentation",
280
293
  "type": "MathCanvasError"
281
294
  },
295
+ "gridColor": {
296
+ "default": "var(--color-border, #9ca3af)",
297
+ "description": "Grid line color; resolves theme tokens (default `var(--color-border, #9ca3af)`).",
298
+ "label": "Grid Color",
299
+ "tier": "presentation",
300
+ "type": "string"
301
+ },
282
302
  "gridStep": {
283
303
  "default": 1.0,
284
304
  "description": "gridStep prop",
@@ -1593,10 +1613,13 @@
1593
1613
  {
1594
1614
  "angles": "@config.angles",
1595
1615
  "animate": "@config.animate",
1616
+ "axisColor": "@config.axisColor",
1617
+ "backgroundColor": "@config.backgroundColor",
1596
1618
  "bars": "@config.bars",
1597
1619
  "className": "@config.className",
1598
1620
  "curves": "@config.curves",
1599
1621
  "error": "@config.error",
1622
+ "gridColor": "@config.gridColor",
1600
1623
  "gridStep": "@config.gridStep",
1601
1624
  "guides": "@config.guides",
1602
1625
  "height": "@config.height",
@@ -1639,10 +1662,13 @@
1639
1662
  {
1640
1663
  "angles": "@payload.angles",
1641
1664
  "animate": "@config.animate",
1665
+ "axisColor": "@config.axisColor",
1666
+ "backgroundColor": "@config.backgroundColor",
1642
1667
  "bars": "@payload.bars",
1643
1668
  "className": "@config.className",
1644
1669
  "curves": "@payload.curves",
1645
1670
  "error": "@config.error",
1671
+ "gridColor": "@config.gridColor",
1646
1672
  "gridStep": "@config.gridStep",
1647
1673
  "guides": "@payload.guides",
1648
1674
  "height": "@config.height",