@almadar/std 16.144.0 → 16.146.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 (124) hide show
  1. package/behaviors/lolo/ml/atoms/std-ml-classify.lolo +121 -0
  2. package/behaviors/lolo/ml/atoms/std-ml-exact-check.lolo +90 -0
  3. package/behaviors/lolo/ml/atoms/std-ml-infer.lolo +141 -0
  4. package/behaviors/lolo/ml/atoms/std-ml-label-capture.lolo +75 -0
  5. package/behaviors/lolo/ml/atoms/std-ml-lookup.lolo +83 -0
  6. package/behaviors/lolo/ml/atoms/std-ml-posterior.lolo +104 -0
  7. package/behaviors/lolo/ml/atoms/std-ml-similarity.lolo +166 -0
  8. package/behaviors/lolo/ml/molecules/std-escalating-decision.lolo +271 -0
  9. package/behaviors/lolo/ml/molecules/std-knowledge-tracing.lolo +115 -0
  10. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +14 -0
  11. package/behaviors/lolo/ui/core/atoms/std-board.lolo +20 -6
  12. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +23 -6
  13. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +80 -2
  14. package/behaviors/lolo/ui/core/atoms/std-stats.lolo +1 -1
  15. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +3 -3
  16. package/behaviors/lolo/ui/core/atoms/ui-typography.lolo +1 -1
  17. package/behaviors/lolo/ui/core/molecules/ui-calendar-grid.lolo +18 -0
  18. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +2 -0
  19. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +3 -2
  20. package/behaviors/lolo/ui/core/molecules/ui-filter-group.lolo +20 -0
  21. package/behaviors/lolo/ui/core/molecules/ui-search-input.lolo +7 -2
  22. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +3 -2
  23. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +2 -0
  24. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +2 -0
  25. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +2 -0
  26. package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +2 -0
  27. package/behaviors/lolo/ui/game/atoms/std-dungeon-combat.lolo +2 -2
  28. package/behaviors/lolo/ui/game/molecules/std-worldmap-board-2d.lolo +1 -1
  29. package/behaviors/lolo/ui/game/organisms/ui-boardgame-board.lolo +2 -2
  30. package/behaviors/lolo/ui/game/organisms/ui-builder-board.lolo +2 -2
  31. package/behaviors/lolo/ui/game/organisms/ui-debugger-board.lolo +3 -3
  32. package/behaviors/lolo/ui/game/organisms/ui-physics-sandbox-board.lolo +3 -3
  33. package/behaviors/lolo/ui/game/organisms/ui-roguelike-board.lolo +1 -1
  34. package/behaviors/lolo/ui/game/organisms/ui-sequencer-board.lolo +1 -1
  35. package/behaviors/lolo/ui/learning/atoms/std-algo-heapsort.lolo +2 -2
  36. package/behaviors/lolo/ui/learning/atoms/std-algo-mst.lolo +3 -3
  37. package/behaviors/registry/factory-signatures.json +5018 -824
  38. package/behaviors/registry/ml/atoms/std-ml-classify.orb +622 -0
  39. package/behaviors/registry/ml/atoms/std-ml-exact-check.orb +505 -0
  40. package/behaviors/registry/ml/atoms/std-ml-infer.orb +770 -0
  41. package/behaviors/registry/ml/atoms/std-ml-label-capture.orb +367 -0
  42. package/behaviors/registry/ml/atoms/std-ml-lookup.orb +473 -0
  43. package/behaviors/registry/ml/atoms/std-ml-posterior.orb +669 -0
  44. package/behaviors/registry/ml/atoms/std-ml-similarity.orb +917 -0
  45. package/behaviors/registry/ml/molecules/std-escalating-decision.orb +1553 -0
  46. package/behaviors/registry/ml/molecules/std-knowledge-tracing.orb +577 -0
  47. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +33 -1
  48. package/behaviors/registry/ui/core/atoms/std-board.orb +64 -20
  49. package/behaviors/registry/ui/core/atoms/std-browse.orb +83 -48
  50. package/behaviors/registry/ui/core/atoms/std-calendar.orb +213 -3
  51. package/behaviors/registry/ui/core/atoms/ui-typography.orb +1 -1
  52. package/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +27 -0
  53. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +25 -12
  54. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +26 -13
  55. package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +86 -0
  56. package/behaviors/registry/ui/core/molecules/ui-search-input.orb +37 -1
  57. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +25 -12
  58. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +13 -0
  59. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +21 -8
  60. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +13 -0
  61. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +13 -0
  62. package/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +4 -4
  63. package/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +6 -9
  64. package/behaviors/registry/ui/game/organisms/ui-boardgame-board.orb +4 -4
  65. package/behaviors/registry/ui/game/organisms/ui-builder-board.orb +4 -4
  66. package/behaviors/registry/ui/game/organisms/ui-debugger-board.orb +12 -12
  67. package/behaviors/registry/ui/game/organisms/ui-physics-sandbox-board.orb +19 -19
  68. package/behaviors/registry/ui/game/organisms/ui-roguelike-board.orb +1 -1
  69. package/behaviors/registry/ui/game/organisms/ui-sequencer-board.orb +2 -2
  70. package/behaviors/registry/ui/learning/atoms/std-algo-heapsort.orb +8 -8
  71. package/canonical-operators.json +30 -6
  72. package/dist/behaviors/behaviors-embeddings.json +267 -267
  73. package/dist/behaviors/exports-reader.js +2462 -2080
  74. package/dist/behaviors/functions/index.d.ts +725 -1
  75. package/dist/behaviors/functions/index.js +2437 -2081
  76. package/dist/behaviors/index.d.ts +1 -1
  77. package/dist/behaviors/index.js +2463 -2081
  78. package/dist/behaviors/knob-embeddings.json +1 -1
  79. package/dist/behaviors/query.js +2462 -2080
  80. package/dist/behaviors/registry/factory-signatures.json +5018 -824
  81. package/dist/behaviors/registry/ml/atoms/std-ml-classify.orb +622 -0
  82. package/dist/behaviors/registry/ml/atoms/std-ml-exact-check.orb +505 -0
  83. package/dist/behaviors/registry/ml/atoms/std-ml-infer.orb +770 -0
  84. package/dist/behaviors/registry/ml/atoms/std-ml-label-capture.orb +367 -0
  85. package/dist/behaviors/registry/ml/atoms/std-ml-lookup.orb +473 -0
  86. package/dist/behaviors/registry/ml/atoms/std-ml-posterior.orb +669 -0
  87. package/dist/behaviors/registry/ml/atoms/std-ml-similarity.orb +917 -0
  88. package/dist/behaviors/registry/ml/molecules/std-escalating-decision.orb +1553 -0
  89. package/dist/behaviors/registry/ml/molecules/std-knowledge-tracing.orb +577 -0
  90. package/dist/behaviors/registry/ui/core/atoms/std-app-layout.orb +33 -1
  91. package/dist/behaviors/registry/ui/core/atoms/std-board.orb +64 -20
  92. package/dist/behaviors/registry/ui/core/atoms/std-browse.orb +83 -48
  93. package/dist/behaviors/registry/ui/core/atoms/std-calendar.orb +213 -3
  94. package/dist/behaviors/registry/ui/core/atoms/ui-typography.orb +1 -1
  95. package/dist/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +27 -0
  96. package/dist/behaviors/registry/ui/core/molecules/ui-data-grid.orb +25 -12
  97. package/dist/behaviors/registry/ui/core/molecules/ui-data-list.orb +26 -13
  98. package/dist/behaviors/registry/ui/core/molecules/ui-filter-group.orb +86 -0
  99. package/dist/behaviors/registry/ui/core/molecules/ui-search-input.orb +37 -1
  100. package/dist/behaviors/registry/ui/core/molecules/ui-table-view.orb +25 -12
  101. package/dist/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +13 -0
  102. package/dist/behaviors/registry/ui/core/organisms/ui-entity-list.orb +21 -8
  103. package/dist/behaviors/registry/ui/core/organisms/ui-entity-table.orb +13 -0
  104. package/dist/behaviors/registry/ui/core/organisms/ui-timeline.orb +13 -0
  105. package/dist/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +4 -4
  106. package/dist/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +6 -9
  107. package/dist/behaviors/registry/ui/game/organisms/ui-boardgame-board.orb +4 -4
  108. package/dist/behaviors/registry/ui/game/organisms/ui-builder-board.orb +4 -4
  109. package/dist/behaviors/registry/ui/game/organisms/ui-debugger-board.orb +12 -12
  110. package/dist/behaviors/registry/ui/game/organisms/ui-physics-sandbox-board.orb +19 -19
  111. package/dist/behaviors/registry/ui/game/organisms/ui-roguelike-board.orb +1 -1
  112. package/dist/behaviors/registry/ui/game/organisms/ui-sequencer-board.orb +2 -2
  113. package/dist/behaviors/registry/ui/learning/atoms/std-algo-heapsort.orb +8 -8
  114. package/dist/behaviors-embeddings.json +267 -267
  115. package/dist/index.d.ts +1 -1
  116. package/dist/index.js +2498 -2088
  117. package/dist/knob-embeddings.json +1 -1
  118. package/dist/modules/array.js +28 -0
  119. package/dist/modules/contract.js +4 -4
  120. package/dist/modules/data.js +3 -3
  121. package/dist/modules/index.js +35 -7
  122. package/dist/registry/factory-signatures.json +5018 -824
  123. package/dist/registry.js +35 -7
  124. package/package.json +3 -3
