@almadar/std 16.211.0 → 16.212.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 (127) hide show
  1. package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +3 -0
  2. package/behaviors/lolo/infra/atoms/std-cache-aside.lolo +6 -0
  3. package/behaviors/lolo/infra/atoms/std-calendar-sync.lolo +3 -0
  4. package/behaviors/lolo/infra/atoms/std-cascade-on-delete.lolo +1 -0
  5. package/behaviors/lolo/infra/atoms/std-circuit-breaker.lolo +2 -0
  6. package/behaviors/lolo/infra/atoms/std-cross-reference.lolo +2 -0
  7. package/behaviors/lolo/infra/atoms/std-data-erasure.lolo +3 -0
  8. package/behaviors/lolo/infra/atoms/std-lifecycle.lolo +2 -0
  9. package/behaviors/lolo/infra/atoms/std-migration-job.lolo +12 -0
  10. package/behaviors/lolo/infra/atoms/std-mod-queue.lolo +1 -0
  11. package/behaviors/lolo/infra/atoms/std-notification-center.lolo +2 -0
  12. package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +5 -0
  13. package/behaviors/lolo/infra/atoms/std-reminder-scheduler.lolo +2 -0
  14. package/behaviors/lolo/infra/atoms/std-status-lifecycle.lolo +1 -0
  15. package/behaviors/lolo/ml/atoms/std-ml-classify.lolo +1 -0
  16. package/behaviors/lolo/ml/atoms/std-ml-infer.lolo +1 -0
  17. package/behaviors/lolo/ui/core/atoms/std-board.lolo +6 -0
  18. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +6 -1
  19. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +6 -1
  20. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +2 -0
  21. package/behaviors/lolo/ui/core/atoms/std-gallery.lolo +8 -1
  22. package/behaviors/lolo/ui/core/atoms/std-list.lolo +8 -1
  23. package/behaviors/lolo/ui/core/atoms/std-selection.lolo +8 -1
  24. package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +1 -0
  25. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +16 -0
  26. package/behaviors/lolo/ui/core/atoms/std-wizard.lolo +36 -0
  27. package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -1
  28. package/behaviors/lolo/ui/core/atoms/ui-button.lolo +1 -1
  29. package/behaviors/lolo/ui/core/atoms/ui-checkbox.lolo +22 -2
  30. package/behaviors/lolo/ui/core/atoms/ui-game-icon.lolo +1 -1
  31. package/behaviors/lolo/ui/core/atoms/ui-select.lolo +6 -2
  32. package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +3 -1
  33. package/behaviors/lolo/ui/core/molecules/ui-command-palette.lolo +1 -1
  34. package/behaviors/lolo/ui/core/molecules/ui-floating-toolbar.lolo +1 -1
  35. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +1 -1
  36. package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +1 -1
  37. package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +2 -2
  38. package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +6 -0
  39. package/behaviors/lolo/ui/game/atoms/ui-action-palette.lolo +1 -1
  40. package/behaviors/lolo/ui/game/atoms/ui-action-tile.lolo +1 -1
  41. package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +1 -1
  42. package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +1 -1
  43. package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +2 -2
  44. package/behaviors/lolo/ui/game/atoms/ui-dialogue-bubble.lolo +1 -1
  45. package/behaviors/lolo/ui/game/atoms/ui-draw-fx-layer.lolo +1 -1
  46. package/behaviors/lolo/ui/game/atoms/ui-draw-skinned-mesh.lolo +7 -2
  47. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite-layer.lolo +1 -1
  48. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +1 -1
  49. package/behaviors/lolo/ui/game/atoms/ui-game-audio-toggle.lolo +2 -2
  50. package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +5 -5
  51. package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +1 -1
  52. package/behaviors/lolo/ui/game/atoms/ui-health-bar.lolo +2 -2
  53. package/behaviors/lolo/ui/game/atoms/ui-score-display.lolo +1 -1
  54. package/behaviors/lolo/ui/game/atoms/ui-sequence-bar.lolo +2 -2
  55. package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +2 -2
  56. package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +4 -4
  57. package/behaviors/registry/infra/atoms/std-approval-gate.orb +56 -18
  58. package/behaviors/registry/infra/atoms/std-cache-aside.orb +76 -32
  59. package/behaviors/registry/infra/atoms/std-calendar-sync.orb +46 -0
  60. package/behaviors/registry/infra/atoms/std-cascade-on-delete.orb +20 -0
  61. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +40 -14
  62. package/behaviors/registry/infra/atoms/std-cross-reference.orb +41 -15
  63. package/behaviors/registry/infra/atoms/std-data-erasure.orb +52 -0
  64. package/behaviors/registry/infra/atoms/std-lifecycle.orb +36 -0
  65. package/behaviors/registry/infra/atoms/std-migration-job.orb +108 -0
  66. package/behaviors/registry/infra/atoms/std-mod-queue.orb +20 -0
  67. package/behaviors/registry/infra/atoms/std-notification-center.orb +32 -0
  68. package/behaviors/registry/infra/atoms/std-notify-on-event.orb +70 -0
  69. package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +36 -0
  70. package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +20 -0
  71. package/behaviors/registry/ml/atoms/std-ml-classify.orb +18 -0
  72. package/behaviors/registry/ml/atoms/std-ml-infer.orb +18 -0
  73. package/behaviors/registry/ui/core/atoms/std-board.orb +58 -0
  74. package/behaviors/registry/ui/core/atoms/std-browse.orb +9 -1
  75. package/behaviors/registry/ui/core/atoms/std-calendar.orb +9 -1
  76. package/behaviors/registry/ui/core/atoms/std-event-log.orb +26 -0
  77. package/behaviors/registry/ui/core/atoms/std-gallery.orb +35 -1
  78. package/behaviors/registry/ui/core/atoms/std-list.orb +35 -1
  79. package/behaviors/registry/ui/core/atoms/std-selection.orb +35 -1
  80. package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +20 -0
  81. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +56 -0
  82. package/behaviors/registry/ui/core/atoms/std-wizard.orb +77 -0
  83. package/behaviors/registry/ui/core/atoms/ui-badge.orb +4 -1
  84. package/behaviors/registry/ui/core/atoms/ui-button.orb +4 -1
  85. package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +78 -2
  86. package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +4 -1
  87. package/behaviors/registry/ui/core/atoms/ui-select.orb +28 -0
  88. package/behaviors/registry/ui/core/atoms/ui-textarea.orb +14 -0
  89. package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +1 -28
  90. package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +1 -20
  91. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +1 -14
  92. package/behaviors/registry/ui/core/molecules/ui-menu.orb +1 -24
  93. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +8 -2
  94. package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +44 -0
  95. package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +4 -1
  96. package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +4 -1
  97. package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +4 -1
  98. package/behaviors/registry/ui/game/atoms/ui-control-button.orb +4 -1
  99. package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +8 -2
  100. package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +4 -1
  101. package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +4 -1
  102. package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +12 -2
  103. package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +4 -1
  104. package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +4 -1
  105. package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +8 -2
  106. package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +20 -5
  107. package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +4 -1
  108. package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +8 -2
  109. package/behaviors/registry/ui/game/atoms/ui-score-display.orb +4 -1
  110. package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +4 -1
  111. package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +8 -2
  112. package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +8 -2
  113. package/dist/behaviors/exports-reader.js +1187 -277
  114. package/dist/behaviors/functions/index.d.ts +38 -7
  115. package/dist/behaviors/functions/index.js +1187 -277
  116. package/dist/behaviors/index.d.ts +1 -1
  117. package/dist/behaviors/index.js +1187 -277
  118. package/dist/behaviors/query.js +1187 -277
  119. package/dist/behaviors-embeddings.hash.json +3 -3
  120. package/dist/behaviors-embeddings.json +15 -15
  121. package/dist/behaviors-registry.json +535 -182
  122. package/dist/index.d.ts +1 -1
  123. package/dist/index.js +1187 -277
  124. package/dist/knob-embeddings.hash.json +3 -3
  125. package/dist/knob-embeddings.json +1 -1
  126. package/dist/registry/factory-signatures.json +1 -1
  127. package/package.json +2 -2
