@almadar/std 16.210.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.
- package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +5 -2
- package/behaviors/lolo/infra/atoms/std-cache-aside.lolo +6 -0
- package/behaviors/lolo/infra/atoms/std-calendar-sync.lolo +8 -5
- package/behaviors/lolo/infra/atoms/std-cascade-on-delete.lolo +8 -1
- package/behaviors/lolo/infra/atoms/std-circuit-breaker.lolo +5 -3
- package/behaviors/lolo/infra/atoms/std-cross-reference.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-data-erasure.lolo +3 -0
- package/behaviors/lolo/infra/atoms/std-lifecycle.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-migration-job.lolo +12 -0
- package/behaviors/lolo/infra/atoms/std-mod-queue.lolo +1 -0
- package/behaviors/lolo/infra/atoms/std-notification-center.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +5 -0
- package/behaviors/lolo/infra/atoms/std-reminder-scheduler.lolo +2 -0
- package/behaviors/lolo/infra/atoms/std-status-lifecycle.lolo +1 -0
- package/behaviors/lolo/ml/atoms/std-ml-classify.lolo +1 -0
- package/behaviors/lolo/ml/atoms/std-ml-infer.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-board.lolo +6 -0
- package/behaviors/lolo/ui/core/atoms/std-browse.lolo +10 -1
- package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +6 -1
- package/behaviors/lolo/ui/core/atoms/std-confirmation.lolo +2 -0
- package/behaviors/lolo/ui/core/atoms/std-esign-request.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +2 -0
- package/behaviors/lolo/ui/core/atoms/std-gallery.lolo +8 -1
- package/behaviors/lolo/ui/core/atoms/std-graphs.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-list.lolo +8 -1
- package/behaviors/lolo/ui/core/atoms/std-modal.lolo +3 -1
- package/behaviors/lolo/ui/core/atoms/std-selection.lolo +8 -1
- package/behaviors/lolo/ui/core/atoms/std-stats.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-step-flow.lolo +4 -3
- package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +17 -4
- package/behaviors/lolo/ui/core/atoms/std-thread.lolo +33 -30
- package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-wizard.lolo +36 -0
- package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-button.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-checkbox.lolo +22 -2
- package/behaviors/lolo/ui/core/atoms/ui-game-icon.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-radio.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-range-slider.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-select.lolo +6 -2
- package/behaviors/lolo/ui/core/atoms/ui-switch.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-text-highlight.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +3 -1
- package/behaviors/lolo/ui/core/atoms/ui-time-slot-cell.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-code-block.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-command-palette.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-date-range-picker.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-filter-group.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-floating-toolbar.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-number-stepper.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-pagination.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-popover.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-relation-select.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-rich-text-editor.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-search-input.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-sidebar.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-star-rating.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-wizard-navigation.lolo +2 -2
- package/behaviors/lolo/ui/core/organisms/ui-split-pane.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +6 -0
- package/behaviors/lolo/ui/game/atoms/ui-action-palette.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-action-tile.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-dialogue-bubble.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-draw-fx-layer.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-draw-skinned-mesh.lolo +131 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-sprite-layer.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-game-audio-toggle.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +5 -5
- package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-health-bar.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-score-display.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-sequence-bar.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +5 -5
- package/behaviors/lolo/ui/game/organisms/std-arcade-board-3d.lolo +10 -10
- package/behaviors/lolo/ui/game/organisms/std-crew-board-2d.lolo +10 -10
- package/behaviors/lolo/ui/game/organisms/std-dungeon-board-2d.lolo +36 -36
- package/behaviors/lolo/ui/game/organisms/std-market-board-3d.lolo +36 -36
- package/behaviors/lolo/ui/game/organisms/std-objective-board-3d.lolo +34 -34
- package/behaviors/lolo/ui/game/organisms/std-survival-board-3d.lolo +10 -10
- package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +12 -12
- package/behaviors/lolo/ui/game/organisms/std-tactics-board-3d.lolo +12 -12
- package/behaviors/lolo/ui/game/organisms/std-worldmap-board-2d.lolo +20 -20
- package/behaviors/registry/infra/atoms/std-approval-gate.orb +76 -27
- package/behaviors/registry/infra/atoms/std-cache-aside.orb +76 -32
- package/behaviors/registry/infra/atoms/std-calendar-sync.orb +51 -0
- package/behaviors/registry/infra/atoms/std-cascade-on-delete.orb +48 -0
- package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +43 -14
- package/behaviors/registry/infra/atoms/std-cross-reference.orb +41 -15
- package/behaviors/registry/infra/atoms/std-data-erasure.orb +52 -0
- package/behaviors/registry/infra/atoms/std-lifecycle.orb +36 -0
- package/behaviors/registry/infra/atoms/std-migration-job.orb +108 -0
- package/behaviors/registry/infra/atoms/std-mod-queue.orb +20 -0
- package/behaviors/registry/infra/atoms/std-notification-center.orb +88 -24
- package/behaviors/registry/infra/atoms/std-notify-on-event.orb +82 -6
- package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +36 -0
- package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +20 -0
- package/behaviors/registry/ml/atoms/std-ml-classify.orb +18 -0
- package/behaviors/registry/ml/atoms/std-ml-infer.orb +18 -0
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +20 -0
- package/behaviors/registry/ui/core/atoms/std-board.orb +58 -0
- package/behaviors/registry/ui/core/atoms/std-browse.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-calendar.orb +9 -1
- package/behaviors/registry/ui/core/atoms/std-confirmation.orb +44 -18
- package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +44 -18
- package/behaviors/registry/ui/core/atoms/std-esign-request.orb +19 -8
- package/behaviors/registry/ui/core/atoms/std-event-log.orb +26 -0
- package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +20 -9
- package/behaviors/registry/ui/core/atoms/std-gallery.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-graphs.orb +1 -0
- package/behaviors/registry/ui/core/atoms/std-list.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-modal.orb +52 -24
- package/behaviors/registry/ui/core/atoms/std-selection.orb +35 -1
- package/behaviors/registry/ui/core/atoms/std-stats.orb +1 -0
- package/behaviors/registry/ui/core/atoms/std-step-flow.orb +0 -3
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +20 -0
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +58 -9
- package/behaviors/registry/ui/core/atoms/std-thread.orb +134 -40
- package/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -0
- package/behaviors/registry/ui/core/atoms/std-wizard.orb +77 -0
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +4 -1
- package/behaviors/registry/ui/core/atoms/ui-button.orb +4 -1
- package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +78 -2
- package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +4 -1
- package/behaviors/registry/ui/core/atoms/ui-radio.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-range-slider.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-select.orb +28 -0
- package/behaviors/registry/ui/core/atoms/ui-switch.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-text-highlight.orb +1 -0
- package/behaviors/registry/ui/core/atoms/ui-textarea.orb +14 -0
- package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-code-block.orb +2 -0
- package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +2 -28
- package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +2 -0
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +2 -0
- package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +1 -20
- package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +1 -14
- package/behaviors/registry/ui/core/molecules/ui-menu.orb +1 -24
- package/behaviors/registry/ui/core/molecules/ui-number-stepper.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-pagination.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-popover.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-rich-text-editor.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-search-input.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-star-rating.orb +1 -0
- package/behaviors/registry/ui/core/molecules/ui-tabs.orb +8 -2
- package/behaviors/registry/ui/core/molecules/ui-wizard-navigation.orb +2 -0
- package/behaviors/registry/ui/core/organisms/ui-split-pane.orb +1 -0
- package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +44 -0
- package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-control-button.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +697 -0
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +20 -5
- package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-score-display.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +4 -1
- package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +8 -2
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +9 -2
- package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +10 -30
- package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +10 -30
- package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +36 -108
- package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +36 -108
- package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +34 -102
- package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +10 -30
- package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +12 -36
- package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +12 -36
- package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +20 -60
- package/dist/behaviors/exports-reader.js +3136 -2291
- package/dist/behaviors/functions/index.d.ts +148 -40
- package/dist/behaviors/functions/index.js +3134 -2290
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +3137 -2292
- package/dist/behaviors/query.js +3136 -2291
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +25 -21
- package/dist/behaviors-registry.json +2296 -1209
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3137 -2292
- package/dist/knob-embeddings.hash.json +3 -3
- package/dist/knob-embeddings.json +1 -1
- package/dist/registry/factory-signatures.json +1 -1
- 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)
|
|
@@ -136,7 +137,9 @@ orbital ApprovalGateOrbital {
|
|
|
136
137
|
(persist update ApprovalRequest @entity {
|
|
137
138
|
emit: { failure: ApprovalRequestReviewFailed, success: ApprovalRequestReviewed }
|
|
138
139
|
})
|
|
139
|
-
(notify "Approval could not be applied — the request was reopened."
|
|
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"]
|
|
@@ -282,7 +285,7 @@ orbital ApprovalGateOrbital {
|
|
|
282
285
|
(persist update ApprovalRequest @entity {
|
|
283
286
|
emit: { failure: ApprovalRequestReviewFailed, success: ApprovalRequestReviewed }
|
|
284
287
|
})
|
|
285
|
-
(notify "Approval could not be applied — the request was reopened."
|
|
288
|
+
(notify error "Approval could not be applied — the request was reopened.")
|
|
286
289
|
CLOSE -> idle
|
|
287
290
|
(render-ui @config.reviewSlot null)
|
|
288
291
|
}
|
|
@@ -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 {
|
|
@@ -7,11 +7,11 @@ orbital CalendarSyncOrbital {
|
|
|
7
7
|
|
|
8
8
|
entity CalendarSyncRun [persistent: calendarSyncState] {
|
|
9
9
|
id : string!
|
|
10
|
-
syncToken : string @description "Scratch: Google incremental-sync token from the last listEvents; in-memory per instance — a restart falls back to a full list." @synonyms "sync cursor, next token" = ""
|
|
11
|
-
lastSyncedAt : number @description "When the last full push+pull cycle completed; 0 = never." @synonyms "last sync time" = 0
|
|
12
|
-
headId : string @description "Scratch: id of the target row the push loop is currently exporting." @synonyms "cursor, current row" = ""
|
|
13
|
-
pending : [RemoteEvent] @description "Scratch: remote events remaining in the current pull-upsert loop." @synonyms "pull queue, remaining events" = []
|
|
14
|
-
lastError : string @description "Last sync failure detail; blank = none." @synonyms "sync error, failure" = ""
|
|
10
|
+
syncToken : string @intrinsic @description "Scratch: Google incremental-sync token from the last listEvents; in-memory per instance — a restart falls back to a full list." @synonyms "sync cursor, next token" = ""
|
|
11
|
+
lastSyncedAt : number @intrinsic @description "When the last full push+pull cycle completed; 0 = never." @synonyms "last sync time" = 0
|
|
12
|
+
headId : string @intrinsic @description "Scratch: id of the target row the push loop is currently exporting." @synonyms "cursor, current row" = ""
|
|
13
|
+
pending : [RemoteEvent] @intrinsic @description "Scratch: remote events remaining in the current pull-upsert loop." @synonyms "pull queue, remaining events" = []
|
|
14
|
+
lastError : string @intrinsic @description "Last sync failure detail; blank = none." @synonyms "sync error, failure" = ""
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
entity CalendarEvent [persistent: calendarEvents] {
|
|
@@ -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 {
|
|
@@ -18,7 +18,7 @@ orbital CascadeOnDeleteOrbital {
|
|
|
18
18
|
parentId : string @description "Identifier of the deleted parent the cascade is clearing dependents for." @synonyms "parent, source, origin" = ""
|
|
19
19
|
parentEntity : string @description "Identifies the parent entity of the cascade." @synonyms "related entity, source entity, parent" = ""
|
|
20
20
|
rowCount : number @description "The number of rows deleted by the cascade." @synonyms "count, size, quantity" = 0
|
|
21
|
-
headId : string @description "Scratch: id of the dependent row the loop is currently deleting." @synonyms "current id, cursor" = ""
|
|
21
|
+
headId : string @intrinsic @description "Scratch: id of the dependent row the loop is currently deleting." @synonyms "current id, cursor" = ""
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
trait CascadeOnDeleteGate -> CascadeLog [lifecycle, instance, cascade-delete] {
|
|
@@ -43,11 +43,18 @@ orbital CascadeOnDeleteOrbital {
|
|
|
43
43
|
})
|
|
44
44
|
DepsLoaded -> idle when ["=", (array/len (array/filter ?data (fn row ["=", (object/get @row @config.foreignKeyField), @entity.parentId]))), 0]
|
|
45
45
|
(emit CascadeCompleted { parentId: @entity.parentId })
|
|
46
|
+
(persist create CascadeLog {
|
|
47
|
+
parentId: @entity.parentId
|
|
48
|
+
parentEntity: @entity.parentEntity
|
|
49
|
+
rowCount: @entity.rowCount
|
|
50
|
+
})
|
|
46
51
|
CascadeStepped -> scanning
|
|
52
|
+
(set @entity.rowCount (+ @entity.rowCount 1))
|
|
47
53
|
(fetch @config.dependentEntity {
|
|
48
54
|
emit: { failure: CascadeFailed, success: DepsLoaded }
|
|
49
55
|
})
|
|
50
56
|
CascadeFailed -> idle
|
|
57
|
+
(notify error (str/concat "Couldn't cascade the delete — " ?error))
|
|
51
58
|
}
|
|
52
59
|
|
|
53
60
|
emits {
|
|
@@ -21,9 +21,9 @@ orbital ServiceNodeOrbital {
|
|
|
21
21
|
description : string @description "A textual explanation of the service node's function." @synonyms "explanation, details, notes, information"
|
|
22
22
|
status : "active" | "inactive" | "pending" @description "Current operational state of the component." @synonyms "state, condition, operationalStatus" = active
|
|
23
23
|
createdAt : string
|
|
24
|
-
failureCount : number @description "The number of times the circuit breaker has failed." @synonyms "error count, failures, error occurrences" = 0
|
|
25
|
-
successCount : number @description "Number of successful operations." @synonyms "successes, hits, completions" = 0
|
|
26
|
-
threshold : number @description "Maximum value before triggering an action." @synonyms "limit, cap, boundary" = 5
|
|
24
|
+
failureCount : number @intrinsic @description "The number of times the circuit breaker has failed." @synonyms "error count, failures, error occurrences" = 0
|
|
25
|
+
successCount : number @intrinsic @description "Number of successful operations." @synonyms "successes, hits, completions" = 0
|
|
26
|
+
threshold : number @intrinsic @description "Maximum value before triggering an action." @synonyms "limit, cap, boundary" = 5
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
trait ShieldIcon = Icon.traits.IconRender -> ServiceNode {
|
|
@@ -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 {
|
|
@@ -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
|
|
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
|
|
@@ -146,6 +146,10 @@ orbital BrowseItemOrbital {
|
|
|
146
146
|
(if ["=", @config.browseLook, triage]
|
|
147
147
|
(render-ui main @config.triageBodyContent)
|
|
148
148
|
(render-ui main @config.bodyContent))))))
|
|
149
|
+
;; A refetch keeps the populated body on screen; only the failure
|
|
150
|
+
;; itself has to reach the user.
|
|
151
|
+
BrowseItemLoadFailed -> browsing
|
|
152
|
+
(notify error (str/concat "Couldn't refresh the list — " ?error))
|
|
149
153
|
}
|
|
150
154
|
|
|
151
155
|
state error {
|
|
@@ -372,6 +376,11 @@ orbital BrowseItemOrbital {
|
|
|
372
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."
|
|
373
377
|
@synonyms "row checkboxes, multi-select, bulk select, selection column"
|
|
374
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"
|
|
375
384
|
bodySearch : boolean = true
|
|
376
385
|
@label "Show the list's own search box?"
|
|
377
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
|
|
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."
|
|
@@ -28,6 +28,8 @@ orbital ConfirmActionOrbital {
|
|
|
28
28
|
(fetch ConfirmAction {
|
|
29
29
|
emit: { failure: ConfirmActionLoadFailed, success: ConfirmActionLoaded }
|
|
30
30
|
})
|
|
31
|
+
ConfirmActionLoadFailed -> idle
|
|
32
|
+
(notify error (str/concat "Couldn't load the item to confirm — " ?error))
|
|
31
33
|
;; Guard: REQUEST is rejected if no `row` payload was provided.
|
|
32
34
|
;; "Confirm an action against X" is meaningless without X — a
|
|
33
35
|
;; confirmation dialog with no entity to display is a precondition
|
|
@@ -99,10 +99,10 @@ orbital ESignRequestOrbital {
|
|
|
99
99
|
state browsing {
|
|
100
100
|
SEND_REQUEST -> browsing
|
|
101
101
|
(set @entity.id ?id)
|
|
102
|
-
(notify "Signature request sent"
|
|
102
|
+
(notify success "Signature request sent")
|
|
103
103
|
REVOKE_REQUEST -> browsing
|
|
104
104
|
(set @entity.id ?id)
|
|
105
|
-
(notify "Signature request revoked"
|
|
105
|
+
(notify info "Signature request revoked")
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
state error {
|
|
@@ -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
|
|
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."
|
|
@@ -8,7 +8,7 @@ orbital GraphItemOrbital {
|
|
|
8
8
|
|
|
9
9
|
entity GraphItem [runtime] {
|
|
10
10
|
id : string!
|
|
11
|
-
chartData : [ChartPoint] @description "The data points used to render the chart." @synonyms "data, values, points" = []
|
|
11
|
+
chartData : [ChartPoint] @intrinsic @description "The data points used to render the chart." @synonyms "data, values, points" = []
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
trait GraphItemGraph -> @rebindable GraphItem [interaction, instance] {
|
|
@@ -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
|
|
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)."
|
|
@@ -36,6 +36,8 @@ orbital ModalRecordOrbital {
|
|
|
36
36
|
(fetch ModalRecord {
|
|
37
37
|
emit: { failure: ModalRecordLoadFailed, success: ModalRecordLoaded }
|
|
38
38
|
})
|
|
39
|
+
ModalRecordLoadFailed -> closed
|
|
40
|
+
(notify error (str/concat "Couldn't load the record — " ?error))
|
|
39
41
|
;; stash only — a SEED never opens anything; OPEN reads it on demand
|
|
40
42
|
SEED -> closed
|
|
41
43
|
(set @entity.seedRow (object/merge ?row {}))
|
|
@@ -78,7 +80,7 @@ orbital ModalRecordOrbital {
|
|
|
78
80
|
(set @entity.seedRow (object/merge ?row {}))
|
|
79
81
|
CLOSE -> closed
|
|
80
82
|
(render-ui @config.detailSlot null)
|
|
81
|
-
(notify Cancelled
|
|
83
|
+
(notify info Cancelled)
|
|
82
84
|
SAVE -> closed
|
|
83
85
|
(render-ui @config.detailSlot null)
|
|
84
86
|
}
|
|
@@ -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
|
|
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)."
|
|
@@ -15,7 +15,7 @@ orbital StatsItemOrbital {
|
|
|
15
15
|
|
|
16
16
|
entity StatsItem [runtime] {
|
|
17
17
|
id : string!
|
|
18
|
-
cards : [StatCard] @description "A collection of statistical cards to display." @synonyms "statistics, items, displays" = []
|
|
18
|
+
cards : [StatCard] @intrinsic @description "A collection of statistical cards to display." @synonyms "statistics, items, displays" = []
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
trait StatsItemStats -> @rebindable StatsItem [interaction, instance] {
|
|
@@ -16,7 +16,8 @@ orbital StepFlowOrbital {
|
|
|
16
16
|
entity StepFlowView [runtime] {
|
|
17
17
|
id : string!
|
|
18
18
|
wizardSteps : [WizardStep] @intrinsic = []
|
|
19
|
-
|
|
19
|
+
;; Not @intrinsic: std-approval-chain's ApprovalRequest persists this as chain position.
|
|
20
|
+
currentStepIndex : number = 0
|
|
20
21
|
totalSteps : number @intrinsic = 0
|
|
21
22
|
currentStepLabel : string @intrinsic = ""
|
|
22
23
|
currentStepDescription : string @intrinsic = ""
|
|
@@ -26,8 +27,8 @@ orbital StepFlowOrbital {
|
|
|
26
27
|
primaryActionLabel : string @intrinsic = "Approve & Continue"
|
|
27
28
|
primaryActionVariant : "primary" | "success" @intrinsic = primary
|
|
28
29
|
primaryActionIcon : string @intrinsic = chevron-right
|
|
29
|
-
finalStatus : "approved" | "rejected" | "escalated" | ""
|
|
30
|
-
rejectionReason : string
|
|
30
|
+
finalStatus : "approved" | "rejected" | "escalated" | "" = ""
|
|
31
|
+
rejectionReason : string = ""
|
|
31
32
|
errorMessage : string @intrinsic = ""
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -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))))
|