@almadar/std 16.182.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 (56) hide show
  1. package/behaviors/lolo/infra/atoms/std-migration-job.lolo +2 -2
  2. package/behaviors/lolo/ui/core/.hand-authored.json +4 -0
  3. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +11 -0
  4. package/behaviors/lolo/ui/core/atoms/std-related.lolo +86 -9
  5. package/behaviors/lolo/ui/core/atoms/std-rich-editor.lolo +115 -1
  6. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +62 -2
  7. package/behaviors/lolo/ui/core/atoms/std-thread.lolo +43 -2
  8. package/behaviors/lolo/ui/core/atoms/std-tree.lolo +247 -0
  9. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +110 -2
  10. package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +18 -2
  11. package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +6 -2
  12. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +2 -2
  13. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +2 -2
  14. package/behaviors/lolo/ui/game/atoms/std-fx-trail.lolo +63 -0
  15. package/behaviors/lolo/ui/game/atoms/std-gate-lock.lolo +96 -0
  16. package/behaviors/lolo/ui/game/atoms/std-lives.lolo +121 -0
  17. package/behaviors/lolo/ui/game/atoms/std-patrol-hazard.lolo +96 -0
  18. package/behaviors/lolo/ui/game/atoms/std-tutorial-autodemo.lolo +136 -0
  19. package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +197 -0
  20. package/behaviors/lolo/ui/learning/atoms/std-learn-slope-probe.lolo +117 -0
  21. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +18 -0
  22. package/behaviors/registry/infra/atoms/std-migration-job.orb +2 -2
  23. package/behaviors/registry/ui/core/atoms/std-browse.orb +17 -0
  24. package/behaviors/registry/ui/core/atoms/std-related.orb +256 -3
  25. package/behaviors/registry/ui/core/atoms/std-rich-editor.orb +407 -1
  26. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +240 -8
  27. package/behaviors/registry/ui/core/atoms/std-thread.orb +254 -4
  28. package/behaviors/registry/ui/core/atoms/std-tree.orb +656 -0
  29. package/behaviors/registry/ui/core/atoms/std-version-history.orb +479 -6
  30. package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +43 -19
  31. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +28 -3
  32. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +8 -2
  33. package/behaviors/registry/ui/core/organisms/ui-form.orb +8 -2
  34. package/behaviors/registry/ui/game/atoms/std-fx-trail.orb +376 -0
  35. package/behaviors/registry/ui/game/atoms/std-gate-lock.orb +852 -0
  36. package/behaviors/registry/ui/game/atoms/std-lives.orb +739 -0
  37. package/behaviors/registry/ui/game/atoms/std-patrol-hazard.orb +768 -0
  38. package/behaviors/registry/ui/game/atoms/std-tutorial-autodemo.orb +732 -0
  39. package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +1212 -0
  40. package/behaviors/registry/ui/learning/atoms/std-learn-slope-probe.orb +908 -0
  41. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +26 -0
  42. package/dist/behaviors/exports-reader.js +5478 -2954
  43. package/dist/behaviors/functions/index.d.ts +763 -15
  44. package/dist/behaviors/functions/index.js +5447 -2953
  45. package/dist/behaviors/index.d.ts +1 -1
  46. package/dist/behaviors/index.js +5479 -2955
  47. package/dist/behaviors/query.js +5478 -2954
  48. package/dist/behaviors-embeddings.hash.json +3 -3
  49. package/dist/behaviors-embeddings.json +362 -330
  50. package/dist/behaviors-registry.json +2812 -542
  51. package/dist/index.d.ts +1 -1
  52. package/dist/index.js +5479 -2955
  53. package/dist/knob-embeddings.hash.json +3 -3
  54. package/dist/knob-embeddings.json +1 -1
  55. package/dist/registry/factory-signatures.json +1 -1
  56. package/package.json +2 -2