@@ -127,6 +127,7 @@ orbital ApprovalGateOrbital {
127
127
  })
128
128
  ApprovalRequestLoaded -> idle
129
129
  ApprovalRequestLoadFailed -> idle
130
+ (notify error (str/concat "Couldn't load the approval request — " ?error))
130
131
  ;; A replay failure can also arrive while the queue is closed.
131
132
  APPROVAL_REPLAY_FAILED -> idle
132
133
  (set @entity.id ?requestId)
@@ -137,6 +138,8 @@ orbital ApprovalGateOrbital {
137
138
  emit: { failure: ApprovalRequestReviewFailed, success: ApprovalRequestReviewed }
138
139
  })
139
140
  (notify error "Approval could not be applied — the request was reopened.")
141
+ ApprovalRequestReviewFailed -> idle
142
+ (notify error (str/concat "Couldn't reopen the approval request — " ?error))
140
143
  OPEN -> loading when @config.enabled
141
144
  (fetch ApprovalRequest {
142
145
  filter: ["=", (object/get @entity status), "pending"]
@@ -158,6 +158,12 @@ orbital CacheEntryOrbital {
158
158
  gap: md
159
159
  type: stack
160
160
  })
161
+ CacheEntryUpdateFailed -> loading
162
+ (notify error (str/concat "Couldn't update the cache entry — " ?error))
163
+ CacheEntryUpdated -> loading
164
+ (fetch CacheEntry {
165
+ emit: { failure: CacheEntryLoadFailed, success: CacheEntryLoaded }
166
+ })
161
167
  }