@@ -305,6 +305,11 @@ orbital BrowseItemOrbital {
305
305
  @description "Actions beyond this count collapse into a '⋯' overflow menu. Set 2–3 for dense tables."
306
306
  @synonyms "inline actions limit, overflow threshold, max buttons per row"
307
307
  @tier "presentation"
308
+ bodySearch : boolean = true
309
+ @label "Show the list's own search box?"
310
+ @description "The dense/feed/gallery looks embed their own search box above the rows. Set false when the page already provides a search affordance (a toolbar Search molecule), so the surface shows one search box instead of two."
311
+ @synonyms "inline search, list search, built-in search, show search, duplicate search"
312
+ @tier "presentation"
308
313
  searchPlaceholder : string = "Search…"
309
314
  @label "Search box placeholder text"
310
315
  @description "Hint text inside the list search box (e.g. 'Search orders…')."
@@ -327,7 +332,7 @@ orbital BrowseItemOrbital {
327
332
  @description "Render-ui SExpr rendered after rows load when browseLook = table (the default). Composes the canonical data-grid call wrapped in a stack. See denseBodyContent/feedBodyContent/galleryBodyContent for the other browseLook bodies; any may be overridden directly while inheriting the same trait, state machine, emits, and listens."
328
333
  @tier "internal"
329
334
  denseBodyContent : render-ui = {
330
- children: [{
335
+ children: [(if @config.bodySearch {
331
336
  align: center
332
337
  children: [{
333
338
  className: "w-full max-w-2xl"
@@ -340,7 +345,11 @@ orbital BrowseItemOrbital {
340
345
  direction: horizontal
341
346
  gap: sm
342
347
  type: stack
343
- }, {
348
+ } {
349
+ children: []
350
+ gap: none
351
+ type: stack
352
+ }), {
344
353
  children: [@trait.DenseTableView]
345
354
  className: "rounded-lg border border-[var(--color-border)] overflow-x-auto bg-[var(--color-card)] shadow-sm"
346
355
  direction: vertical
@@ -356,7 +365,7 @@ orbital BrowseItemOrbital {
356
365
  @description "Render-ui SExpr rendered after rows load when browseLook = dense. Spreadsheet-style sticky-header data-table with a search bar; composes columns/itemActions/maxInlineActions/displayPageSize/searchPlaceholder. Folded from std-browse-dense (Phase 5.B)."
357
366
  @tier "internal"
358
367
  feedBodyContent : render-ui = {
359
- children: [{
368
+ children: [(if @config.bodySearch {
360
369
  align: center
361
370
  children: [{
362
371
  className: w-full
@@ -369,7 +378,11 @@ orbital BrowseItemOrbital {
369
378
  direction: horizontal
370
379
  gap: sm
371
380
  type: stack
372
- }, {
381
+ } {
382
+ children: []
383
+ gap: none
384
+ type: stack
385
+ }), {
373
386
  entity: ?data
374
387
  fields: []
375
388
  gap: md
@@ -451,7 +464,7 @@ orbital BrowseItemOrbital {
451
464
  @description "Render-ui SExpr rendered after rows load when browseLook = feed. Chronological card-per-item stream with avatar, title, meta, body, timestamp; composes titleBinding/descriptionBinding/categoryBinding/badgeBinding/metaBinding/searchPlaceholder/itemActions. Folded from std-browse-feed (Phase 5.B)."
452
465
  @tier "internal"
453
466
  galleryBodyContent : render-ui = {
454
- children: [{
467
+ children: [(if @config.bodySearch {
455
468
  align: center
456
469
  children: [{
457
470
  className: w-full
@@ -464,7 +477,11 @@ orbital BrowseItemOrbital {
464
477
  direction: horizontal
465
478
  gap: sm
466
479
  type: stack
467
- }, {
480
+ } {
481
+ children: []
482
+ gap: none
483
+ type: stack
484
+ }), {
468
485
  className: w-full
469
486
  entity: ?data
470
487
  fields: []
@@ -11,10 +11,11 @@ orbital CalendarEventOrbital {
11
11
  description : string @description "event details or notes" @synonyms "details, notes, body, summary"
12
12
  status : "active" | "inactive" | "pending" @description "event lifecycle status" @synonyms "state, stage, phase" = active
13
13
  createdAt : string
14
- date : datetime @intrinsic = ""
14
+ date : datetime @intrinsic
15
15
  time : string @description "event start time of day" @synonyms "start, scheduled time, begins, when, start time" = ""
16
16
  duration : number @description "event length in minutes" @synonyms "minutes, length, span, duration" = 60
17
17
  selectedRange : string @intrinsic = month
18
+ weekAnchor : date @intrinsic
18
19
  }
19
20
 
20
21
  trait CalendarEventCalendar -> @rebindable CalendarEvent [interaction, collection] {
@@ -22,6 +23,7 @@ orbital CalendarEventOrbital {
22
23
 
23
24
  state loading {
24
25
  INIT -> loading
26
+ (set @entity.weekAnchor (time/now))
25
27
  (fetch CalendarEvent {
26
28
  emit: { failure: CalendarEventLoadFailed, success: CalendarEventLoaded }
27
29
  })
@@ -87,6 +89,16 @@ orbital CalendarEventOrbital {
87
89
  emit: { failure: CalendarEventLoadFailed, success: CalendarEventLoaded }
88
90
  filter: (time/isAfter (time/parse @entity.date) (if ["=", ?value, week] (time/subtract (time/now) 1 week) (if ["=", ?value, "3months"] (time/subtract (time/now) 3 month) (if ["=", ?value, year] (time/subtract (time/now) 1 year) (time/subtract (time/now) 1 month)))))
89
91
  })
92
+ CALENDAR_PREV_WEEK -> loading
93
+ (set @entity.weekAnchor (time/subtract @entity.weekAnchor 1 week))
94
+ (fetch CalendarEvent {
95
+ emit: { failure: CalendarEventLoadFailed, success: CalendarEventLoaded }
96
+ })
97
+ CALENDAR_NEXT_WEEK -> loading
98
+ (set @entity.weekAnchor (time/add @entity.weekAnchor 1 week))
99
+ (fetch CalendarEvent {
100
+ emit: { failure: CalendarEventLoadFailed, success: CalendarEventLoaded }
101
+ })
90
102
  }
91
103
 
92
104
  state error {
@@ -106,6 +118,11 @@ orbital CalendarEventOrbital {
106
118
  @description "Indicates a failure to load calendar events."
107
119
  @synonyms "error, failed, problem, loading issue"
108
120
  @tier "internal"
121
+ @config.onEventClick -> external {
122
+ event : object
123
+ }
124
+ @description "Emitted when a calendar chip is clicked: UI:{onEventClick} with { event } carrying the clicked row."
125
+ @tier "presentation"
109
126
  }
110
127
 
111
128
  listens {
@@ -128,6 +145,14 @@ orbital CalendarEventOrbital {
128
145
  @description "Indicates a failure to load calendar events."
129
146
  @synonyms "error, failure, problem, failed"
130
147
  @tier "internal"
148
+ CALENDAR_PREV_WEEK
149
+ @description "Move the week timeline one week earlier."
150
+ @synonyms "previous week, back a week, earlier week, last week"
151
+ @tier "domain"
152
+ CALENDAR_NEXT_WEEK
153
+ @description "Move the week timeline one week later."
154
+ @synonyms "next week, forward a week, later week, following week"
155
+ @tier "domain"
131
156
  }
132
157
 
133
158
  config {
@@ -151,6 +176,16 @@ orbital CalendarEventOrbital {
151
176
  @label "Description binding"
152
177
  @description "Per-row binding for the event description slot."
153
178
  @tier "presentation"
179
+ startField : string = "date"
180
+ @label "Start field"
181
+ @description "Row column holding the timestamp the calendar grid places each chip by. Rebound hosts point this at their own column (e.g. startTime, startsAt, dueAt); the chip's LABEL comes from titleBinding, not from here."
182
+ @synonyms "start column, date column, when field, timestamp field"
183
+ @tier "presentation"
184
+ onEventClick : string = ""
185
+ @label "On Event Click"
186
+ @description "Event emitted when a calendar chip is clicked: UI:{onEventClick} with { event } carrying the clicked row. Empty means chips are not clickable."
187
+ @synonyms "open event, event click, select event, chip click"
188
+ @tier "presentation"
154
189
  calendarLook : "month" | "agenda-list" | "week-timeline" = month
155
190
  @label "Calendar look"
156
191
  @description "Layer 3 body layout: default month-grid + upcoming-events list ('month'), day-grouped agenda list ('agenda-list'), or 7-column week timeline ('week-timeline')."
@@ -181,7 +216,17 @@ orbital CalendarEventOrbital {
181
216
  gap: md
182
217
  justify: between
183
218
  type: stack
184
- }, { type: divider }, { events: ?data, type: calendar-grid }, { type: divider }, {
219
+ }, { type: divider }, {
220
+ events: ?data
221
+ onEventClick: @config.onEventClick
222
+ renderItem: (fn item {
223
+ content: @config.titleBinding
224
+ type: typography
225
+ variant: small
226
+ })
227
+ startField: @config.startField
228
+ type: calendar-grid
229
+ }, { type: divider }, {
185
230
  content: "Upcoming Events"
186
231
  type: typography
187
232
  variant: h4
@@ -331,6 +376,29 @@ orbital CalendarEventOrbital {
331
376
  direction: horizontal
332
377
  gap: sm
333
378
  type: stack
379
+ }, {
380
+ align: center
381
+ children: [{
382
+ action: CALENDAR_PREV_WEEK
383
+ icon: chevron-left
384
+ label: "Previous week"
385
+ type: button
386
+ variant: ghost
387
+ }, {
388
+ color: muted
389
+ content: (time/format @entity.weekAnchor "MMM D, YYYY")
390
+ type: typography
391
+ variant: caption
392
+ }, {
393
+ action: CALENDAR_NEXT_WEEK
394
+ icon: chevron-right
395
+ label: "Next week"
396
+ type: button
397
+ variant: ghost
398
+ }]
399
+ direction: horizontal
400
+ gap: xs
401
+ type: stack
334
402
  }, {
335
403
  onSelect: SELECT_DAY
336
404
  selected: @entity.selectedRange
@@ -344,7 +412,17 @@ orbital CalendarEventOrbital {
344
412
  className: w-full
345
413
  dayWindow: 7
346
414
  events: ?data
415
+ onEventClick: @config.onEventClick
416
+ renderItem: (fn item {
417
+ content: @config.titleBinding
418
+ type: typography
419
+ variant: small
420
+ })
421
+ startField: @config.startField
422
+ swipeLeftEvent: CALENDAR_NEXT_WEEK
423
+ swipeRightEvent: CALENDAR_PREV_WEEK
347
424
  type: calendar-grid
425
+ weekStart: @entity.weekAnchor
348
426
  }]
349
427
  direction: vertical
350
428
  gap: md
@@ -305,7 +305,7 @@ orbital StatsItemOrbital {
305
305
  }]
306
306
  look: elevated
307
307
  padding: lg
308
- type: card
308
+ type: "card"
309
309
  }]
310
310
  className: "relative w-full rounded-xl shadow-lg overflow-hidden"
311
311
  direction: vertical
@@ -56,7 +56,7 @@ orbital TagTaxonomyOrbital {
56
56
  children: [{
57
57
  align: center
58
58
  children: [{
59
- name: tag
59
+ name: "tag"
60
60
  size: sm
61
61
  type: icon
62
62
  }, {
@@ -168,7 +168,7 @@ orbital TagTaxonomyOrbital {
168
168
  children: [{
169
169
  align: center
170
170
  children: [{
171
- name: tag
171
+ name: "tag"
172
172
  size: sm
173
173
  type: icon
174
174
  }, {
@@ -266,7 +266,7 @@ orbital TagTaxonomyOrbital {
266
266
  children: [{
267
267
  align: center
268
268
  children: [{
269
- name: tag
269
+ name: "tag"
270
270
  size: sm
271
271
  type: icon
272
272
  }, {
@@ -46,7 +46,7 @@ orbital TypographyOrbital {
46
46
  @tier "presentation"
47
47
  weight : "none" | "light" | "normal" | "medium" | "semibold" | "bold" = none
48
48
  @label "Weight"
49
- @description "Font weight override"
49
+ @description "Font weight override — `none` = no override, the variant's baked weight applies"
50
50
  @tier "presentation"
51
51
  size : "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" = none
52
52
  @label "Size"
@@ -30,6 +30,9 @@ orbital CalendarGridOrbital {
30
30
  swipeLeftEvent: @config.swipeLeftEvent
31
31
  swipeRightEvent: @config.swipeRightEvent
32
32
  dayWindow: @config.dayWindow
33
+ titleField: @config.titleField
34
+ startField: @config.startField
35
+ colorField: @config.colorField
33
36
  type: calendar-grid
34
37
  })
35
38
  CalendarGridLoaded -> idle
@@ -46,6 +49,9 @@ orbital CalendarGridOrbital {
46
49
  swipeLeftEvent: @config.swipeLeftEvent
47
50
  swipeRightEvent: @config.swipeRightEvent
48
51
  dayWindow: @config.dayWindow
52
+ titleField: @config.titleField
53
+ startField: @config.startField
54
+ colorField: @config.colorField
49
55
  type: calendar-grid
50
56
  })
51
57
  }
@@ -134,6 +140,18 @@ orbital CalendarGridOrbital {
134
140
  @label "Day Window"
135
141
  @description "Override the viewport-driven day window. `'auto'` (default) tracks `window.innerWidth` — 1 day on mobile, 3 on tablet, 7 on laptop+. Pass an explicit number to force a fixed window (useful for print layouts or screenshot tests)."
136
142
  @tier "presentation"
143
+ titleField : string = title
144
+ @label "Title Field"
145
+ @description "Row field holding the chip label. Defaults to `title`. Lets a host bound to its own entity name the column instead of being forced to rename its fields to this grid's contract (same accessor idiom as `DataList`'s `senderField` / `DataGrid`'s `imageField`)."
146
+ @tier "presentation"
147
+ startField : string = startTime
148
+ @label "Start Field"
149
+ @description "Row field holding the start timestamp (ISO or epoch). Defaults to `startTime`."
150
+ @tier "presentation"
151
+ colorField : string = color
152
+ @label "Color Field"
153
+ @description "Row field holding the chip's Tailwind colour class. Defaults to `color`."
154
+ @tier "presentation"
137
155
  }
138
156
  }
139
157
 
@@ -106,6 +106,8 @@ orbital DataGridOrbital {
106
106
  look: @config.look
107
107
  type: data-grid
108
108
  })
109
+ VIEW -> idle
110
+ (emit VIEW {})
109
111
  }
110
112
 
111
113
  emits {
@@ -18,8 +18,7 @@ orbital DataListOrbital {
18
18
  }
19
19
  type DataListItemActionsItem = {
20
20
  label : string!
21
- event : string
22
- navigatesTo : string
21
+ event : string!
23
22
  icon : icon
24
23
  variant : "primary" | "secondary" | "ghost" | "danger"
25
24
  }
@@ -123,6 +122,8 @@ orbital DataListOrbital {
123
122
  look: @config.look
124
123
  type: data-list
125
124
  })
125
+ VIEW -> idle
126
+ (emit VIEW {})
126
127
  }
127
128
 
128
129
  emits {
@@ -30,6 +30,8 @@ orbital FilterGroupOrbital {
30
30
  query: @config.query
31
31
  isLoading: @config.isLoading
32
32
  look: @config.look
33
+ event: @config.event
34
+ clearEvent: @config.clearEvent
33
35
  type: filter-group
34
36
  })
35
37
  }
@@ -46,6 +48,16 @@ orbital FilterGroupOrbital {
46
48
  }
47
49
  @description "Callback to clear all filters"
48
50
  @tier "essential"
51
+ @config.event -> external {
52
+ id : string
53
+ }
54
+ @description "Declarative filter event — emits UI:{event} via eventBus on filter change (alongside canonical UI:FILTER)"
55
+ @tier "essential"
56
+ @config.clearEvent -> external {
57
+ id : string
58
+ }
59
+ @description "Declarative clear event — emits UI:{clearEvent} via eventBus on clear-all (alongside canonical UI:CLEAR_FILTERS)"
60
+ @tier "essential"
49
61
  }
50
62
 
51
63
  config {
@@ -85,6 +97,14 @@ orbital FilterGroupOrbital {
85
97
  @label "Look"
86
98
  @description "Layer 2 visual treatment — orthogonal to the semantic variant."
87
99
  @tier "presentation"
100
+ event : string = "EVENT"
101
+ @label "Event"
102
+ @description "Declarative filter event — emits UI:{event} via eventBus on filter change (alongside canonical UI:FILTER)"
103
+ @tier "presentation"
104
+ clearEvent : string = "CLEAR"
105
+ @label "Clear Event"
106
+ @description "Declarative clear event — emits UI:{clearEvent} via eventBus on clear-all (alongside canonical UI:CLEAR_FILTERS)"
107
+ @tier "presentation"
88
108
  }
89
109
  }
90
110
 
@@ -49,6 +49,11 @@ orbital SearchInputOrbital {
49
49
  }
50
50
  @description "Callback when search value changes"
51
51
  @tier "essential"
52
+ @config.event -> external {
53
+ id : string
54
+ }
55
+ @description "Declarative search event — emits UI:{event} via eventBus on query submit (alongside canonical UI:SEARCH)"
56
+ @tier "essential"
52
57
  }
53
58
 
54
59
  listens {
@@ -86,9 +91,9 @@ orbital SearchInputOrbital {
86
91
  @label "Class Name"
87
92
  @description "Additional CSS classes"
88
93
  @tier "presentation"
89
- event : string
94
+ event : string = "EVENT"
90
95
  @label "Event"
91
- @description "Event name to dispatch on search (schema metadata, wired by trait) This is metadata used by the trait generator, not by the component."
96
+ @description "Declarative search event emits UI:{event} via eventBus on query submit (alongside canonical UI:SEARCH)"
92
97
  @tier "presentation"
93
98
  query : string
94
99
  @label "Query"
@@ -31,8 +31,7 @@ orbital TableViewOrbital {
31
31
  }
32
32
  type TableViewItemActionsItem = {
33
33
  label : string!
34
- event : string
35
- navigatesTo : string
34
+ event : string!
36
35
  icon : icon
37
36
  variant : "primary" | "secondary" | "ghost" | "danger"
38
37
  }
@@ -112,6 +111,8 @@ orbital TableViewOrbital {
112
111
  look: @config.look
113
112
  type: table-view
114
113
  })
114
+ VIEW -> idle
115
+ (emit VIEW {})
115
116
  }
116
117
 
117
118
  emits {
@@ -96,6 +96,8 @@ orbital EntityCardsOrbital {
96
96
  imageField: @config.imageField
97
97
  type: entity-cards
98
98
  })
99
+ VIEW -> idle
100
+ (emit VIEW {})
99
101
  }
100
102
 
101
103
  emits {
@@ -74,6 +74,8 @@ orbital EntityListOrbital {
74
74
  fieldNames: @config.fieldNames
75
75
  type: entity-list
76
76
  })
77
+ VIEW -> idle
78
+ (emit VIEW {})
77
79
  }
78
80
 
79
81
  emits {
@@ -120,6 +120,8 @@ orbital EntityTableOrbital {
120
120
  look: @config.look
121
121
  type: entity-table
122
122
  })
123
+ VIEW -> idle
124
+ (emit VIEW {})
123
125
  }
124
126
 
125
127
  emits {
@@ -59,6 +59,8 @@ orbital TimelineOrbital {
59
59
  look: @config.look
60
60
  type: timeline
61
61
  })
62
+ VIEW -> idle
63
+ (emit VIEW {})
62
64
  }
63
65
 
64
66
  emits {
@@ -55,11 +55,11 @@ orbital DungeonCombatOrbital {
55
55
  (let ((target (array/find @entity.enemies (fn e (== @e.id @payload.targetId)))))
56
56
  (let ((newHealth (math/max 0 (- (object/get @target health) @config.attackDamage))))
57
57
  (do
58
- (set @entity.enemies (array/map @entity.enemies (fn e (if (== @e.id @payload.targetId) (object/merge @e { health: @newHealth, animation: (if (<= @newHealth 0) "death" "hit") }) e))))
58
+ (set @entity.enemies (array/map @entity.enemies (fn e (if (== @e.id @payload.targetId) (object/merge @e { health: @newHealth, animation: (if (<= @newHealth 0) "death" "hit") }) @e))))
59
59
  (if (<= @newHealth 0)
60
60
  (do
61
61
  (set @entity.combatScore (+ @entity.combatScore @config.pointsPerKill))
62
- (emit BURST { particles: (array/map (array/filter @entity.enemies (fn e (== @e.id @payload.targetId))) (fn t { id: (str/concat "fx-kill-" (object/get t id)), type: "explosion", x: (object/get (object/get t position) x), z: (object/get (object/get t position) y), ttl: 5 })) }))
62
+ (emit BURST { particles: (array/map (array/filter @entity.enemies (fn e (== @e.id @payload.targetId))) (fn t { id: (str/concat "fx-kill-" (object/get @t id)), type: "explosion", x: (object/get (object/get @t position) x), z: (object/get (object/get @t position) y), ttl: 5 })) }))
63
63
  true))))
64
64
 
65
65
  MONSTER_TICK -> active when @config.running
@@ -168,7 +168,7 @@ orbital WorldMapBoard2DOrbital {
168
168
 
169
169
  HERO_MOVE -> playing when (and (== @entity.result "none") (and (!= @entity.selectedHeroId "") (and (grid/in-bounds { x: ?x, y: ?y } @config.gridWidth @config.gridHeight) (and (<= (grid/manhattan-distance (object/get (array/find @entity.units (fn u (== @u.id @entity.selectedHeroId))) position) { x: ?x, y: ?y }) @config.movementRange) (and (== (object/get (array/find @entity.tiles (fn t (and (== (object/get @t x) ?x) (== (object/get @t y) ?y)))) passable) true) (== (array/len (array/filter @entity.units (fn u (and (== (object/get (object/get @u position) x) ?x) (== (object/get (object/get @u position) y) ?y))))) 0))))))
170
170
  (emit MOVE { unitId: @entity.selectedHeroId, x: ?x, y: ?y })
171
- (if (== (object/get (array/find @config.features (fn f (and (== (object/get f x) ?x) (and (== (object/get f y) ?y) (== (object/get f type) "gold_mine"))))) type) "gold_mine") (emit MINE_HIT { id: "" }) null)
171
+ (if (== (object/get (array/find @config.features (fn f (and (== (object/get @f x) ?x) (and (== (object/get @f y) ?y) (== (object/get @f type) "gold_mine"))))) type) "gold_mine") (emit MINE_HIT { id: "" }) null)
172
172
  (set @entity.selectedHeroId "")
173
173
  (set @entity.validMoves [])
174
174
 
@@ -119,7 +119,7 @@ orbital BoardgameBoardOrbital {
119
119
  (set @entity.landingIndex (math/min @entity.lastIndex (+ @entity.playerIndex @entity.dice)))
120
120
  (set @entity.landingType (object/get (array/nth @config.track @entity.landingIndex) type))
121
121
  (set @entity.playerIndex (if (== @entity.landingType "bonus") (math/min @entity.lastIndex (+ @entity.landingIndex 2)) (if (== @entity.landingType "trap") (math/max 0 (- @entity.landingIndex 2)) @entity.landingIndex)))
122
- (set @entity.pieces (array/map @entity.pieces (fn p (if (== @p.id "you") (object/merge p { position: { x: (object/get (array/nth @config.track @entity.playerIndex) x), y: (object/get (array/nth @config.track @entity.playerIndex) y) }, trackIndex: @entity.playerIndex }) p))))
122
+ (set @entity.pieces (array/map @entity.pieces (fn p (if (== @p.id "you") (object/merge @p { position: { x: (object/get (array/nth @config.track @entity.playerIndex) x), y: (object/get (array/nth @config.track @entity.playerIndex) y) }, trackIndex: @entity.playerIndex }) @p))))
123
123
  (if (or (== @entity.landingType "bonus") (== @entity.landingType "trap")) (set @entity.effects (array/append @entity.effects { key: @entity.landingType, x: (object/get (array/nth @config.track @entity.landingIndex) x), y: (object/get (array/nth @config.track @entity.landingIndex) y), ttl: 6 })) true)
124
124
  (set @entity.result (if (== @entity.playerIndex @entity.lastIndex) "victory" "none"))
125
125
  (if (== @entity.result "victory") (emit GAME_END) true)
@@ -218,7 +218,7 @@ orbital BoardgameBoardOrbital {
218
218
  (set @entity.landingIndex (math/min @entity.lastIndex (+ @entity.rivalIndex @entity.dice)))
219
219
  (set @entity.landingType (object/get (array/nth @config.track @entity.landingIndex) type))
220
220
  (set @entity.rivalIndex (if (== @entity.landingType "bonus") (math/min @entity.lastIndex (+ @entity.landingIndex 2)) (if (== @entity.landingType "trap") (math/max 0 (- @entity.landingIndex 2)) @entity.landingIndex)))
221
- (set @entity.pieces (array/map @entity.pieces (fn p (if (== @p.id "rival") (object/merge p { position: { x: (object/get (array/nth @config.track @entity.rivalIndex) x), y: (object/get (array/nth @config.track @entity.rivalIndex) y) }, trackIndex: @entity.rivalIndex }) p))))
221
+ (set @entity.pieces (array/map @entity.pieces (fn p (if (== @p.id "rival") (object/merge @p { position: { x: (object/get (array/nth @config.track @entity.rivalIndex) x), y: (object/get (array/nth @config.track @entity.rivalIndex) y) }, trackIndex: @entity.rivalIndex }) @p))))
222
222
  (if (or (== @entity.landingType "bonus") (== @entity.landingType "trap")) (set @entity.effects (array/append @entity.effects { key: @entity.landingType, x: (object/get (array/nth @config.track @entity.landingIndex) x), y: (object/get (array/nth @config.track @entity.landingIndex) y), ttl: 6 })) true)
223
223
  (set @entity.result (if (== @entity.rivalIndex @entity.lastIndex) "defeat" "none"))
224
224
  (if (== @entity.result "defeat") (emit GAME_END) true)
@@ -100,7 +100,7 @@ orbital BuilderBoardOrbital {
100
100
  ]
101
101
  })
102
102
 
103
- CHECK -> complete when (== (array/len (array/filter @entity.slots (fn s (!= (object/get s placedComponentId) (object/get s requiredComponentId))))) 0)
103
+ CHECK -> complete when (== (array/len (array/filter @entity.slots (fn s (!= (object/get @s placedComponentId) (object/get @s requiredComponentId))))) 0)
104
104
  (set @entity.attempts (+ @entity.attempts 1))
105
105
  (set @entity.result "win")
106
106
  (render-ui main {
@@ -112,7 +112,7 @@ orbital BuilderBoardOrbital {
112
112
  ]
113
113
  })
114
114
 
115
- CHECK -> playing when (> (array/len (array/filter @entity.slots (fn s (!= (object/get s placedComponentId) (object/get s requiredComponentId))))) 0)
115
+ CHECK -> playing when (> (array/len (array/filter @entity.slots (fn s (!= (object/get @s placedComponentId) (object/get @s requiredComponentId))))) 0)
116
116
  (set @entity.attempts (+ @entity.attempts 1))
117
117
  (render-ui main {
118
118
  type: game-shell
@@ -74,7 +74,7 @@ orbital DebuggerBoardOrbital {
74
74
  ]
75
75
  })
76
76
  TOGGLE_FLAG -> playing
77
- (set @entity.lines (array/map @entity.lines (fn l (if (== (object/get l id) ?lineId) (object/merge l { isFlagged: (not (object/get l isFlagged)) }) l))))
77
+ (set @entity.lines (array/map @entity.lines (fn l (if (== (object/get @l id) ?lineId) (object/merge @l { isFlagged: (not (object/get @l isFlagged)) }) @l))))
78
78
  (render-ui main {
79
79
  type: game-shell
80
80
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Attempts", value: @entity.attempts }, { label: "Status", value: @entity.result } ] }, { type: stack, direction: horizontal, gap: sm, children: [ { type: button, action: CHECK, label: "Check", variant: primary }, { type: button, action: PLAY_AGAIN, label: "Reset", variant: secondary } ] } ] }
@@ -84,7 +84,7 @@ orbital DebuggerBoardOrbital {
84
84
  ]
85
85
  })
86
86
 
87
- CHECK -> complete when (and (== (array/len (array/filter @entity.lines (fn l (and (object/get l isBug) (not (object/get l isFlagged)))))) 0) (== (array/len (array/filter @entity.lines (fn l (and (not (object/get l isBug)) (object/get l isFlagged))))) 0))
87
+ CHECK -> complete when (and (== (array/len (array/filter @entity.lines (fn l (and (object/get @l isBug) (not (object/get @l isFlagged)))))) 0) (== (array/len (array/filter @entity.lines (fn l (and (not (object/get @l isBug)) (object/get @l isFlagged))))) 0))
88
88
  (set @entity.attempts (+ @entity.attempts 1))
89
89
  (set @entity.result "win")
90
90
  (render-ui main {
@@ -96,7 +96,7 @@ orbital DebuggerBoardOrbital {
96
96
  ]
97
97
  })
98
98
 
99
- CHECK -> playing when (or (> (array/len (array/filter @entity.lines (fn l (and (object/get l isBug) (not (object/get l isFlagged)))))) 0) (> (array/len (array/filter @entity.lines (fn l (and (not (object/get l isBug)) (object/get l isFlagged))))) 0))
99
+ CHECK -> playing when (or (> (array/len (array/filter @entity.lines (fn l (and (object/get @l isBug) (not (object/get @l isFlagged)))))) 0) (> (array/len (array/filter @entity.lines (fn l (and (not (object/get @l isBug)) (object/get @l isFlagged))))) 0))
100
100
  (set @entity.attempts (+ @entity.attempts 1))
101
101
  (render-ui main {
102
102
  type: game-shell
@@ -141,10 +141,10 @@ orbital PhysicsSandboxBoardOrbital {
141
141
 
142
142
  ticks {
143
143
  gravityTick every 300ms
144
- (set @entity.blocks (array/map @entity.blocks (fn b (if (== (object/get b settled) true) b (if (or (== (+ (object/get b y) 1) @entity.gridHeight) (array/some @entity.blocks (fn o (and (== (object/get o settled) true) (and (== (object/get o x) (object/get b x)) (== (object/get o y) (+ (object/get b y) 1))))))) (object/merge b { settled: true }) (object/merge b { y: (+ (object/get b y) 1) }))))))
145
- (let ((clearRow (array/find (array/range 0 @entity.gridHeight) (fn r (== (array/len (array/filter @entity.blocks (fn b (and (== (object/get b settled) true) (== (object/get b y) r))))) @entity.gridWidth)))))
144
+ (set @entity.blocks (array/map @entity.blocks (fn b (if (== (object/get @b settled) true) @b (if (or (== (+ (object/get @b y) 1) @entity.gridHeight) (array/some @entity.blocks (fn o (and (== (object/get @o settled) true) (and (== (object/get @o x) (object/get @b x)) (== (object/get @o y) (+ (object/get @b y) 1))))))) (object/merge @b { settled: true }) (object/merge @b { y: (+ (object/get @b y) 1) }))))))
145
+ (let ((clearRow (array/find (array/range 0 @entity.gridHeight) (fn r (== (array/len (array/filter @entity.blocks (fn b (and (== (object/get @b settled) true) (== (object/get @b y) @r))))) @entity.gridWidth)))))
146
146
  (do
147
- (set @entity.blocks (if (!= @clearRow null) (array/map (array/filter @entity.blocks (fn b (!= (object/get b y) @clearRow))) (fn b (if (< (object/get b y) @clearRow) (object/merge b { y: (+ (object/get b y) 1) }) b))) @entity.blocks))
147
+ (set @entity.blocks (if (!= @clearRow null) (array/map (array/filter @entity.blocks (fn b (!= (object/get @b y) @clearRow))) (fn b (if (< (object/get @b y) @clearRow) (object/merge @b { y: (+ (object/get @b y) 1) }) @b))) @entity.blocks))
148
148
  (set @entity.score (if (!= @clearRow null) (+ @entity.score (* 10 @entity.gridWidth)) @entity.score))
149
149
  (set @entity.rowsCleared (if (!= @clearRow null) (+ @entity.rowsCleared 1) @entity.rowsCleared))))
150
150
  (render-ui main {
@@ -466,7 +466,7 @@ orbital RoguelikeBoardOrbital {
466
466
  enemyAiTick every 1s
467
467
  when (and (== @entity.phase "enemy_turn") (== @entity.result "none"))
468
468
  (set @entity.enemies (array/map @entity.enemies (fn e (if (> @e.hp 0) (let ((ex @e.x) (ey @e.y) (px (object/get @entity.player x)) (py (object/get @entity.player y))) (let ((adjP (and (== (math/abs (- @ex @px)) 1) (== @ey @py))) (adjQ (and (== @ex @px) (== (math/abs (- @ey @py)) 1)))) (if (or @adjP @adjQ) @e (let ((cnx (math/clamp (+ @ex (math/sign (- @px @ex))) 0 (- @entity.gridWidth 1))) (cny (math/clamp (+ @ey (math/sign (- @py @ey))) 0 (- @entity.gridHeight 1)))) (let ((ntile (array/find @entity.tiles (fn t (and (== (object/get @t x) @cnx) (== (object/get @t y) @cny))))) (occupied (array/find @entity.enemies (fn o (and (!= @o.id @e.id) (and (== @o.x @cnx) (== @o.y @cny))))))) (if (and (and (!= @ntile null) (== (object/get @ntile passable) true)) (and (== @occupied null) (or (!= @cnx @px) (!= @cny @py)))) (object/merge @e { x: @cnx, y: @cny }) @e)))))) @e))))
469
- (set @entity.playerHp (let ((adjEnemies (array/filter @entity.enemies (fn e (and (> @e.hp 0) (or (and (== (math/abs (- @e.x (object/get @entity.player x))) 1) (== @e.y (object/get @entity.player y))) (and (== @e.x (object/get @entity.player x)) (== (math/abs (- @e.y (object/get @entity.player y))) 1)))))))) (let ((dmg (if (== (array/len @adjEnemies) 0) 0 (array/reduce @adjEnemies (fn acc e (+ acc @e.attack)) 0)))) (math/max 0 (- @entity.playerHp @dmg)))))
469
+ (set @entity.playerHp (let ((adjEnemies (array/filter @entity.enemies (fn e (and (> @e.hp 0) (or (and (== (math/abs (- @e.x (object/get @entity.player x))) 1) (== @e.y (object/get @entity.player y))) (and (== @e.x (object/get @entity.player x)) (== (math/abs (- @e.y (object/get @entity.player y))) 1)))))))) (let ((dmg (if (== (array/len @adjEnemies) 0) 0 (array/reduce @adjEnemies (fn acc e (+ @acc @e.attack)) 0)))) (math/max 0 (- @entity.playerHp @dmg)))))
470
470
  (set @entity.effects (if (> (array/len (array/filter @entity.enemies (fn e (and (> @e.hp 0) (or (and (== (math/abs (- @e.x (object/get @entity.player x))) 1) (== @e.y (object/get @entity.player y))) (and (== @e.x (object/get @entity.player x)) (== (math/abs (- @e.y (object/get @entity.player y))) 1))))))) 0) (array/append @entity.effects { key: "slash", x: (object/get @entity.player x), y: (object/get @entity.player y), ttl: 4 }) @entity.effects))
471
471
  (if (<= @entity.playerHp 0) (do (set @entity.result "lost") (emit GAME_END)) true)
472
472
  (set @entity.phase (if (== @entity.result "none") "player_turn" "game_over"))
@@ -119,7 +119,7 @@ orbital SequencerBoardOrbital {
119
119
  ]
120
120
  })
121
121
 
122
- CHECK -> complete when (array/some @entity.solutions (fn sol (== (array/map @entity.slots (fn s (object/get s placedActionId))) sol)))
122
+ CHECK -> complete when (array/some @entity.solutions (fn sol (== (array/map @entity.slots (fn s (object/get @s placedActionId))) @sol)))
123
123
  (set @entity.attempts (+ @entity.attempts 1))
124
124
  (set @entity.result "win")
125
125
  (set @entity.currentStep -1)
@@ -58,9 +58,9 @@ orbital HeapSortEngineOrbital {
58
58
  (rc (+ (* 2 @entity.root) 2))
59
59
  )
60
60
  (let (
61
- (afterL (if (and (< lc @entity.heapSize) (> (object/get (array/nth @entity.bars lc) value) (object/get (array/nth @entity.bars @entity.root) value))) lc @entity.root))
61
+ (afterL (if (and (< @lc @entity.heapSize) (> (object/get (array/nth @entity.bars @lc) value) (object/get (array/nth @entity.bars @entity.root) value))) @lc @entity.root))
62
62
  )
63
- (if (and (< rc @entity.heapSize) (> (object/get (array/nth @entity.bars rc) value) (object/get (array/nth @entity.bars afterL) value))) rc afterL))))
63
+ (if (and (< @rc @entity.heapSize) (> (object/get (array/nth @entity.bars @rc) value) (object/get (array/nth @entity.bars @afterL) value))) @rc @afterL))))
64
64
  (set @entity.willSwap (not (== @entity.largest @entity.root)))
65
65
  (set @entity.buildMore (and (not @entity.willSwap) (== @entity.phase 0) (>= @entity.origin 1)))
66
66
  (set @entity.buildDone (and (not @entity.willSwap) (== @entity.phase 0) (== @entity.origin 0)))
@@ -76,7 +76,7 @@ orbital MstEngineOrbital {
76
76
  (let ( (inF (array/includes @entity.inTree (object/get @w from)))
77
77
  (inT (array/includes @entity.inTree (object/get @w to))) )
78
78
  (or (and @inF (not @inT)) (and (not @inF) @inT)))))
79
- (fn w (object/get @w w)))))
79
+ (fn w (object/get @w "w")))))
80
80
  (set @entity.chosenFrom
81
81
  (object/get
82
82
  (array/first
@@ -84,7 +84,7 @@ orbital MstEngineOrbital {
84
84
  (let ( (inF (array/includes @entity.inTree (object/get @w from)))
85
85
  (inT (array/includes @entity.inTree (object/get @w to))) )
86
86
  (and (or (and @inF (not @inT)) (and (not @inF) @inT))
87
- (== (object/get @w w) @entity.minW))))))
87
+ (== (object/get @w "w") @entity.minW))))))
88
88
  from))
89
89
  (set @entity.chosenTo
90
90
  (object/get
@@ -93,7 +93,7 @@ orbital MstEngineOrbital {
93
93
  (let ( (inF (array/includes @entity.inTree (object/get @w from)))
94
94
  (inT (array/includes @entity.inTree (object/get @w to))) )
95
95
  (and (or (and @inF (not @inT)) (and (not @inF) @inT))
96
- (== (object/get @w w) @entity.minW))))))
96
+ (== (object/get @w "w") @entity.minW))))))
97
97
  to))
98
98
  (set @entity.treeEdges (array/append @entity.treeEdges { from: @entity.chosenFrom, to: @entity.chosenTo }))
99
99
  (set @entity.inTree