@@ -0,0 +1,117 @@
1
+ app std-learn-slope-probe "1.0.0"
2
+ "Headless derivative probe for graph-riding learning boards: while the body authority's BODY_MOVED reports its `skating` flag (body riding the curve), it brackets the configured curve around the body's x and derives the local calculus readout — the slope dy/dx, a tangent-line segment of half-width `window` centered on the contact point, a rise-over-run triangle (run `triRun`, rise slope·run), and the glow window of curve samples around the contact — all written to a [runtime, shared] entity so the board renders the math the player is physically riding. Emits the sparse SLOPE_CHANGED signal only when the slope crosses a 0.5 bucket boundary, so fx and HUD meters react to *changes* in steepness without paying a per-tick event. The curve is the same sample table the body skates and the canvas draws — one source, three views. Renders nothing."
3
+ orbital LearnSlopeProbeOrbital {
4
+ type ProbeSample = {
5
+ x : number!
6
+ y : number!
7
+ }
8
+
9
+ entity SlopeProbeState [runtime, shared] {
10
+ id : string!
11
+ probing : boolean = false
12
+ x : number = 0
13
+ y : number = 0
14
+ slope : number = 0
15
+ tax : number = 0
16
+ tay : number = 0
17
+ tbx : number = 0
18
+ tby : number = 0
19
+ triAx : number = 0
20
+ triAy : number = 0
21
+ triBx : number = 0
22
+ triBy : number = 0
23
+ triCx : number = 0
24
+ triCy : number = 0
25
+ segment : [ProbeSample] = []
26
+ bucket : number = 9999
27
+ }
28
+
29
+ trait LearnSlopeProbe -> @rebindable SlopeProbeState [lifecycle] {
30
+ initial: idle
31
+
32
+ state idle {
33
+ INIT -> idle
34
+ (set @entity.probing false)
35
+ (set @entity.segment [])
36
+ (set @entity.bucket 9999)
37
+
38
+ BODY_MOVED -> idle when @config.running
39
+ (let ((on (and @payload.skating (> (array/len @config.curve) 1))))
40
+ (let ((inRange (and @on (and (>= @payload.x (object/get (array/first @config.curve) x)) (<= @payload.x (object/get (array/last @config.curve) x))))))
41
+ (if @inRange
42
+ (let ((leftSamp (array/last (array/filter @config.curve (fn s (<= (object/get @s x) @payload.x)))))
43
+ (rightSamp (array/first (array/filter @config.curve (fn s (> (object/get @s x) @payload.x))))))
44
+ (let ((slope (if (== @rightSamp null) 0 (/ (- (object/get @rightSamp y) (object/get @leftSamp y)) (- (object/get @rightSamp x) (object/get @leftSamp x))))))
45
+ (let ((curveY (if (== @rightSamp null) (object/get @leftSamp y) (+ (object/get @leftSamp y) (* @slope (- @payload.x (object/get @leftSamp x)))))))
46
+ (let ((norm (math/sqrt (+ 1 (* @slope @slope)))))
47
+ (let ((dx (/ @config.window @norm)) (dy (/ (* @slope @config.window) @norm)))
48
+ (let ((newBucket (* (math/round (* @slope 2) 0) 0.5)))
49
+ (do
50
+ (set @entity.probing true)
51
+ (set @entity.x @payload.x)
52
+ (set @entity.y @curveY)
53
+ (set @entity.slope @slope)
54
+ (set @entity.tax (- @payload.x @dx))
55
+ (set @entity.tay (- @curveY @dy))
56
+ (set @entity.tbx (+ @payload.x @dx))
57
+ (set @entity.tby (+ @curveY @dy))
58
+ (set @entity.triAx @payload.x)
59
+ (set @entity.triAy @curveY)
60
+ (set @entity.triBx (+ @payload.x @config.triRun))
61
+ (set @entity.triBy @curveY)
62
+ (set @entity.triCx (+ @payload.x @config.triRun))
63
+ (set @entity.triCy (+ @curveY (* @slope @config.triRun)))
64
+ (set @entity.segment (array/filter @config.curve (fn s (and (>= (object/get @s x) (- @payload.x @config.window)) (<= (object/get @s x) (+ @payload.x @config.window))))))
65
+ (if (!= @newBucket @entity.bucket)
66
+ (do
67
+ (set @entity.bucket @newBucket)
68
+ (emit SLOPE_CHANGED { slope: @slope, bucket: @newBucket }))
69
+ null))))))))
70
+ (if @entity.probing
71
+ (do
72
+ (set @entity.probing false)
73
+ (set @entity.segment []))
74
+ null))))
75
+
76
+ RESTART -> idle
77
+ (set @entity.probing false)
78
+ (set @entity.segment [])
79
+ (set @entity.bucket 9999)
80
+ }
81
+
82
+ emits {
83
+ SLOPE_CHANGED -> external {
84
+ slope : number!
85
+ bucket : number!
86
+ }
87
+ @description "The local dy/dx crossed a 0.5 bucket boundary while the probe was active; slope is exact, bucket is the rounded step — fx/HUD scale with steepness without paying per-tick events."
88
+ @tier "domain"
89
+ }
90
+
91
+ listens {
92
+ BODY_MOVED { x : number!, y : number!, vx : number!, vy : number!, grounded : boolean!, skating : boolean!, speed : number! }
93
+ RESTART { id : string }
94
+ }
95
+
96
+ config {
97
+ running : boolean = true
98
+ @label "Running"
99
+ @description "When true the probe derives the readout off BODY_MOVED; toggle to freeze it (the board hides the tangent overlays when probing goes stale)."
100
+ @tier "domain"
101
+ curve : [ProbeSample] = []
102
+ @label "Curve"
103
+ @description "Surface samples (x strictly increasing) of the graph being ridden — the same table the body skates and the canvas draws, so the readout matches what is underfoot."
104
+ @tier "domain"
105
+ window : number = 1.5
106
+ @label "Tangent Window"
107
+ @description "Half-length (world units along the tangent) of the tangent segment and of the glow sample window around the contact point."
108
+ @tier "presentation"
109
+ triRun : number = 1
110
+ @label "Triangle Run"
111
+ @description "Horizontal leg of the rise-over-run triangle; the vertical leg is slope × triRun, so triRun = 1 reads the slope directly."
112
+ @tier "presentation"
113
+ }
114
+ }
115
+
116
+ page "/learn-slope-probe" as LearnSlopeProbePage -> LearnSlopeProbe
117
+ }
@@ -168,6 +168,9 @@ orbital MathCanvasOrbital {
168
168
  showAxes: @config.showAxes
169
169
  showGrid: @config.showGrid
170
170
  gridStep: @config.gridStep
171
+ backgroundColor: @config.backgroundColor
172
+ gridColor: @config.gridColor
173
+ axisColor: @config.axisColor
171
174
  showTickLabels: @config.showTickLabels
172
175
  showCurveLabels: @config.showCurveLabels
173
176
  curves: @config.curves
@@ -203,6 +206,9 @@ orbital MathCanvasOrbital {
203
206
  showAxes: @config.showAxes
204
207
  showGrid: @config.showGrid
205
208
  gridStep: @config.gridStep
209
+ backgroundColor: @config.backgroundColor
210
+ gridColor: @config.gridColor
211
+ axisColor: @config.axisColor
206
212
  showTickLabels: @config.showTickLabels
207
213
  showCurveLabels: @config.showCurveLabels
208
214
  curves: @payload.curves
@@ -299,6 +305,18 @@ orbital MathCanvasOrbital {
299
305
  @label "Grid Step"
300
306
  @description "gridStep prop"
301
307
  @tier "presentation"
308
+ backgroundColor : string
309
+ @label "Background Color"
310
+ @description "Canvas fill color; `var(--token, fallback)` strings resolve against the active theme. Default transparent."
311
+ @tier "presentation"
312
+ gridColor : string = "var(--color-border, #9ca3af)"
313
+ @label "Grid Color"
314
+ @description "Grid line color; resolves theme tokens (default `var(--color-border, #9ca3af)`)."
315
+ @tier "presentation"
316
+ axisColor : string = "var(--color-muted-foreground, #374151)"
317
+ @label "Axis Color"
318
+ @description "Axis line color; resolves theme tokens (default `var(--color-muted-foreground, #374151)`)."
319
+ @tier "presentation"
302
320
  showTickLabels : boolean = false
303
321
  @label "Show Tick Labels"
304
322
  @description "Draw numeric labels on grid lines (default false)."
@@ -335,11 +335,11 @@
335
335
  "config": {
336
336
  "connectionRef": {
337
337
  "default": "",
338
- "description": "Secret-store / environment KEY holding the source credentials. The reference is stored; the secret itself never enters config, traces, or snapshots — the migration service resolves it at run time. (Typed `string` until the `secret` config-field type lands in the lolo language — tracked gap.)",
338
+ "description": "Secret-store / environment KEY holding the source credentials. The reference is stored; the secret itself never enters config, traces, or snapshots — the migration service resolves it at run time. (Typed `secret` — the config-field type that marks a credential reference; UI password-renders it and traces mask it.)",
339
339
  "label": "Connection reference",
340
340
  "synonyms": "credential key, connection string reference, secret name",
341
341
  "tier": "internal",
342
- "type": "string"
342
+ "type": "secret"
343
343
  },
344
344
  "reviewSlot": {
345
345
  "default": "modal",
@@ -945,6 +945,17 @@
945
945
  "tier": "internal",
946
946
  "type": "string"
947
947
  },
948
+ "include": {
949
+ "default": [],
950
+ "description": "Entity relation field names to hydrate on fetch (e.g. a `tag : Category` field named `tag`), so grid columns can use dot-paths like tag.name. Empty = no hydration, the default.",
951
+ "items": {
952
+ "type": "string"
953
+ },
954
+ "label": "Which relation fields to hydrate?",
955
+ "synonyms": "relation hydration, populate relations, joined fields, hydrate relations",
956
+ "tier": "internal",
957
+ "type": "[string]"
958
+ },
948
959
  "initialFilterField": {
949
960
  "default": "",
950
961
  "description": "Name the field the INITIAL load filters on, paired with initialFilterValue. This is the detail half of a list-detail pair: a thread that must wait for a conversation to be picked sets the field to its parent key and leaves the value blank, so the first load matches nothing and the empty state shows instead of every record in the table. REFETCH_FILTER then supplies the real selection. Left blank the first load is unfiltered, which is the default.",
@@ -1727,6 +1738,7 @@
1727
1738
  ]
1728
1739
  ]
1729
1740
  ],
1741
+ "include": "@config.include",
1730
1742
  "limit": "@config.pageSize",
1731
1743
  "offset": 0.0
1732
1744
  }
@@ -1888,6 +1900,7 @@
1888
1900
  ]
