@almadar/std 3.4.2 → 3.4.4

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 (40) hide show
  1. package/behaviors/exports/atoms/std-autoregressive.orb +419 -0
  2. package/behaviors/exports/atoms/std-browse.orb +72 -0
  3. package/behaviors/exports/atoms/std-circuit-breaker.orb +12 -0
  4. package/behaviors/exports/atoms/std-combat-log.orb +112 -0
  5. package/behaviors/exports/atoms/std-game-audio.orb +232 -6
  6. package/behaviors/exports/atoms/std-game-canvas3d.orb +172 -15
  7. package/behaviors/exports/atoms/std-sprite.orb +165 -17
  8. package/behaviors/exports/organisms/std-api-gateway.orb +12 -0
  9. package/behaviors/exports/organisms/std-devops-dashboard.orb +12 -0
  10. package/behaviors/exports/organisms/std-iot-dashboard.orb +12 -0
  11. package/behaviors/exports/validation-report.json +2 -2
  12. package/dist/behaviors/exports/atoms/std-autoregressive.orb +419 -0
  13. package/dist/behaviors/exports/atoms/std-browse.orb +72 -0
  14. package/dist/behaviors/exports/atoms/std-circuit-breaker.orb +12 -0
  15. package/dist/behaviors/exports/atoms/std-combat-log.orb +112 -0
  16. package/dist/behaviors/exports/atoms/std-game-audio.orb +232 -6
  17. package/dist/behaviors/exports/atoms/std-game-canvas3d.orb +172 -15
  18. package/dist/behaviors/exports/atoms/std-sprite.orb +165 -17
  19. package/dist/behaviors/exports/organisms/std-api-gateway.orb +12 -0
  20. package/dist/behaviors/exports/organisms/std-devops-dashboard.orb +12 -0
  21. package/dist/behaviors/exports/organisms/std-iot-dashboard.orb +12 -0
  22. package/dist/behaviors/exports/validation-report.json +2 -2
  23. package/dist/behaviors/functions/index.js +179 -19
  24. package/dist/behaviors/functions/index.js.map +1 -1
  25. package/dist/behaviors/index.js +179 -19
  26. package/dist/behaviors/index.js.map +1 -1
  27. package/dist/exports/atoms/std-autoregressive.orb +419 -0
  28. package/dist/exports/atoms/std-browse.orb +72 -0
  29. package/dist/exports/atoms/std-circuit-breaker.orb +12 -0
  30. package/dist/exports/atoms/std-combat-log.orb +112 -0
  31. package/dist/exports/atoms/std-game-audio.orb +232 -6
  32. package/dist/exports/atoms/std-game-canvas3d.orb +172 -15
  33. package/dist/exports/atoms/std-sprite.orb +165 -17
  34. package/dist/exports/organisms/std-api-gateway.orb +12 -0
  35. package/dist/exports/organisms/std-devops-dashboard.orb +12 -0
  36. package/dist/exports/organisms/std-iot-dashboard.orb +12 -0
  37. package/dist/exports/validation-report.json +2 -2
  38. package/dist/index.js +179 -19
  39. package/dist/index.js.map +1 -1
  40. package/package.json +1 -1
@@ -51,7 +51,7 @@
51
51
  {
52
52
  "name": "spritesheet",
53
53
  "type": "string",
54
- "default": ""
54
+ "default": "https://almadar-kflow-assets.web.app/shared/sprite-sheets/amir-sprite-sheet-se.png"
55
55
  }
56
56
  ]
57
57
  },
@@ -102,14 +102,88 @@
102
102
  "render-ui",
103
103
  "main",