162
168
 
163
169
  state cached {
@@ -69,6 +69,7 @@ orbital CalendarSyncOrbital {
69
69
  (emit CAL_SYNCED { syncedAt: @entity.lastSyncedAt })
70
70
  CAL_SYNC_FAILED -> idle
71
71
  (set @entity.lastError ?error)
72
+ (notify error (str/concat "Couldn't sync the calendar — " ?error))
72
73
  }
73
74
 
74
75
  state pushing {
@@ -99,6 +100,7 @@ orbital CalendarSyncOrbital {
99
100
  } { emit: { failure: CAL_SYNC_FAILED, success: CAL_REMOTE_LISTED } })
100
101
  CAL_SYNC_FAILED -> idle
101
102
  (set @entity.lastError ?error)
103
+ (notify error (str/concat "Couldn't sync the calendar — " ?error))
102
104
  }
103
105
 
104
106
  state pulling {
@@ -137,6 +139,7 @@ orbital CalendarSyncOrbital {
137
139
  (emit CAL_SYNCED { syncedAt: @entity.lastSyncedAt })
138
140
  CAL_SYNC_FAILED -> idle
139
141
  (set @entity.lastError ?error)
142
+ (notify error (str/concat "Couldn't sync the calendar — " ?error))
140
143
  }
141
144
 
142
145
  emits {
@@ -54,6 +54,7 @@ orbital CascadeOnDeleteOrbital {
54
54
  emit: { failure: CascadeFailed, success: DepsLoaded }
55
55
  })
56
56
  CascadeFailed -> idle
57
+ (notify error (str/concat "Couldn't cascade the delete — " ?error))
57
58
  }
58
59
 
59
60
  emits {
@@ -170,6 +170,8 @@ orbital ServiceNodeOrbital {
170
170
  gap: lg
171
171
  type: stack
172
172
  })
173
+ ServiceNodeLoadFailed -> closed
174
+ (notify error (str/concat "Couldn't load the service node — " ?message))
173
175
  FAILURE -> open
174
176
  (render-ui main {
175
177
  children: [{
@@ -47,6 +47,8 @@ orbital CrossReferenceOrbital {
47
47
  LinksFetched -> idle
48
48
  (set @entity.filteredLinks (array/filter ?data (fn row ["=", (object/get @row leftId), @entity.leftId])))
49
49
  (emit LinksLoaded { data: @entity.filteredLinks, leftId: @entity.leftId })
50
+ LinkOpFailed -> idle
51
+ (notify error (str/concat "Couldn't update the link — " ?error))
50
52
  }
51
53
 
52
54
  emits {
@@ -97,6 +97,7 @@ orbital DataErasureOrbital {
97
97
  })
98
98
  ErasureLoaded -> idle
99
99
  ErasureLoadFailed -> idle
100
+ (notify error (str/concat "Couldn't load the erasure queue — " ?error))
100
101
  OPEN -> loading when @config.enabled
101
102
  (fetch ErasureRequest {
102
103
  emit: { failure: ErasureLoadFailed, success: ErasureLoaded }
@@ -127,6 +128,7 @@ orbital DataErasureOrbital {
127
128
  })
128
129
  ExecScanLoaded -> idle when ["=", (array/len ?data), 0]
129
130
  ExecScanFailed -> idle
131
+ (notify error (str/concat "Couldn't scan for erasures to execute — " ?error))
130
132
  }
131
133
 
132
134
  state execScanning {
@@ -153,6 +155,7 @@ orbital DataErasureOrbital {
153
155
  })
154
156
  ExecScanLoaded -> idle when ["=", (array/len ?data), 0]
155
157
  ExecScanFailed -> idle
158
+ (notify error (str/concat "Couldn't scan for erasures to execute — " ?error))
156
159
  }
157
160
 
158
161
  state loading {
@@ -34,6 +34,7 @@ orbital LifecycleOrbital {
34
34
  })
35
35
  ScanRecordsLoaded -> idle when ["=", (array/len ?data), 0]
36
36
  ScanFailed -> idle
37
+ (notify error (str/concat "Couldn't scan for lifecycle transitions — " ?error))
37
38
  }
38
39
 
39
40
  state scanning {
@@ -51,6 +52,7 @@ orbital LifecycleOrbital {
51
52
  })
52
53
  ScanRecordsLoaded -> idle when ["=", (array/len ?data), 0]
53
54
  ScanFailed -> idle
55
+ (notify error (str/concat "Couldn't scan for lifecycle transitions — " ?error))
54
56
  }
55
57
 
56
58
  emits {
@@ -68,6 +68,7 @@ orbital MigrationJobOrbital {
68
68
  target: @entity.target
69
69
  })
70
70
  (emit MIGRATION_FAILED { error: @entity.error })
71
+ (notify error (str/concat "Couldn't list the source documents — " ?error))
71
72
  }