1889
1901
  ]
1890
1902
  ],
1903
+ "include": "@config.include",
1891
1904
  "limit": "@config.pageSize",
1892
1905
  "offset": 0.0
1893
1906
  }
@@ -1945,6 +1958,7 @@
1945
1958
  ]
1946
1959
  ]
1947
1960
  ],
1961
+ "include": "@config.include",
1948
1962
  "limit": "@config.pageSize",
1949
1963
  "offset": 0.0
1950
1964
  }
@@ -2002,6 +2016,7 @@
2002
2016
  ]
2003
2017
  ]
2004
2018
  ],
2019
+ "include": "@config.include",
2005
2020
  "limit": "@config.pageSize",
2006
2021
  "offset": 0.0
2007
2022
  }
@@ -2039,6 +2054,7 @@
2039
2054
  "@user.id"
2040
2055
  ]
2041
2056
  ],
2057
+ "include": "@config.include",
2042
2058
  "limit": "@config.pageSize",
2043
2059
  "offset": [
2044
2060
  "*",
@@ -2218,6 +2234,7 @@
2218
2234
  ]
2219
2235
  ]
2220
2236
  ],
2237
+ "include": "@config.include",
2221
2238
  "limit": "@config.pageSize",
2222
2239
  "offset": 0.0
2223
2240
  }