104
104
  {
105
- "type": "sprite",
106
- "spritesheet": "@SpriteEntity.spritesheet",
107
- "frameWidth": 64,
108
- "frameHeight": 64,
109
- "frame": "@SpriteEntity.frame",
110
- "x": "@SpriteEntity.x",
111
- "y": "@SpriteEntity.y",
112
- "scale": 1
105
+ "type": "stack",
106
+ "direction": "vertical",
107
+ "gap": "md",
108
+ "children": [
109
+ {
110
+ "type": "stack",
111
+ "direction": "horizontal",
112
+ "gap": "sm",
113
+ "align": "center",
114
+ "children": [
115
+ {
116
+ "type": "icon",
117
+ "name": "image",
118
+ "size": "lg"
119
+ },
120
+ {
121
+ "type": "typography",
122
+ "content": "SpriteEntity Sprite",
123
+ "variant": "h2"
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "type": "divider"
129
+ },
130
+ {
131
+ "type": "box",
132
+ "className": "relative bg-gray-900 rounded-lg overflow-hidden",
133
+ "style": {
134
+ "width": "256px",
135
+ "height": "256px",
136
+ "margin": "0 auto"
137
+ },
138
+ "children": [
139
+ {
140
+ "type": "sprite",
141
+ "spritesheet": "@SpriteEntity.spritesheet",
142
+ "frameWidth": 64,
143
+ "frameHeight": 64,
144
+ "frame": "@SpriteEntity.frame",
145
+ "x": 64,
146
+ "y": 64,
147
+ "scale": 1
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "type": "stack",
153
+ "direction": "horizontal",
154
+ "gap": "md",
155
+ "justify": "center",
156
+ "children": [
157
+ {
158
+ "type": "typography",
159
+ "content": "Frame: ",
160
+ "variant": "caption",
161
+ "color": "muted"
162
+ },
163
+ {
164
+ "type": "badge",
165
+ "content": "@SpriteEntity.frame",
166
+ "variant": "default"
167
+ },
168
+ {
169
+ "type": "typography",
170
+ "content": "Position: ",
171
+ "variant": "caption",
172
+ "color": "muted"
173
+ },
174
+ {
175
+ "type": "badge",
176
+ "content": [
177
+ "concat",
178
+ "@SpriteEntity.x",
179
+ ",",
180
+ "@SpriteEntity.y"
181
+ ],
182
+ "variant": "default"
183
+ }
184
+ ]
185
+ }
186
+ ]
113
187
  }
114
188
  ]
115
189
  ]
@@ -123,14 +197,88 @@
123
197
  "render-ui",
124
198
  "main",
125
199
  {
126
- "type": "sprite",
127
- "spritesheet": "@SpriteEntity.spritesheet",
128
- "frameWidth": 64,
129
- "frameHeight": 64,
130
- "frame": "@SpriteEntity.frame",
131
- "x": "@SpriteEntity.x",
132
- "y": "@SpriteEntity.y",
133
- "scale": 1
200
+ "type": "stack",
201
+ "direction": "vertical",
202
+ "gap": "md",
203
+ "children": [
204
+ {
205
+ "type": "stack",
206
+ "direction": "horizontal",
207
+ "gap": "sm",
208
+ "align": "center",
209
+ "children": [
210
+ {
211
+ "type": "icon",
212
+ "name": "image",
213
+ "size": "lg"
214
+ },
215
+ {
216
+ "type": "typography",
217
+ "content": "SpriteEntity Sprite",
218
+ "variant": "h2"
219
+ }
220
+ ]
221
+ },
222
+ {
223
+ "type": "divider"
224
+ },
225
+ {
226
+ "type": "box",
227
+ "className": "relative bg-gray-900 rounded-lg overflow-hidden",
228
+ "style": {
229
+ "width": "256px",
230
+ "height": "256px",
231
+ "margin": "0 auto"
232
+ },
233
+ "children": [
234
+ {
235
+ "type": "sprite",
236
+ "spritesheet": "@SpriteEntity.spritesheet",
237
+ "frameWidth": 64,
238
+ "frameHeight": 64,
239
+ "frame": "@SpriteEntity.frame",
240
+ "x": 64,
241
+ "y": 64,
242
+ "scale": 1
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ "type": "stack",
248
+ "direction": "horizontal",
249
+ "gap": "md",
250
+ "justify": "center",
251
+ "children": [
252
+ {
253
+ "type": "typography",
254
+ "content": "Frame: ",
255
+ "variant": "caption",
256
+ "color": "muted"
257
+ },
258
+ {
259
+ "type": "badge",
260
+ "content": "@SpriteEntity.frame",
261
+ "variant": "default"
262
+ },
263
+ {
264
+ "type": "typography",
265
+ "content": "Position: ",
266
+ "variant": "caption",
267
+ "color": "muted"
268
+ },
269
+ {
270
+ "type": "badge",
271
+ "content": [
272
+ "concat",
273
+ "@SpriteEntity.x",
274
+ ",",
275
+ "@SpriteEntity.y"
276
+ ],
277
+ "variant": "default"
278
+ }
279
+ ]
280
+ }
281
+ ]
134
282
  }
135
283
  ]
136
284
  ]
@@ -1425,6 +1425,18 @@
1425
1425
  "type": "number",
1426
1426
  "default": 5
1427
1427
  }
1428
+ ],
1429
+ "instances": [
1430
+ {
1431
+ "id": "sn-1",
1432
+ "name": "ServiceNode",
1433
+ "description": "Primary API gateway",
1434
+ "status": "active",
1435
+ "createdAt": "2026-01-10",
1436
+ "failureCount": 783,
1437
+ "successCount": 603,
1438
+ "threshold": 5
1439
+ }
1428
1440
  ]