72
73
 
73
74
  state mapping {
@@ -114,6 +115,7 @@ orbital MigrationJobOrbital {
114
115
  target: @entity.target
115
116
  })
116
117
  (emit MIGRATION_FAILED { error: @entity.error })
118
+ (notify error (str/concat "Couldn't fetch the document — " ?error))
117
119
  }
118
120
 
119
121
  state reviewing {
@@ -135,6 +137,15 @@ orbital MigrationJobOrbital {
135
137
  (set @entity.skipped [])
136
138
  (set @entity.validationErrors [])
137
139
  (render-ui @config.reviewSlot null)
140
+ CLOSE -> idle
141
+ (set @entity.status idle)
142
+ (set @entity.documents [])
143
+ (set @entity.document {})
144
+ (set @entity.stats {})
145
+ (set @entity.units [])
146
+ (set @entity.skipped [])
147
+ (set @entity.validationErrors [])
148
+ (render-ui @config.reviewSlot null)
138
149
  }
139
150
 
140
151
  state committing {
@@ -162,6 +173,7 @@ orbital MigrationJobOrbital {
162
173
  target: @entity.target
163
174
  })
164
175
  (emit MIGRATION_FAILED { error: @entity.error })
176
+ (notify error (str/concat "Couldn't commit the import — " ?error))
165
177
  }
166
178
 
167
179
  state done {
@@ -90,6 +90,7 @@ orbital ModQueueItemOrbital {
90
90
  })
91
91
  ModQueueItemLoaded -> idle
92
92
  ModQueueItemLoadFailed -> idle
93
+ (notify error (str/concat "Couldn't load the moderation queue — " ?error))
93
94
  OPEN -> loading when @config.enabled