@@ -46,6 +46,24 @@
46
46
  "parent": "trt_01KXG04HAWB43BWZ07VSETQEW3",
47
47
  "renames": []
48
48
  },
49
+ "evt_01M0RY3YKG5AXYCBSMYMGG5B4E": {
50
+ "bakedName": "SHOW_RELATED",
51
+ "curName": "SHOW_RELATED",
52
+ "id": "evt_01M0RY3YKG5AXYCBSMYMGG5B4E",
53
+ "kind": "event",
54
+ "owner": "workspace",
55
+ "parent": "trt_01KXG04HAWB43BWZ07VSETQEW3",
56
+ "renames": []
57
+ },
58
+ "evt_01M0RY3YKG814RWTP8NGJZCGG7": {
59
+ "bakedName": "SELECT_RELATED",
60
+ "curName": "SELECT_RELATED",
61
+ "id": "evt_01M0RY3YKG814RWTP8NGJZCGG7",
62
+ "kind": "event",
63
+ "owner": "workspace",
64
+ "parent": "trt_01KXG04HAWB43BWZ07VSETQEW3",
65
+ "renames": []
66
+ },
49
67
  "orb_01KXG04HAW4F728HDBS2FDVGF1": {
50
68
  "bakedName": "RelatedItemOrbital",
51
69
  "curName": "RelatedItemOrbital",
@@ -114,6 +132,13 @@
114
132
  {
115
133
  "category": "interaction",
116
134
  "config": {
135
+ "relationField": {
136
+ "default": "",
137
+ "description": "RelatedItem field compared against SHOW_RELATED's key to scope the fetch to one parent document; empty renders the full unfiltered collection (default).",
138
+ "label": "Relation field",
139
+ "tier": "domain",
140
+ "type": "string"
141
+ },
117
142
  "tableLook": {
118
143
  "default": "dense",
119
144
  "description": "Layer 2 visual treatment for the data table rendered by this atom.",
@@ -127,6 +152,13 @@
127
152
  "borderless",
128
153
  "card-rows"
129
154
  ]
155
+ },
156
+ "title": {
157
+ "default": "Related",
158
+ "description": "Heading shown above the related list.",
159
+ "label": "Section title",
160
+ "tier": "presentation",
161
+ "type": "string"
130
162
  }
131
163
  },
132
164
  "emits": [
@@ -161,6 +193,25 @@
161
193
  "scope": "internal",
162
194
  "synonyms": "error, failure, problem, unsuccessful",
163
195
  "tier": "internal"
196
+ },
197
+ {
198
+ "description": "Signals a related item was selected to drive a detail view.",
199
+ "event": "SELECT_RELATED",
200
+ "eventId": "evt_01M0RY3YKG814RWTP8NGJZCGG7",
201
+ "payloadSchema": [
202
+ {
203
+ "name": "id",
204
+ "required": true,
205
+ "type": "string"
206
+ },
207
+ {
208
+ "name": "name",
209
+ "type": "string"
210
+ }
211
+ ],
212
+ "scope": "external",
213
+ "synonyms": "select, choose, open, view",
214
+ "tier": "domain"
164
215
  }
165
216
  ],