1429
1441
  },
1430
1442
  "traits": [
@@ -51,6 +51,18 @@
51
51
  "type": "number",
52
52
  "default": 5
53
53
  }
54
+ ],
55
+ "instances": [
56
+ {
57
+ "id": "sn-1",
58
+ "name": "ServiceNode",
59
+ "description": "Primary API gateway",
60
+ "status": "active",
61
+ "createdAt": "2026-01-10",
62
+ "failureCount": 783,
63
+ "successCount": 603,
64
+ "threshold": 5
65
+ }
54
66
  ]
55
67
  },
56
68
  "traits": [
@@ -3098,6 +3098,18 @@
3098
3098
  "type": "number",
3099
3099
  "default": 5
3100
3100
  }
3101
+ ],
3102
+ "instances": [
3103
+ {
3104
+ "id": "sn-1",
3105
+ "name": "ServiceNode",
3106
+ "description": "Primary API gateway",
3107
+ "status": "active",
3108
+ "createdAt": "2026-01-10",
3109
+ "failureCount": 783,
3110
+ "successCount": 603,
3111
+ "threshold": 5
3112
+ }
3101
3113
  ]
3102
3114
  },
3103
3115
  "traits": [
@@ -1,11 +1,11 @@
1
1
  [
2
2
  {
3
- "name": "std-selection",
3
+ "name": "std-combat-log",
4
4
  "errors": 0,
5
5
  "warnings": 0,
6
6
  "output": [
7
7
  "Loaded 22 services from packages/almadar-patterns/src/services-registry.json",
8
- "Validating schema: /home/osamah/kflow.ai.builder/packages/almadar-std/behaviors/exports/atoms/std-selection.orb"
8
+ "Validating schema: /home/osamah/kflow.ai.builder/packages/almadar-std/behaviors/exports/atoms/std-combat-log.orb"
9
9
  ]
10
10
  }
11
11
  ]
@@ -59,7 +59,19 @@ function buildDisplayPattern(c, entityName, emptyTitle, emptyDescription, defaul
59
59
  return { ...base, ...c.displayProps };
60
60
  }
61
61
  function buildEntity(c) {
62
- return makeEntity({ name: c.entityName, fields: c.fields, persistence: c.persistence, collection: c.collection });
62
+ const instances = [
63
+ { id: "bi-1", name: "Terry Schultz", description: "Senior product designer with 8 years of experience", status: "active", createdAt: "2026-01-15" },
64
+ { id: "bi-2", name: "Dale Franey", description: "Full-stack developer specializing in React and Node.js", status: "active", createdAt: "2026-01-18" },
65
+ { id: "bi-3", name: "Lorena Mayer", description: "Data analyst focused on business intelligence", status: "pending", createdAt: "2026-01-20" },
66
+ { id: "bi-4", name: "Andrea Paucek", description: "Project manager with PMP certification", status: "active", createdAt: "2026-02-01" },
67
+ { id: "bi-5", name: "Geneva Durgan", description: "UX researcher conducting user interviews", status: "inactive", createdAt: "2026-02-05" },
68
+ { id: "bi-6", name: "Samantha Okuneva", description: "DevOps engineer managing cloud infrastructure", status: "active", createdAt: "2026-02-10" },
69
+ { id: "bi-7", name: "Nelson Halby", description: "Technical writer documenting APIs", status: "active", createdAt: "2026-02-15" },
70
+ { id: "bi-8", name: "Tanya Hand", description: "QA lead overseeing test automation", status: "pending", createdAt: "2026-02-20" },
71
+ { id: "bi-9", name: "Rosemary Lind", description: "Marketing analyst tracking campaign performance", status: "active", createdAt: "2026-03-01" },
72
+ { id: "bi-10", name: "Bernadette Anderson", description: "Security engineer conducting penetration tests", status: "active", createdAt: "2026-03-05" }
73
+ ];
74
+ return makeEntity({ name: c.entityName, fields: c.fields, persistence: c.persistence, collection: c.collection, instances });
63
75
  }
64
76
  function buildTrait(c) {
65
77
  const { entityName, listFields, headerIcon, pageTitle, emptyTitle, emptyDescription } = c;
@@ -4687,7 +4699,10 @@ function buildEntity23(c) {
4687
4699
  { name: "successCount", type: "number", default: 0 },
4688
4700
  { name: "threshold", type: "number", default: 5 }
4689
4701
  ];
4690
- return makeEntity({ name: c.entityName, fields, persistence: c.persistence, collection: c.collection });
4702
+ const instances = [
4703
+ { id: "sn-1", name: "ServiceNode", description: "Primary API gateway", status: "active", createdAt: "2026-01-10", failureCount: 783, successCount: 603, threshold: 5 }
4704
+ ];
4705
+ return makeEntity({ name: c.entityName, fields, persistence: c.persistence, collection: c.collection, instances });
4691
4706
  }
4692
4707
  var ef9 = (field) => ["object/get", ["array/first", "@entity"], field];
4693
4708
  function buildTrait24(c) {
@@ -7482,7 +7497,24 @@ function resolve43(params) {
7482
7497
  };
7483
7498
  }
7484
7499
  function buildEntity42(c) {
7485
- return makeEntity({ name: c.entityName, fields: c.fields, persistence: c.persistence });
7500
+ const fields = [
7501
+ ...c.fields.filter((f) => !["type", "message", "timestamp", "actorName", "targetName", "value", "turn"].includes(f.name)),
7502
+ { name: "type", type: "string", default: "attack", values: ["attack", "defend", "heal", "move", "special", "death", "spawn"] },
7503
+ { name: "message", type: "string" },
7504
+ { name: "timestamp", type: "number", default: 0 },
7505
+ { name: "actorName", type: "string" },
7506
+ { name: "targetName", type: "string" },
7507
+ { name: "value", type: "number", default: 0 },
7508
+ { name: "turn", type: "number", default: 1 }
7509
+ ];
7510
+ const instances = [
7511
+ { id: "cl-1", name: "Attack log", description: "Warrior attacks Goblin", status: "active", createdAt: "2026-01-01", type: "attack", message: "Warrior strikes Goblin for 25 damage", timestamp: 1e3, actorName: "Warrior", targetName: "Goblin", value: 25, turn: 1 },
7512
+ { id: "cl-2", name: "Defend log", description: "Paladin raises shield", status: "active", createdAt: "2026-01-01", type: "defend", message: "Paladin raises shield, blocking 15 damage", timestamp: 2e3, actorName: "Paladin", targetName: "Paladin", value: 15, turn: 1 },
7513
+ { id: "cl-3", name: "Heal log", description: "Cleric heals Warrior", status: "active", createdAt: "2026-01-01", type: "heal", message: "Cleric heals Warrior for 30 HP", timestamp: 3e3, actorName: "Cleric", targetName: "Warrior", value: 30, turn: 2 },
7514
+ { id: "cl-4", name: "Special log", description: "Mage casts fireball", status: "active", createdAt: "2026-01-01", type: "special", message: "Mage casts Fireball dealing 40 AoE damage", timestamp: 4e3, actorName: "Mage", targetName: "Goblin", value: 40, turn: 2 },
7515
+ { id: "cl-5", name: "Move log", description: "Rogue moves to flank", status: "active", createdAt: "2026-01-01", type: "move", message: "Rogue moves to flanking position", timestamp: 5e3, actorName: "Rogue", value: 0, turn: 3 }
7516
+ ];
7517
+ return makeEntity({ name: c.entityName, fields, persistence: c.persistence, instances });
7486
7518
  }
7487
7519
  function buildTrait43(c) {
7488
7520
  const { entityName, title, maxVisible, autoScroll, showTimestamps } = c;
@@ -7537,7 +7569,7 @@ function resolve44(params) {
7537
7569
  { name: "x", type: "number", default: 0 },
7538
7570
  { name: "y", type: "number", default: 0 },
7539
7571
  { name: "frame", type: "number", default: 0 },
7540
- { name: "spritesheet", type: "string", default: "" }
7572
+ { name: "spritesheet", type: "string", default: "https://almadar-kflow-assets.web.app/shared/sprite-sheets/amir-sprite-sheet-se.png" }
7541
7573
  ];
7542
7574
  const userFieldNames = new Set(baseFields.map((f) => f.name));
7543
7575
  const fields = [...baseFields, ...domainFields.filter((f) => !userFieldNames.has(f.name))];
@@ -7560,14 +7592,51 @@ function buildEntity43(c) {
7560
7592
  function buildTrait44(c) {
7561
7593
  const { entityName, frameWidth, frameHeight, scale } = c;
7562
7594
  const spriteView = {
7563
- type: "sprite",
7564
- spritesheet: `@${entityName}.spritesheet`,
7565
- frameWidth,
7566
- frameHeight,
7567
- frame: `@${entityName}.frame`,
7568
- x: `@${entityName}.x`,
7569
- y: `@${entityName}.y`,
7570
- scale
7595
+ type: "stack",
7596
+ direction: "vertical",
7597
+ gap: "md",
7598
+ children: [
7599
+ {
7600
+ type: "stack",
7601
+ direction: "horizontal",
7602
+ gap: "sm",
7603
+ align: "center",
7604
+ children: [
7605
+ { type: "icon", name: "image", size: "lg" },
7606
+ { type: "typography", content: `${entityName} Sprite`, variant: "h2" }
7607
+ ]
7608
+ },
7609
+ { type: "divider" },
7610
+ {
7611
+ type: "box",
7612
+ className: "relative bg-gray-900 rounded-lg overflow-hidden",
7613
+ style: { width: `${frameWidth * scale * 4}px`, height: `${frameHeight * scale * 4}px`, margin: "0 auto" },
7614
+ children: [
7615
+ {
7616
+ type: "sprite",
7617
+ spritesheet: `@${entityName}.spritesheet`,
7618
+ frameWidth,
7619
+ frameHeight,
7620
+ frame: `@${entityName}.frame`,
7621
+ x: frameWidth * scale,
7622
+ y: frameHeight * scale,
7623
+ scale
7624
+ }
7625
+ ]
7626
+ },
7627
+ {
7628
+ type: "stack",
7629
+ direction: "horizontal",
7630
+ gap: "md",
7631
+ justify: "center",
7632
+ children: [
7633
+ { type: "typography", content: `Frame: `, variant: "caption", color: "muted" },
7634
+ { type: "badge", content: `@${entityName}.frame`, variant: "default" },
7635
+ { type: "typography", content: `Position: `, variant: "caption", color: "muted" },
7636
+ { type: "badge", content: ["concat", `@${entityName}.x`, ",", `@${entityName}.y`], variant: "default" }
7637
+ ]
7638
+ }
7639
+ ]
7571
7640
  };
7572
7641
  return {
7573
7642
  name: c.traitName,
@@ -7626,12 +7695,80 @@ function buildEntity44(c) {
7626
7695
  }
7627
7696
  function buildTrait45(c) {
7628
7697
  const { entityName, initialMuted } = c;
7698
+ const audioControls = {
7699
+ type: "stack",
7700
+ direction: "vertical",
7701
+ gap: "lg",
7702
+ className: "max-w-md mx-auto",
7703
+ children: [
7704
+ {
7705
+ type: "stack",
7706
+ direction: "horizontal",
7707
+ gap: "sm",
7708
+ align: "center",
7709
+ children: [
7710
+ { type: "icon", name: "volume-2", size: "lg" },
7711
+ { type: "typography", content: "Audio Controls", variant: "h2" }
7712
+ ]
7713
+ },
7714
+ { type: "divider" },
7715
+ {
7716
+ type: "card",
7717
+ children: [
7718
+ {
7719
+ type: "stack",
7720
+ direction: "vertical",
7721
+ gap: "md",
7722
+ children: [
7723
+ { type: "typography", content: initialMuted ? "Audio Muted" : "Audio Active", variant: "h4" },
7724
+ { type: "typography", content: "Toggle mute to control game audio playback.", variant: "body", color: "muted" },
7725
+ {
7726
+ type: "stack",
7727
+ direction: "horizontal",
7728
+ gap: "sm",
7729
+ children: [
7730
+ { type: "button", label: "Toggle Mute", icon: initialMuted ? "volume-x" : "volume-2", event: "TOGGLE_MUTE", variant: "primary" }
7731
+ ]
7732
+ }
7733
+ ]
7734
+ }
7735
+ ]
7736
+ },
7737
+ {
7738
+ type: "card",
7739
+ children: [
7740
+ {
7741
+ type: "stack",
7742
+ direction: "vertical",
7743
+ gap: "sm",
7744
+ children: [
7745
+ { type: "typography", content: "Sound Effects", variant: "h4" },
7746
+ {
7747
+ type: "stack",
7748
+ direction: "horizontal",
7749
+ gap: "sm",
7750
+ children: [
7751
+ { type: "button", label: "Play Click", icon: "play", variant: "outline" },
7752
+ { type: "button", label: "Play Confirm", icon: "play", variant: "outline" },
7753
+ { type: "button", label: "Play Drop", icon: "play", variant: "outline" }
7754
+ ]
7755
+ }
7756
+ ]
7757
+ }
7758
+ ]
7759
+ }
7760
+ ]
7761
+ };
7629
7762
  const audioView = {
7630
7763
  type: "game-audio-provider",
7631
- manifest: {},
7632
- baseUrl: "",
7764
+ manifest: {
7765
+ click: "https://almadar-kflow-assets.web.app/shared/audio/sfx/close_001.ogg",
7766
+ confirm: "https://almadar-kflow-assets.web.app/shared/audio/sfx/confirmation_001.ogg",
7767
+ drop: "https://almadar-kflow-assets.web.app/shared/audio/sfx/drop_001.ogg"
7768
+ },
7769
+ baseUrl: "https://almadar-kflow-assets.web.app/shared/audio",
7633
7770
  initialMuted,
7634
- children: []
7771
+ children: [audioControls]
7635
7772
  };
7636
7773
  return {
7637
7774
  name: c.traitName,
@@ -8084,15 +8221,38 @@ function resolve50(params) {
8084
8221
  };
8085
8222
  }
8086
8223
  function buildEntity49(c) {
8087
- return makeEntity({ name: c.entityName, fields: c.fields, persistence: c.persistence });
8224
+ const fields = [
8225
+ ...c.fields.filter((f) => !["tiles", "units", "features"].includes(f.name)),
8226
+ { name: "tiles", type: "array", default: [] },
8227
+ { name: "units", type: "array", default: [] },
8228
+ { name: "features", type: "array", default: [] }
8229
+ ];
8230
+ const instances = [
8231
+ {
8232
+ id: "scene-1",
8233
+ name: "Battle Arena",
8234
+ description: "A 3D battle arena",
8235
+ status: "active",
8236
+ createdAt: "2026-01-01",
8237
+ tiles: [
8238
+ { x: 0, y: 0, z: 0, type: "grass" },
8239
+ { x: 1, y: 0, z: 0, type: "grass" },
8240
+ { x: 0, y: 0, z: 1, type: "stone" },
8241
+ { x: 1, y: 0, z: 1, type: "water" }
8242
+ ],
8243
+ units: [],
8244
+ features: []
8245
+ }
8246
+ ];
8247
+ return makeEntity({ name: c.entityName, fields, persistence: c.persistence, instances });
8088
8248
  }
8089
8249
  function buildTrait50(c) {
8090
8250
  const { entityName, orientation, cameraMode, showGrid, shadows, backgroundColor } = c;
8091
8251
  const canvasView = {
8092
8252
  type: "game-canvas3-d",
8093
- tiles: `@${entityName}`,
8094
- units: `@${entityName}`,
8095
- features: `@${entityName}`,
8253
+ tiles: ["object/get", ["array/first", `@${entityName}`], "tiles"],
8254
+ units: ["object/get", ["array/first", `@${entityName}`], "units"],
8255
+ features: ["object/get", ["array/first", `@${entityName}`], "features"],
8096
8256
  orientation,
8097
8257
  cameraMode,
8098
8258
  showGrid,