94
95
  (fetch ModQueueItem {
95
96
  emit: { failure: ModQueueItemLoadFailed, success: ModQueueItemLoaded }
@@ -190,6 +190,7 @@ orbital NotificationCenterOrbital {
190
190
  DIGEST_ROWS_LOADED -> idle when ["=", (array/len ?data), 0]
191
191
  DIGEST_FAILED -> idle
192
192
  (set @entity.lastError ?error)
193
+ (notify error (str/concat "Couldn't send the notification digest — " ?error))
193
194
  }
194
195
 
195
196
  state draining {
@@ -216,6 +217,7 @@ orbital NotificationCenterOrbital {
216
217
  DIGEST_ROWS_LOADED -> idle when ["=", (array/len ?data), 0]
217
218
  DIGEST_FAILED -> idle
218
219
  (set @entity.lastError ?error)
220
+ (notify error (str/concat "Couldn't send the notification digest — " ?error))
219
221
  }
220
222
 
221
223
  emits {
@@ -176,6 +176,7 @@ orbital NotifyOnEventOrbital {
176
176
  recordedAt: @now
177
177
  severity: @entity.severity
178
178
  })
179
+ (notify error (str/concat "Couldn't send the email notification — " ?error))
179
180
  NOTIFY_SMS_SENT -> idle
180
181
  (set @entity.dispatched true)
181
182
  (persist create NotificationRecord {
@@ -198,6 +199,7 @@ orbital NotifyOnEventOrbital {
198
199
  recordedAt: @now
199
200
  severity: @entity.severity
200
201
  })
202
+ (notify error (str/concat "Couldn't send the text message — " ?error))
201
203
  NOTIFY_WEBHOOK_SENT -> idle
202
204
  (set @entity.dispatched true)
203
205
  (persist create NotificationRecord {
@@ -220,6 +222,7 @@ orbital NotifyOnEventOrbital {
220
222
  recordedAt: @now
221
223
  severity: @entity.severity
222
224
  })
225
+ (notify error (str/concat "Couldn't send the webhook notification — " ?error))
223
226
  NOTIFY_PUSH_SENT -> idle
224
227
  (set @entity.dispatched true)
225
228
  (persist create NotificationRecord {
@@ -242,6 +245,7 @@ orbital NotifyOnEventOrbital {
242
245
  recordedAt: @now
243
246
  severity: @entity.severity
244
247
  })
248
+ (notify error (str/concat "Couldn't send the push notification — " ?error))
245
249
  NOTIFY_LOOKUP_FAILED -> idle
246
250
  (set @entity.dispatched false)
247
251
  (set @entity.error ?error)
@@ -254,6 +258,7 @@ orbital NotifyOnEventOrbital {
254
258
  recordedAt: @now
255
259
  severity: @entity.severity
256
260
  })
261
+ (notify error (str/concat "Couldn't look up notification preferences — " ?error))
257
262
  }
258
263
 
259
264
  emits {
@@ -37,6 +37,7 @@ orbital ReminderSchedulerOrbital {
37
37
  })
38
38
  ScanRecordsLoaded -> idle when ["=", (array/len ?data), 0]
39
39
  ScanFailed -> idle
40
+ (notify error (str/concat "Couldn't scan for reminders — " ?error))
40
41
  }
41
42
 
42
43
  state scanning {
@@ -57,6 +58,7 @@ orbital ReminderSchedulerOrbital {
57
58
  })
58
59
  ScanRecordsLoaded -> idle when ["=", (array/len ?data), 0]
59
60
  ScanFailed -> idle
61
+ (notify error (str/concat "Couldn't scan for reminders — " ?error))
60
62
  }
61
63
 
62
64
  emits {
@@ -31,6 +31,7 @@ orbital StatusLifecycleOrbital {
31
31
  StatusPersisted -> idle when ["!=", (str/default ?id ""), ""]
32
32
  (emit StatusChanged { entityId: ?id, status: (str/default (object/get @payload @config.statusField) "") })
33
33
  StatusChangeFailed -> idle
34
+ (notify error (str/concat "Couldn't change the status — " ?error))
34
35
  }
35
36
 
36
37
  emits {
@@ -73,6 +73,7 @@ orbital MlClassifyOrbital {
73
73
  (set @entity.errorMessage ?error)
74
74
  (set @entity.status done)
75
75
  (emit CLASSIFY_FAILED { error: @entity.errorMessage })
76
+ (notify error (str/concat "Couldn't classify — " ?error))
76
77
  }
77
78
 
78
79
  state done {
@@ -87,6 +87,7 @@ orbital MlInferOrbital {
87
87
  (set @entity.reason "unavailable")
88
88
  (set @entity.status resolved)
89
89
  (emit INFER_ABSTAINED { reason: "unavailable", violations: @entity.violations, request: @entity.request })
90
+ (notify error (str/concat "Couldn't run inference — " ?error))
90
91
  }
91
92
 
92
93
  state resolved {
@@ -268,6 +268,12 @@ orbital BoardOrbital {
268
268
  label: (object/get @col label)
269
269
  variant: (object/get @col variant default)
270
270
  })))
271
+ BoardItemsSaveFailed -> viewing_board
272
+ (set @entity.errorMessage ?error)
273
+ (notify error (str/concat "Couldn't save the board — " ?error))
274
+ BoardItemsLoadFailed -> viewing_board
275
+ (set @entity.errorMessage ?error)
276
+ (notify error (str/concat "Couldn't refresh the board — " ?error))
271
277
  }
272
278
 
273
279
  state viewing_card {
@@ -105,7 +105,7 @@ orbital BrowseItemOrbital {
105
105
  REFETCH_QUERY -> browsing
106
106
  (fetch BrowseItem {
107
107
  emit: { failure: BrowseItemLoadFailed, success: BrowseItemLoaded }
108
- filter: (and (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id]) (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm)))
108
+ filter: (and (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id]) (or ["=", ?searchTerm, ""] (str/includes (object/get @entity @config.searchField) ?searchTerm)))
109
109
  include: @config.include
110
110
  limit: @config.pageSize
111
111
  offset: 0
@@ -376,6 +376,11 @@ orbital BrowseItemOrbital {
376
376
  @description "Adds a checkbox column with select-all to the dense table. Enable only when the surface offers bulk actions — checkboxes with nothing to act on are a dead affordance."
377
377
  @synonyms "row checkboxes, multi-select, bulk select, selection column"
378
378
  @tier "presentation"
379
+ searchField : string = "name"
380
+ @label "Which column does the search box match against?"
381
+ @description "Name the field on this entity the search box's str/includes filter matches against. Declared, never inferred: an entity with no `name` column must set this to a real field (e.g. title, content) or the search box can never match a row."
382
+ @synonyms "search column, search on field, match field, search key"
383
+ @tier "policy"
379
384
  bodySearch : boolean = true
380
385
  @label "Show the list's own search box?"
381
386
  @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."
@@ -116,7 +116,7 @@ orbital CalendarEventOrbital {
116
116
  (fetch CalendarEvent {
117
117
  emit: { failure: CalendarEventLoadFailed, success: CalendarEventLoaded }
118
118
  include: @config.include
119
- filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm))
119
+ filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity @config.searchField) ?searchTerm))
120
120
  })
121
121
  REFETCH_FILTER -> loading