166
217
  "entityContract": {
@@ -183,6 +234,21 @@
183
234
  "key": "INIT",
184
235
  "name": "Initialize"
185
236
  },
237
+ {
238
+ "description": "Scopes the related fetch to rows whose relationField equals key.",
239
+ "id": "evt_01M0RY3YKG5AXYCBSMYMGG5B4E",
240
+ "key": "SHOW_RELATED",
241
+ "name": "Show Related",
242
+ "payloadSchema": [
243
+ {
244
+ "name": "key",
245
+ "required": true,
246
+ "type": "string"
247
+ }
248
+ ],
249
+ "synonyms": "scope, filter, focus, target",
250
+ "tier": "domain"
251
+ },
186
252
  {
187
253
  "description": "Signals that related items have been successfully loaded.",
188
254
  "id": "evt_01KXG04HB00F39QDW8TJMSKNJ9",
@@ -215,6 +281,25 @@
215
281
  "synonyms": "error, failure, problem, unsuccessful",
216
282
  "tier": "internal"
217
283
  },
284
+ {
285
+ "description": "Signals a related item was selected to drive a detail view.",
286
+ "id": "evt_01M0RY3YKG814RWTP8NGJZCGG7",
287
+ "key": "SELECT_RELATED",
288
+ "name": "Select Related",
289
+ "payloadSchema": [
290
+ {
291
+ "name": "id",
292
+ "required": true,
293
+ "type": "string"
294
+ },
295
+ {
296
+ "name": "name",
297
+ "type": "string"
298
+ }
299
+ ],
300
+ "synonyms": "select, choose, open, view",
301
+ "tier": "domain"
302
+ },
218
303
  {
219
304
  "id": "evt_01KYXKHATCCRC9NH1SPH7KH8BC",
220
305
  "key": "RETRY",
@@ -274,6 +359,63 @@
274
359
  "from": "loading",
275
360
  "to": "loading"
276
361
  },