122
122
  (fetch CalendarEvent {
@@ -283,6 +283,11 @@ orbital CalendarEventOrbital {
283
283
  @description "Row field the agenda list groups its day sections by. Rebound hosts point this at their own timestamp column (e.g. startTime, scheduledAt)."
284
284
  @synonyms "group field, section field, day field"
285
285
  @tier "presentation"
286
+ searchField : string = "name"
287
+ @label "Which column does the search box match against?"
288
+ @description "Name the field on this entity the search box's str/includes filter matches against. Declared, never inferred: an entity with no `name` column must set this to a real field (e.g. title, description) or the search box can never match a row."
289
+ @synonyms "search column, search on field, match field, search key"
290
+ @tier "policy"
286
291
  bodySearch : boolean = false
287
292
  @label "Show the calendar's own search box?"
288
293
  @description "Embeds a title search box in the toolbar above the calendar body (all three calendarLook trees). Defaults false: std-calendar has never had a search box, so an untouched consumer's surface is unchanged; the primary path is composing std-search beside this atom and wiring XSearch.SEARCH -> REFETCH_QUERY. Set true only for a standalone calendar with no page-level search affordance."
@@ -256,6 +256,8 @@ orbital EventLogOrbital {
256
256
  limit: @config.pageSize
257
257
  offset: ["*", ["-", ?page, 1], @config.pageSize]
258
258
  })
259
+ EventLogLoadFailed -> viewing
260
+ (notify error (str/concat "Couldn't refresh the event log — " ?error))
259
261
  EventLogLoaded -> viewing
260
262
  (set @entity.filterChips (array/prepend (array/map @config.kindOptions (fn k {
261
263
  icon: (object/get @k icon circle)
@@ -160,7 +160,7 @@ orbital GalleryItemOrbital {
160
160
  REFETCH_QUERY -> browsing
161
161
  (fetch GalleryItem {
162
162
  emit: { failure: GalleryItemLoadFailed, success: GalleryItemLoaded }
163
- filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm))
163
+ filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity @config.searchField) ?searchTerm))
164
164
  limit: @config.pageSize
165
165
  offset: 0
166
166
  })
@@ -177,6 +177,8 @@ orbital GalleryItemOrbital {
177
177
  limit: @config.pageSize
178
178
  offset: ["*", ["-", ?page, 1], @config.pageSize]
179
179
  })
180
+ GalleryItemLoadFailed -> browsing
181
+ (notify error (str/concat "Couldn't refresh the gallery — " ?error))
180
182
  GalleryItemLoaded -> browsing
181
183
  (render-ui main {
182
184
  children: [{
@@ -360,6 +362,11 @@ orbital GalleryItemOrbital {
360
362
  @description "Entity field holding the image URL shown in the lightbox for the selected item"
361
363
  @synonyms "image url field, thumbnail field, src field"
362
364
  @tier "presentation"
365
+ searchField : string = "name"
366
+ @label "Which column does the search box match against?"
367
+ @description "Name the field on this entity the search box's str/includes filter matches against. Declared, never inferred: an entity with no `name` column must set this to a real field (e.g. title, caption) or the search box can never match a row."
368
+ @synonyms "search column, search on field, match field, search key"
369
+ @tier "policy"
363
370
  bodySearch : boolean = false
364
371
  @label "Show the gallery's own search box?"
365
372
  @description "Embeds a search box above the gallery grid. Set false (the default) when the page already provides a search affordance (a toolbar Search molecule), so the surface shows one search box instead of two."
@@ -179,7 +179,7 @@ orbital ListItemOrbital {
179
179
  REFETCH_QUERY -> browsing
180
180
  (fetch ListItem {
181
181
  emit: { failure: ListItemLoadFailed, success: ListItemLoaded }
182
- filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm))
182
+ filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity @config.searchField) ?searchTerm))
183
183
  })
184
184
  REFETCH_FILTER -> browsing
185
185
  (fetch ListItem {
@@ -193,6 +193,8 @@ orbital ListItemOrbital {
193
193
  limit: @config.pageSize
194
194
  offset: ["*", ["-", ?page, 1], @config.pageSize]
195
195
  })
196
+ ListItemLoadFailed -> browsing
197
+ (notify error (str/concat "Couldn't refresh the list — " ?error))
196
198
  ListItemLoaded -> browsing
197
199
  (render-ui main {
198
200
  children: [{
@@ -354,6 +356,11 @@ orbital ListItemOrbital {
354
356
  }
355
357
 
356
358
  config {
359
+ searchField : string = "name"
360
+ @label "Which column does the search box match against?"
361
+ @description "Name the field on this entity the search box's str/includes filter matches against. Declared, never inferred: an entity with no `name` column must set this to a real field (e.g. title, label) or the search box can never match a row."
362
+ @synonyms "search column, search on field, match field, search key"
363
+ @tier "policy"
357
364
  bodySearch : boolean = false
358
365
  @label "Show the list's own search box?"
359
366
  @description "Embeds a search box above the grid. Set true only when the page has no other search affordance (e.g. no page-level std-search), so the surface shows one search box instead of two. False is the default — this atom has never had a search box (0 consumers today)."
@@ -145,7 +145,7 @@ orbital SelectableItemOrbital {
145
145
  REFETCH_QUERY -> idle
146
146
  (fetch SelectableItem {
147
147
  emit: { failure: SelectableItemLoadFailed, success: SelectableItemLoaded }
148
- filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm))
148
+ filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity @config.searchField) ?searchTerm))
149
149
  })
150
150
  REFETCH_FILTER -> idle
151
151
  (fetch SelectableItem {
@@ -166,6 +166,8 @@ orbital SelectableItemOrbital {
166
166
  limit: @config.pageSize
167
167
  offset: ["*", ["-", ?page, 1], @config.pageSize]
168
168
  })
169
+ SelectableItemLoadFailed -> idle
170
+ (notify error (str/concat "Couldn't refresh the list — " ?error))
169
171
  SelectableItemLoaded -> idle
170
172
  (render-ui main {
171
173
  children: [{
@@ -429,6 +431,11 @@ orbital SelectableItemOrbital {
429
431
  @label "Table look"
430
432
  @description "Layer 2 visual treatment for the data table rendered by this atom."
431
433
  @tier "presentation"
434
+ searchField : string = "name"
435
+ @label "Which column does the search box match against?"
436
+ @description "Name the field on this entity the search box's str/includes filter matches against. Declared, never inferred: an entity with no `name` column must set this to a real field (e.g. title, label) or the search box can never match a row."
437
+ @synonyms "search column, search on field, match field, search key"
438
+ @tier "policy"
432
439
  bodySearch : boolean = false
433
440
  @label "Show the pick-list's own search box?"
434
441
  @description "Embeds a search box above the pick-list. Set true only when the page has no other search affordance (e.g. no page-level std-search), so the surface shows one search box instead of two. False is the default — this atom has never had a search box (0 consumers today)."
@@ -35,6 +35,7 @@ orbital TagStripOrbital {
35
35
  ;; Pre-scope paint: the store is warm but no record is open yet.
36
36
  TagStripOptions -> idle
37
37
  TagStripLoadFailed -> idle
38
+ (notify error (str/concat "Couldn't load tags — " ?error))
38
39
  SHOW_TAG_STRIP -> loading
39
40
  (set @entity.docId ?id)
40
41
  (set @entity.docTagIds (array/map ?tagIds (fn t (str/default (object/get @t id) @t))))
@@ -342,6 +342,22 @@ orbital TagTaxonomyOrbital {
342
342
  type: stack
343
343
  })
344
344
  (emit LEVEL_RELOAD { tagId: @entity.id })
345
+ CLOSE -> loading
346
+ (render-ui modal null)
347
+ (render-ui main {
348
+ align: center
349
+ children: [{ type: spinner }, {
350
+ color: muted
351
+ content: "Loading…"
352
+ type: typography
353
+ variant: caption
354
+ }]
355
+ className: py-12
356
+ direction: vertical
357
+ gap: md
358
+ type: stack
359
+ })
360
+ (emit LEVEL_RELOAD { tagId: @entity.id })
345
361
  ;; Refetch the level the new tag landed on — its own parentId names it.
346
362
  TagCreated -> loading
347
363
  (render-ui modal null)
@@ -444,6 +444,42 @@ orbital WizardOrbital {
444
444
  }
445
445
 
446
446
  state completed {
447
+ WizardSaved -> completed
448
+ (render-ui main {
449
+ align: center
450
+ children: [{
451
+ name: check-circle
452
+ size: lg
453
+ type: icon
454
+ }, {
455
+ align: center
456
+ content: Complete
457
+ type: typography
458
+ variant: h2
459
+ }, {
460
+ align: center
461
+ color: muted
462
+ content: @entity.completionMessage
463
+ type: typography
464
+ variant: body
465
+ }, {
466
+ allowNavigation: false
467
+ currentStep: @entity.totalSteps
468
+ steps: @entity.wizardSteps
469
+ type: wizard-progress
470
+ }, {
471
+ action: RESTART
472
+ icon: rotate-ccw
473
+ label: "Start a new wizard"
474
+ type: button
475
+ variant: secondary
476
+ }]
477
+ direction: vertical
478
+ gap: lg
479
+ type: stack
480
+ })
481
+ WizardSaveFailed -> completed
482
+ (notify error (str/concat "Couldn't save the wizard — " ?error))
447
483
  RESTART -> loading
448
484
  (set @entity.currentStepIndex 0)
449
485
  (set @entity.completionMessage "")
@@ -9,7 +9,7 @@ orbital BadgeOrbital {
9
9
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
10
10
  variant : string
11
11
  dimension : "2d" | "3d"
12
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
12
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
13
13
  atlas : asset
14
14
  sprite : string
15
15
  name : string
@@ -9,7 +9,7 @@ orbital ButtonOrbital {
9
9
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
10
10
  variant : string
11
11
  dimension : "2d" | "3d"
12
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
12
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
13
13
  atlas : asset
14
14
  sprite : string
15
15
  name : string
@@ -3,6 +3,7 @@ app ui-checkbox "1.0.0"
3
3
  orbital CheckboxOrbital {
4
4
  entity CheckboxItem [runtime] {
5
5
  id : string!
6
+ checked : boolean @intrinsic
6
7
  }
7
8
 
8
9
  trait CheckboxRender -> @rebindable CheckboxItem [interaction, instance] {
@@ -10,9 +11,20 @@ orbital CheckboxOrbital {
10
11
 
11
12
  state idle {
12
13
  INIT -> idle
14
+ (set @entity.checked @config.checked)
13
15
  (render-ui main {
14
16
  className: @config.className
15
- checked: @config.checked
17
+ checked: @entity.checked
18
+ defaultChecked: @config.defaultChecked
19
+ label: @config.label
20
+ onChange: @config.onChange
21
+ type: checkbox
22
+ })
23
+ CHANGE -> idle
24
+ (set @entity.checked ?checked)
25
+ (render-ui main {
26
+ className: @config.className
27
+ checked: @entity.checked
16
28
  defaultChecked: @config.defaultChecked
17
29
  label: @config.label
18
30
  onChange: @config.onChange
@@ -21,11 +33,19 @@ orbital CheckboxOrbital {
21
33
  }
22
34
 
23
35
  emits {
24
- @config.onChange -> external { }
36
+ @config.onChange -> external {
37
+ checked : boolean!
38
+ }
25
39
  @description "onChange handler or declarative event key for trait dispatch"
26
40
  @tier "essential"
27
41
  }
28
42
 
43
+ listens {
44
+ CHANGE {
45
+ checked : boolean!
46
+ }
47
+ }
48
+
29
49
  config {
30
50
  className : string
31
51
  @label "Class Name"
@@ -9,7 +9,7 @@ orbital GameIconOrbital {
9
9
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
10
10
  variant : string
11
11
  dimension : "2d" | "3d"
12
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
12
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
13
13
  atlas : asset
14
14
  sprite : string
15
15
  name : string
@@ -46,10 +46,14 @@ orbital SelectOrbital {
46
46
  }
47
47
  @description "Declarative event name for trait dispatch — emits `{ value }` on selection commit (same gestures as `onChange`)."
48
48
  @tier "essential"
49
- @config.onChange -> external { }
49
+ @config.onChange -> external {
50
+ value : string!
51
+ }
50
52
  @description "onChange handler (native ChangeEvent) or declarative event key for trait dispatch"
51
53
  @tier "essential"
52
- @config.onValueChange -> external { }
54
+ @config.onValueChange -> external {
55
+ value : string!
56
+ }
53
57
  @description "Value-based change: a React callback (internal use) OR a declarative event key that emits `{ value }` on the bus (render-ui / lolo authoring). Mirrors the `onChange` handler|event convention so it's an event-emitting prop, not a bare callback."
54
58
  @tier "essential"
55
59
  }
@@ -25,7 +25,9 @@ orbital TextareaOrbital {
25
25
  @config.action -> external { }
26
26
  @description "Declarative event name for trait dispatch"
27
27
  @tier "essential"
28
- @config.onChange -> external { }
28
+ @config.onChange -> external {
29
+ value : string!
30
+ }
29
31
  @description "onChange handler or declarative event key for trait dispatch"
30
32
  @tier "essential"
31
33
  }
@@ -89,7 +89,7 @@ orbital CommandPaletteOrbital {
89
89
  @label "On Open Change"
90
90
  @description "Called to open/close the overlay (Escape, overlay click, or a selection)"
91
91
  @tier "presentation"
92
- commands : [CommandPaletteCommandsItem] = [{ id: "Id", label: "Label", icon: "circle", shortcut: "Shortcut", keywords: ["Item", "Item 2"], group: "Group", disabled: false, action: "INIT" }, { id: "Id 2", label: "Label 2", icon: "circle", shortcut: "Shortcut 2", keywords: ["Item", "Item 2"], group: "Group 2", disabled: true, action: "INIT" }]
92
+ commands : [CommandPaletteCommandsItem] = []
93
93
  @label "Commands"
94
94
  @description "Commands listed in the palette, filtered as the user types"
95
95
  @tier "presentation"
@@ -32,7 +32,7 @@ orbital FloatingToolbarOrbital {
32
32
  }
33
33
 
34
34
  config {
35
- items : [FloatingToolbarItemsItem] = [{ id: "Id", icon: "circle", label: "Label", action: "INIT", active: false, disabled: false, testId: "Test Id" }, { id: "Id 2", icon: "circle", label: "Label 2", action: "INIT", active: true, disabled: true, testId: "Test Id 2" }]
35
+ items : [FloatingToolbarItemsItem] = []
36
36
  @label "Items"
37
37
  @description "Tool items rendered as icon buttons"
38
38
  @tier "presentation"