362
+ {
363
+ "effects": [
364
+ [
365
+ "fetch",
366
+ "RelatedItem",
367
+ {
368
+ "emit": {
369
+ "failure": "RelatedItemLoadFailed",
370
+ "success": "RelatedItemLoaded"
371
+ },
372
+ "filter": [
373
+ "or",
374
+ [
375
+ "=",
376
+ "@config.relationField",
377
+ ""
378
+ ],
379
+ [
380
+ "=",
381
+ [
382
+ "object/get",
383
+ "@entity",
384
+ "@config.relationField"
385
+ ],
386
+ "@payload.key"
387
+ ]
388
+ ]
389
+ }
390
+ ],
391
+ [
392
+ "render-ui",
393
+ "main",
394
+ {
395
+ "align": "center",
396
+ "children": [
397
+ {
398
+ "type": "spinner"
399
+ },
400
+ {
401
+ "color": "muted",
402
+ "content": "Loading related…",
403
+ "type": "typography",
404
+ "variant": "caption"
405
+ }
406
+ ],
407
+ "className": "py-8",
408
+ "direction": "vertical",
409
+ "gap": "sm",
410
+ "type": "stack"
411
+ }
412
+ ]
413
+ ],
414
+ "event": "SHOW_RELATED",
415
+ "eventId": "evt_01M0RY3YKG5AXYCBSMYMGG5B4E",
416
+ "from": "loading",
417
+ "to": "loading"
418
+ },
277
419
  {
278
420
  "effects": [
279
421
  [
@@ -289,7 +431,7 @@
289
431
  "type": "icon"
290
432
  },
291
433
  {
292
- "content": "Related",
434
+ "content": "@config.title",
293
435
  "type": "typography",
294
436
  "variant": "h3"
295
437
  }
@@ -309,15 +451,29 @@
309
451
  "fn",
310
452
  "item",
311
453
  {
454
+ "align": "center",
312
455
  "children": [
313
456
  {
314
457
  "content": "@item.name",
315
458
  "type": "typography",
316
459
  "variant": "body"
460
+ },
461
+ {
462
+ "action": "SELECT_RELATED",
463
+ "actionPayload": {
464
+ "id": "@item.id",
465
+ "name": "@item.name"
466
+ },
467
+ "icon": "chevron-right",
468
+ "label": "Open",
469
+ "size": "sm",
470
+ "type": "button",
471
+ "variant": "ghost"
317
472
  }
318
473
  ],
319
- "direction": "vertical",
474
+ "direction": "horizontal",
320
475
  "gap": "xs",
476
+ "justify": "between",
321
477
  "type": "stack"
322
478
  }
323
479
  ],
@@ -404,6 +560,61 @@
404
560
  "from": "loaded",
405
561
  "to": "loading"
406
562
  },
563
+ {
564
+ "effects": [
565
+ [
566
+ "set",
567
+ "@entity.id",
568
+ "@payload.id"
569
+ ]
570
+ ],
571
+ "event": "SELECT_RELATED",
572
+ "eventId": "evt_01M0RY3YKG814RWTP8NGJZCGG7",
573
+ "from": "loaded",
574
+ "to": "loaded"
575
+ },
576
+ {
577
+ "effects": [
578
+ [
579
+ "fetch",
580
+ "RelatedItem",
581
+ {
582
+ "emit": {
583
+ "failure": "RelatedItemLoadFailed",
584
+ "success": "RelatedItemLoaded"
585
+ },
586
+ "filter": [
587
+ "or",
588
+ [
589
+ "=",
590
+ "@config.relationField",
591
+ ""
592
+ ],
593
+ [
594
+ "=",
595
+ [
596
+ "object/get",
597
+ "@entity",
598
+ "@config.relationField"
599
+ ],
600
+ "@payload.key"
601
+ ]
602
+ ]
603
+ }
604
+ ],
605
+ [
606
+ "render-ui",
607
+ "main",
608
+ {
609
+ "type": "spinner"
610
+ }
611
+ ]
612
+ ],
613
+ "event": "SHOW_RELATED",
614
+ "eventId": "evt_01M0RY3YKG5AXYCBSMYMGG5B4E",
615
+ "from": "loaded",
616
+ "to": "loading"
617
+ },
407
618
  {
408
619
  "effects": [
409
620
  [
@@ -453,6 +664,48 @@
453
664
  "eventId": "evt_01KYXKHATCCRC9NH1SPH7KH8BC",
454
665
  "from": "error",
455
666
  "to": "loading"
667
+ },
668
+ {
669
+ "effects": [
670
+ [
671
+ "fetch",
672
+ "RelatedItem",
673
+ {
674
+ "emit": {
675
+ "failure": "RelatedItemLoadFailed",
676
+ "success": "RelatedItemLoaded"
677
+ },
678
+ "filter": [
679
+ "or",
680
+ [
681
+ "=",
682
+ "@config.relationField",
683
+ ""
684
+ ],
685
+ [
686
+ "=",
687
+ [
688
+ "object/get",
689
+ "@entity",
690
+ "@config.relationField"
691
+ ],
692
+ "@payload.key"
693
+ ]
694
+ ]
695
+ }
696
+ ],
697
+ [
698
+ "render-ui",
699
+ "main",
700
+ {
701
+ "type": "spinner"
702
+ }
703
+ ]
704
+ ],
705
+ "event": "SHOW_RELATED",
706
+ "eventId": "evt_01M0RY3YKG5AXYCBSMYMGG5B4E",
707
+ "from": "error",
708
+ "to": "loading"
456
709
  }
457
710
  ]
458
711
  }
@@ -461,5 +714,5 @@
461
714
  }
462
715
  ],
463
716
  "schemaVersion": 1,
464
- "version": "1.0.0"
717
+ "version": "1.1.0"
465
718
  }