@almadar/std 16.150.0 → 16.152.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/ui/core/atoms/std-app-search.lolo +18 -0
- package/behaviors/lolo/ui/core/atoms/std-board.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-browse.lolo +39 -10
- package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +13 -1
- package/behaviors/lolo/ui/core/atoms/std-multi-party-flow.lolo +8 -10
- package/behaviors/lolo/ui/core/atoms/std-stats.lolo +3 -0
- package/behaviors/lolo/ui/core/atoms/ui-typography.lolo +6 -1
- package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +4 -2
- package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +27 -1
- package/behaviors/lolo/ui/core/molecules/ui-graph-canvas.lolo +57 -0
- package/behaviors/lolo/ui/core/molecules/ui-simple-grid.lolo +2 -2
- package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +3 -1
- package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +4 -2
- package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +2 -0
- package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +3 -1
- package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +3 -1
- package/behaviors/lolo/ui/game/atoms/ui-draw-group.lolo +54 -0
- package/behaviors/lolo/ui/game/atoms/ui-draw-shape.lolo +6 -1
- package/behaviors/lolo/ui/game/atoms/ui-svg-draw-group.lolo +58 -0
- package/behaviors/lolo/ui/game/atoms/ui-svg-draw-shape.lolo +103 -0
- package/behaviors/lolo/ui/game/atoms/ui-svg-draw-text.lolo +58 -0
- package/behaviors/lolo/ui/game/molecules/ui-draw-shape-layer.lolo +3 -2
- package/behaviors/lolo/ui/game/molecules/ui-svg-draw-shape-layer.lolo +52 -0
- package/behaviors/lolo/ui/game/molecules/ui-svg-stage.lolo +98 -0
- package/behaviors/lolo/ui/learning/atoms/std-branching-logic.lolo +0 -28
- package/behaviors/registry/factory-signatures.json +2435 -782
- package/behaviors/registry/ui/core/atoms/std-app-search.orb +60 -0
- package/behaviors/registry/ui/core/atoms/std-board.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-browse.orb +242 -35
- package/behaviors/registry/ui/core/atoms/std-calendar.orb +25 -1
- package/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +8 -10
- package/behaviors/registry/ui/core/atoms/std-stats.orb +27 -0
- package/behaviors/registry/ui/core/atoms/ui-typography.orb +17 -1
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +39 -2
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +71 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +296 -0
- package/behaviors/registry/ui/core/molecules/ui-simple-grid.orb +0 -2
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +34 -1
- package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +49 -2
- package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +2 -0
- package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +54 -1
- package/behaviors/registry/ui/core/organisms/ui-timeline.orb +33 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +196 -0
- package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +9 -1
- package/behaviors/registry/ui/game/atoms/ui-svg-draw-group.orb +186 -0
- package/behaviors/registry/ui/game/atoms/ui-svg-draw-shape.orb +259 -0
- package/behaviors/registry/ui/game/atoms/ui-svg-draw-text.orb +195 -0
- package/behaviors/registry/ui/game/molecules/ui-draw-shape-layer.orb +9 -1
- package/behaviors/registry/ui/game/molecules/ui-svg-draw-shape-layer.orb +188 -0
- package/behaviors/registry/ui/game/molecules/ui-svg-stage.orb +362 -0
- package/behaviors/registry/ui/learning/atoms/std-branching-logic.orb +0 -34
- package/dist/behaviors/behaviors-embeddings.json +476 -452
- package/dist/behaviors/behaviors-registry.json +2814 -877
- package/dist/behaviors/exports-reader.js +143 -4
- package/dist/behaviors/functions/index.d.ts +33 -20
- package/dist/behaviors/functions/index.js +143 -4
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +143 -4
- package/dist/behaviors/knob-embeddings.json +1 -1
- package/dist/behaviors/query.js +143 -4
- package/dist/behaviors/registry/factory-signatures.json +2435 -782
- package/dist/behaviors/registry/ui/core/atoms/std-app-search.orb +60 -0
- package/dist/behaviors/registry/ui/core/atoms/std-board.orb +1 -1
- package/dist/behaviors/registry/ui/core/atoms/std-browse.orb +242 -35
- package/dist/behaviors/registry/ui/core/atoms/std-calendar.orb +25 -1
- package/dist/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +8 -10
- package/dist/behaviors/registry/ui/core/atoms/std-stats.orb +27 -0
- package/dist/behaviors/registry/ui/core/atoms/ui-typography.orb +17 -1
- package/dist/behaviors/registry/ui/core/molecules/ui-data-grid.orb +39 -2
- package/dist/behaviors/registry/ui/core/molecules/ui-data-list.orb +71 -1
- package/dist/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +296 -0
- package/dist/behaviors/registry/ui/core/molecules/ui-simple-grid.orb +0 -2
- package/dist/behaviors/registry/ui/core/molecules/ui-table-view.orb +34 -1
- package/dist/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +49 -2
- package/dist/behaviors/registry/ui/core/organisms/ui-entity-list.orb +2 -0
- package/dist/behaviors/registry/ui/core/organisms/ui-entity-table.orb +54 -1
- package/dist/behaviors/registry/ui/core/organisms/ui-timeline.orb +33 -1
- package/dist/behaviors/registry/ui/game/atoms/ui-draw-group.orb +196 -0
- package/dist/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +9 -1
- package/dist/behaviors/registry/ui/game/atoms/ui-svg-draw-group.orb +186 -0
- package/dist/behaviors/registry/ui/game/atoms/ui-svg-draw-shape.orb +259 -0
- package/dist/behaviors/registry/ui/game/atoms/ui-svg-draw-text.orb +195 -0
- package/dist/behaviors/registry/ui/game/molecules/ui-draw-shape-layer.orb +9 -1
- package/dist/behaviors/registry/ui/game/molecules/ui-svg-draw-shape-layer.orb +188 -0
- package/dist/behaviors/registry/ui/game/molecules/ui-svg-stage.orb +362 -0
- package/dist/behaviors/registry/ui/learning/atoms/std-branching-logic.orb +0 -34
- package/dist/behaviors-embeddings.json +476 -452
- package/dist/behaviors-registry.json +2814 -877
- package/dist/index.d.ts +1 -1
- package/dist/index.js +143 -4
- package/dist/knob-embeddings.json +1 -1
- package/dist/registry/factory-signatures.json +2435 -782
- package/package.json +3 -3
|
@@ -67,6 +67,15 @@ orbital AppSearchOrbital {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
state searching {
|
|
70
|
+
INIT -> idle
|
|
71
|
+
(set @entity.searchTerm "")
|
|
72
|
+
(fetch AppSearchTarget {})
|
|
73
|
+
(render-ui main {
|
|
74
|
+
type: stack
|
|
75
|
+
direction: vertical
|
|
76
|
+
gap: md
|
|
77
|
+
children: [@config.idleContent]
|
|
78
|
+
})
|
|
70
79
|
APP_SEARCH -> searching
|
|
71
80
|
(set @entity.searchTerm ?value)
|
|
72
81
|
(fetch AppSearchTarget {
|
|
@@ -135,6 +144,15 @@ orbital AppSearchOrbital {
|
|
|
135
144
|
}
|
|
136
145
|
|
|
137
146
|
state results {
|
|
147
|
+
INIT -> idle
|
|
148
|
+
(set @entity.searchTerm "")
|
|
149
|
+
(fetch AppSearchTarget {})
|
|
150
|
+
(render-ui main {
|
|
151
|
+
type: stack
|
|
152
|
+
direction: vertical
|
|
153
|
+
gap: md
|
|
154
|
+
children: [@config.idleContent]
|
|
155
|
+
})
|
|
138
156
|
APP_SEARCH -> searching
|
|
139
157
|
(set @entity.searchTerm ?value)
|
|
140
158
|
(fetch AppSearchTarget {
|
|
@@ -694,7 +694,7 @@ orbital BoardOrbital {
|
|
|
694
694
|
label: @config.cardStageBinding
|
|
695
695
|
size: sm
|
|
696
696
|
type: badge
|
|
697
|
-
variant:
|
|
697
|
+
variant: @col.variant
|
|
698
698
|
}, {
|
|
699
699
|
action: OPEN_CARD
|
|
700
700
|
actionPayload: { description: @config.cardDescriptionBinding, id: @config.cardIdBinding, row: @item, stage: @config.cardStageBinding, title: @config.cardTitleBinding }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
app std-browse "2.
|
|
1
|
+
app std-browse "2.5.0"
|
|
2
2
|
"std-browse as a Function — single primitive: data-grid. Owns the fetch + REFETCH (query/filter/page) state machine. Consumers configure fields/imageField/itemActions/cols/gap/variant; the atom renders the grid. Each `fields[]` entry accepts `{ name, label, variant }` plus optional `referenceEntity` + `displayField` to render a foreign-key column as the joined entity's display value (data-grid resolves @list[referenceEntity] at render time when both keys are present). `browseLook` (table default / dense / feed / gallery / master-detail / triage) selects one of six render bodies; dense/feed/gallery were folded in from std-browse-dense/-feed/-gallery (Phase 5.B); master-detail (split record view driven by the guarded VIEW/CLOSE self-transitions) and triage (inbox rows) were folded in 2026-07-26. Consumers retarget by setting browseLook."
|
|
3
3
|
type FieldSpec = { name : string!, label : string, variant : h3 | h4 | body | caption | badge | small | progress, icon : string, format : date | currency | number | boolean | percent, key : string, header : string }
|
|
4
4
|
type ItemAction = { label : string!, event : string, navigatesTo : string, variant : primary | secondary | ghost | danger, icon : string }
|
|
@@ -75,6 +75,7 @@ orbital BrowseItemOrbital {
|
|
|
75
75
|
INIT -> loading
|
|
76
76
|
(fetch BrowseItem {
|
|
77
77
|
emit: { failure: BrowseItemLoadFailed, success: BrowseItemLoaded }
|
|
78
|
+
filter: (and (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id]) (or ["=", @config.initialFilterField, ""] ["=", (object/get @entity @config.initialFilterField), @config.initialFilterValue]))
|
|
78
79
|
limit: @config.pageSize
|
|
79
80
|
offset: 0
|
|
80
81
|
})
|
|
@@ -96,13 +97,17 @@ orbital BrowseItemOrbital {
|
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
state browsing {
|
|
100
|
+
;; No skeleton repaint here, for the same reason REFETCH_* has none: from
|
|
101
|
+
;; a POPULATED body a skeleton unmounts the grid and flickers. First mount
|
|
102
|
+
;; is unaffected — `initial: loading` and `state loading`'s own INIT still
|
|
103
|
+
;; paint it; `browsing` is only reachable after a successful load.
|
|
99
104
|
INIT -> loading
|
|
100
105
|
(fetch BrowseItem {
|
|
101
106
|
emit: { failure: BrowseItemLoadFailed, success: BrowseItemLoaded }
|
|
107
|
+
filter: (and (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id]) (or ["=", @config.initialFilterField, ""] ["=", (object/get @entity @config.initialFilterField), @config.initialFilterValue]))
|
|
102
108
|
limit: @config.pageSize
|
|
103
109
|
offset: 0
|
|
104
110
|
})
|
|
105
|
-
(render-ui main { rows: 4, type: skeleton })
|
|
106
111
|
;; REFETCH_* stays in `browsing` and DOES NOT replace the data-grid
|
|
107
112
|
;; with a spinner. Replacing during search-as-you-type unmounts the
|
|
108
113
|
;; grid every keystroke and causes a visible flicker. The fetch fires
|
|
@@ -112,20 +117,21 @@ orbital BrowseItemOrbital {
|
|
|
112
117
|
REFETCH_QUERY -> browsing
|
|
113
118
|
(fetch BrowseItem {
|
|
114
119
|
emit: { failure: BrowseItemLoadFailed, success: BrowseItemLoaded }
|
|
115
|
-
filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm))
|
|
120
|
+
filter: (and (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id]) (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm)))
|
|
116
121
|
limit: @config.pageSize
|
|
117
122
|
offset: 0
|
|
118
123
|
})
|
|
119
124
|
REFETCH_FILTER -> browsing
|
|
120
125
|
(fetch BrowseItem {
|
|
121
126
|
emit: { failure: BrowseItemLoadFailed, success: BrowseItemLoaded }
|
|
122
|
-
filter: (or ["=", ?value, ""] ["=", (object/get @entity ?field), ?value])
|
|
127
|
+
filter: (and (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id]) (or ["=", ?value, ""] ["=", (object/get @entity ?field), ?value]))
|
|
123
128
|
limit: @config.pageSize
|
|
124
129
|
offset: 0
|
|
125
130
|
})
|
|
126
131
|
REFETCH_PAGE -> browsing
|
|
127
132
|
(fetch BrowseItem {
|
|
128
133
|
emit: { failure: BrowseItemLoadFailed, success: BrowseItemLoaded }
|
|
134
|
+
filter: (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id])
|
|
129
135
|
limit: @config.pageSize
|
|
130
136
|
offset: ["*", ["-", ?page, 1], @config.pageSize]
|
|
131
137
|
})
|
|
@@ -155,6 +161,7 @@ orbital BrowseItemOrbital {
|
|
|
155
161
|
INIT -> loading
|
|
156
162
|
(fetch BrowseItem {
|
|
157
163
|
emit: { failure: BrowseItemLoadFailed, success: BrowseItemLoaded }
|
|
164
|
+
filter: (and (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id]) (or ["=", @config.initialFilterField, ""] ["=", (object/get @entity @config.initialFilterField), @config.initialFilterValue]))
|
|
158
165
|
limit: @config.pageSize
|
|
159
166
|
offset: 0
|
|
160
167
|
})
|
|
@@ -288,8 +295,12 @@ orbital BrowseItemOrbital {
|
|
|
288
295
|
@tier "internal"
|
|
289
296
|
metaBinding : string = @item.createdAt
|
|
290
297
|
@label "Meta field binding"
|
|
291
|
-
@description "Binding path for the secondary meta slot (timestamp / category)."
|
|
298
|
+
@description "Binding path for the secondary meta slot (timestamp / category). Hosts binding a count or other non-date value should label it in the binding itself (e.g. (str/concat \"Vehicles: \" @item.vehicleCount)) and set metaFormat: none."
|
|
292
299
|
@tier "internal"
|
|
300
|
+
metaFormat : "none" | "date" | "time" | "datetime" | "number" = date
|
|
301
|
+
@label "Meta value format"
|
|
302
|
+
@description "Typography format for the feed meta slot — date by default so the createdAt binding renders human-readable instead of raw ISO; set none for non-date bindings."
|
|
303
|
+
@tier "presentation"
|
|
293
304
|
categoryBinding : string = @item.category
|
|
294
305
|
@label "Category field binding"
|
|
295
306
|
@description "Binding path for the category/tag slot."
|
|
@@ -337,6 +348,21 @@ orbital BrowseItemOrbital {
|
|
|
337
348
|
@description "Actions beyond this count collapse into a '⋯' overflow menu. Set 2–3 for dense tables."
|
|
338
349
|
@synonyms "inline actions limit, overflow threshold, max buttons per row"
|
|
339
350
|
@tier "presentation"
|
|
351
|
+
scopeField : string = ""
|
|
352
|
+
@label "Only show records owned by the signed-in user?"
|
|
353
|
+
@description "Name the field on this entity that holds the viewer's id (e.g. memberId, patientId, assignee). When set, the list loads ONLY rows whose that field equals @user.id — the 'my bookings' / 'my appointments' shape. Left blank the list loads every row, which is the default. Declared, never inferred: guessing the column from its name would silently scope the wrong one."
|
|
354
|
+
@synonyms "owner field, my records, only mine, only my own, scope to user, per-user list, mine only, owned by me"
|
|
355
|
+
@tier "policy"
|
|
356
|
+
initialFilterField : string = ""
|
|
357
|
+
@label "Which field does the first load filter on?"
|
|
358
|
+
@description "Name the field the INITIAL load filters on, paired with initialFilterValue. This is the detail half of a list-detail pair: a thread that must wait for a conversation to be picked sets the field to its parent key and leaves the value blank, so the first load matches nothing and the empty state shows instead of every record in the table. REFETCH_FILTER then supplies the real selection. Left blank the first load is unfiltered, which is the default."
|
|
359
|
+
@synonyms "initial filter, first load filter, wait for selection, detail pane filter, requires selection, start empty"
|
|
360
|
+
@tier "policy"
|
|
361
|
+
initialFilterValue : string = ""
|
|
362
|
+
@label "What value does the first load filter for?"
|
|
363
|
+
@description "The value initialFilterField must equal on the first load. Blank is meaningful: it matches only records whose field is itself blank, which for a detail pane is normally none — that is how a thread stays empty until its parent is selected."
|
|
364
|
+
@synonyms "initial filter value, first load value, default selection"
|
|
365
|
+
@tier "policy"
|
|
340
366
|
selectable : boolean = false
|
|
341
367
|
@label "Show row selection checkboxes?"
|
|
342
368
|
@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."
|
|
@@ -365,6 +391,11 @@ orbital BrowseItemOrbital {
|
|
|
365
391
|
@description "Field names shown in the detail panel when browseLook = master-detail; the first entry doubles as the pane title. Consumers overriding columns/fields should override this list to match their entity."
|
|
366
392
|
@synonyms "detail columns, record fields, detail pane fields"
|
|
367
393
|
@tier "presentation"
|
|
394
|
+
detailActions : json = [{ event: CLOSE, label: Close }]
|
|
395
|
+
@label "Master-detail record pane actions"
|
|
396
|
+
@description "Action buttons on the master-detail record pane (detail-panel `actions` descriptors: label/event/icon/variant). Consumers add their own record actions (Edit/Delete/…) alongside or instead of Close."
|
|
397
|
+
@synonyms "record actions, detail actions, pane actions"
|
|
398
|
+
@tier "presentation"
|
|
368
399
|
bodyContent : render-ui = {
|
|
369
400
|
children: [@trait.DataGrid1]
|
|
370
401
|
direction: vertical
|
|
@@ -465,6 +496,7 @@ orbital BrowseItemOrbital {
|
|
|
465
496
|
children: [{
|
|
466
497
|
color: muted
|
|
467
498
|
content: @config.metaBinding
|
|
499
|
+
format: @config.metaFormat
|
|
468
500
|
type: typography
|
|
469
501
|
variant: caption
|
|
470
502
|
}, {
|
|
@@ -639,13 +671,10 @@ orbital BrowseItemOrbital {
|
|
|
639
671
|
type: stack
|
|
640
672
|
}, {
|
|
641
673
|
detail: {
|
|
642
|
-
actions:
|
|
643
|
-
event: CLOSE
|
|
644
|
-
label: Close
|
|
645
|
-
}]
|
|
674
|
+
actions: @config.detailActions
|
|
646
675
|
fieldNames: @config.detailFields
|
|
647
676
|
initialData: ?row
|
|
648
|
-
showActions:
|
|
677
|
+
showActions: true
|
|
649
678
|
type: detail-panel
|
|
650
679
|
}
|
|
651
680
|
hasSelection: true
|
|
@@ -194,6 +194,16 @@ orbital CalendarEventOrbital {
|
|
|
194
194
|
@label "Title"
|
|
195
195
|
@description "Header text shown above the calendar body."
|
|
196
196
|
@tier "presentation"
|
|
197
|
+
agendaItemActions : json = [{ event: SELECT_DAY, icon: eye, label: View }]
|
|
198
|
+
@label "Agenda item actions"
|
|
199
|
+
@description "Per-item action buttons on agenda-list rows — data-list itemActions descriptors (label/event/icon/variant). Consumers override to wire their own row actions (View/Edit/Delete) so agenda hosts never need a second table for actions."
|
|
200
|
+
@synonyms "agenda actions, row actions, event actions, list actions"
|
|
201
|
+
@tier "presentation"
|
|
202
|
+
agendaGroupBy : string = date
|
|
203
|
+
@label "Agenda group-by field"
|
|
204
|
+
@description "Row field the agenda list groups its day sections by. Rebound hosts point this at their own timestamp column (e.g. startTime, scheduledAt)."
|
|
205
|
+
@synonyms "group field, section field, day field"
|
|
206
|
+
@tier "presentation"
|
|
197
207
|
bodyContent : render-ui = {
|
|
198
208
|
children: [{
|
|
199
209
|
align: center
|
|
@@ -292,7 +302,8 @@ orbital CalendarEventOrbital {
|
|
|
292
302
|
entity: ?data
|
|
293
303
|
fields: []
|
|
294
304
|
gap: md
|
|
295
|
-
groupBy:
|
|
305
|
+
groupBy: @config.agendaGroupBy
|
|
306
|
+
itemActions: @config.agendaItemActions
|
|
296
307
|
renderItem: (fn item {
|
|
297
308
|
children: [{
|
|
298
309
|
align: start
|
|
@@ -301,6 +312,7 @@ orbital CalendarEventOrbital {
|
|
|
301
312
|
children: [{
|
|
302
313
|
color: muted
|
|
303
314
|
content: @config.timeBinding
|
|
315
|
+
format: time
|
|
304
316
|
type: typography
|
|
305
317
|
variant: overline
|
|
306
318
|
}, {
|
|
@@ -1220,41 +1220,39 @@ orbital MultiPartyFlowOrbital {
|
|
|
1220
1220
|
@label "Page title"
|
|
1221
1221
|
@description "Heading shown above the transaction view"
|
|
1222
1222
|
@tier "presentation"
|
|
1223
|
-
transactionSubject : string = "Sale of
|
|
1223
|
+
transactionSubject : string = "Sale of item"
|
|
1224
1224
|
@label "Subject"
|
|
1225
1225
|
@description "Short description of what is being transacted"
|
|
1226
1226
|
@tier "presentation"
|
|
1227
|
-
transactionAmount : string = "$
|
|
1227
|
+
transactionAmount : string = "$0.00"
|
|
1228
1228
|
@label "Amount"
|
|
1229
1229
|
@description "Formatted amount held in escrow"
|
|
1230
1230
|
@tier "presentation"
|
|
1231
|
-
transactionReference : string =
|
|
1231
|
+
transactionReference : string = ""
|
|
1232
1232
|
@label "Reference"
|
|
1233
1233
|
@description "External identifier shown in the summary"
|
|
1234
1234
|
@tier "presentation"
|
|
1235
1235
|
parties : [PartySpec] = [{
|
|
1236
|
-
actionDescription: "Authorize
|
|
1236
|
+
actionDescription: "Authorize the funds to be held in escrow until delivery is confirmed."
|
|
1237
1237
|
actionIcon: credit-card
|
|
1238
1238
|
actionLabel: "Confirm payment"
|
|
1239
|
-
|
|
1240
|
-
description: "Funds the transaction and confirms receipt of the vehicle."
|
|
1239
|
+
description: "Funds the transaction and confirms receipt."
|
|
1241
1240
|
icon: user
|
|
1242
1241
|
id: buyer
|
|
1243
1242
|
stepLabel: "Step 1 of 2"
|
|
1244
1243
|
title: Buyer
|
|
1245
1244
|
}, {
|
|
1246
|
-
actionDescription: "Mark the
|
|
1245
|
+
actionDescription: "Mark the item as shipped. Funds release after the buyer confirms receipt."
|
|
1247
1246
|
actionIcon: package
|
|
1248
1247
|
actionLabel: "Confirm shipment"
|
|
1249
|
-
|
|
1250
|
-
description: "Ships the vehicle and uploads delivery proof."
|
|
1248
|
+
description: "Ships the item and uploads delivery proof."
|
|
1251
1249
|
icon: user-check
|
|
1252
1250
|
id: seller
|
|
1253
1251
|
stepLabel: "Step 2 of 2"
|
|
1254
1252
|
title: Seller
|
|
1255
1253
|
}]
|
|
1256
1254
|
@label "Parties"
|
|
1257
|
-
@description "Ordered participants with role, actor name, and required action"
|
|
1255
|
+
@description "Ordered participants with role, actor name, and required action. stepLabel entries should track the party count when overriding."
|
|
1258
1256
|
@tier "domain"
|
|
1259
1257
|
releaseLabel : string = "Release funds"
|
|
1260
1258
|
@label "Release button"
|
|
@@ -93,12 +93,14 @@ orbital StatsItemOrbital {
|
|
|
93
93
|
format: number
|
|
94
94
|
icon: list
|
|
95
95
|
label: "Total Items"
|
|
96
|
+
sparklineData: [2, 4, 3, 6, 5, 8, 7]
|
|
96
97
|
variant: primary
|
|
97
98
|
}, {
|
|
98
99
|
aggregation: count
|
|
99
100
|
format: number
|
|
100
101
|
icon: check-circle
|
|
101
102
|
label: Active
|
|
103
|
+
sparklineData: [1, 3, 2, 4, 6, 5, 7]
|
|
102
104
|
variant: success
|
|
103
105
|
}, {
|
|
104
106
|
aggregation: avg
|
|
@@ -106,6 +108,7 @@ orbital StatsItemOrbital {
|
|
|
106
108
|
format: number
|
|
107
109
|
icon: trending-up
|
|
108
110
|
label: "Avg Value"
|
|
111
|
+
sparklineData: [5, 4, 6, 3, 5, 7, 6]
|
|
109
112
|
variant: info
|
|
110
113
|
}]
|
|
111
114
|
@label "Metrics"
|
|
@@ -21,6 +21,7 @@ orbital TypographyOrbital {
|
|
|
21
21
|
overflow: @config.overflow
|
|
22
22
|
className: @config.className
|
|
23
23
|
style: @config.style
|
|
24
|
+
format: @config.format
|
|
24
25
|
content: @config.content
|
|
25
26
|
children: @config.children
|
|
26
27
|
type: typography
|
|
@@ -32,7 +33,7 @@ orbital TypographyOrbital {
|
|
|
32
33
|
@label "Variant"
|
|
33
34
|
@description "Typography variant"
|
|
34
35
|
@tier "presentation"
|
|
35
|
-
level : number
|
|
36
|
+
level : number
|
|
36
37
|
@label "Level"
|
|
37
38
|
@description "Heading level (1-6) - alternative to variant for headings"
|
|
38
39
|
@tier "presentation"
|
|
@@ -68,6 +69,10 @@ orbital TypographyOrbital {
|
|
|
68
69
|
@label "Style"
|
|
69
70
|
@description "Inline style"
|
|
70
71
|
@tier "presentation"
|
|
72
|
+
format : "none" | "date" | "time" | "datetime" | "number" | "currency" | "percent" = none
|
|
73
|
+
@label "Format"
|
|
74
|
+
@description "Value formatting applied to string/number/Date content — `none` (the default) renders content as-is. Covers the raw-ISO-date class: a bound datetime renders human-readable via `format='date'|'time'|'datetime'`."
|
|
75
|
+
@tier "presentation"
|
|
71
76
|
content : node
|
|
72
77
|
@label "Content"
|
|
73
78
|
@description "Text content (alternative to children)"
|
|
@@ -171,7 +171,9 @@ orbital DataGridOrbital {
|
|
|
171
171
|
@label "Columns"
|
|
172
172
|
@description "Alias for `fields` — the compiler emits `columns` for field defs."
|
|
173
173
|
@tier "presentation"
|
|
174
|
-
itemActions :
|
|
174
|
+
itemActions : [DataGridItemActionsItem] = []
|
|
175
|
+
@label "Item Actions"
|
|
176
|
+
@description "Per-item action buttons"
|
|
175
177
|
@tier "presentation"
|
|
176
178
|
maxInlineActions : number
|
|
177
179
|
@label "Max Inline Actions"
|
|
@@ -181,7 +183,7 @@ orbital DataGridOrbital {
|
|
|
181
183
|
@label "Scroll X"
|
|
182
184
|
@description "Lay items in a single horizontally-scrolling row (kanban columns) sized to `minCardWidth` instead of a wrapping grid."
|
|
183
185
|
@tier "presentation"
|
|
184
|
-
cols : number
|
|
186
|
+
cols : number
|
|
185
187
|
@label "Cols"
|
|
186
188
|
@description "Number of columns (uses auto-fit if omitted)"
|
|
187
189
|
@tier "presentation"
|
|
@@ -68,7 +68,9 @@ orbital DataListOrbital {
|
|
|
68
68
|
variant: @config.variant
|
|
69
69
|
groupBy: @config.groupBy
|
|
70
70
|
senderField: @config.senderField
|
|
71
|
+
senderLabelField: @config.senderLabelField
|
|
71
72
|
currentUser: @config.currentUser
|
|
73
|
+
emptyMessage: @config.emptyMessage
|
|
72
74
|
className: @config.className
|
|
73
75
|
isLoading: @config.isLoading
|
|
74
76
|
error: @config.error
|
|
@@ -82,6 +84,8 @@ orbital DataListOrbital {
|
|
|
82
84
|
loadMoreEvent: @config.loadMoreEvent
|
|
83
85
|
hasMore: @config.hasMore
|
|
84
86
|
pageSize: @config.pageSize
|
|
87
|
+
sortBy: @config.sortBy
|
|
88
|
+
sortDirection: @config.sortDirection
|
|
85
89
|
look: @config.look
|
|
86
90
|
type: data-list
|
|
87
91
|
})
|
|
@@ -105,7 +109,9 @@ orbital DataListOrbital {
|
|
|
105
109
|
variant: @config.variant
|
|
106
110
|
groupBy: @config.groupBy
|
|
107
111
|
senderField: @config.senderField
|
|
112
|
+
senderLabelField: @config.senderLabelField
|
|
108
113
|
currentUser: @config.currentUser
|
|
114
|
+
emptyMessage: @config.emptyMessage
|
|
109
115
|
className: @config.className
|
|
110
116
|
isLoading: @config.isLoading
|
|
111
117
|
error: @config.error
|
|
@@ -119,6 +125,8 @@ orbital DataListOrbital {
|
|
|
119
125
|
loadMoreEvent: @config.loadMoreEvent
|
|
120
126
|
hasMore: @config.hasMore
|
|
121
127
|
pageSize: @config.pageSize
|
|
128
|
+
sortBy: @config.sortBy
|
|
129
|
+
sortDirection: @config.sortDirection
|
|
122
130
|
look: @config.look
|
|
123
131
|
type: data-list
|
|
124
132
|
})
|
|
@@ -207,7 +215,9 @@ orbital DataListOrbital {
|
|
|
207
215
|
@label "Columns"
|
|
208
216
|
@description "Alias for `fields` — the compiler emits `columns` for field defs."
|
|
209
217
|
@tier "presentation"
|
|
210
|
-
itemActions :
|
|
218
|
+
itemActions : [DataListItemActionsItem] = []
|
|
219
|
+
@label "Item Actions"
|
|
220
|
+
@description "Per-item action buttons"
|
|
211
221
|
@tier "presentation"
|
|
212
222
|
maxInlineActions : number
|
|
213
223
|
@label "Max Inline Actions"
|
|
@@ -233,10 +243,18 @@ orbital DataListOrbital {
|
|
|
233
243
|
@label "Sender Field"
|
|
234
244
|
@description "Field name identifying the sender (used with variant: 'message')"
|
|
235
245
|
@tier "presentation"
|
|
246
|
+
senderLabelField : string
|
|
247
|
+
@label "Sender Label Field"
|
|
248
|
+
@description "Field holding the sender's human-readable name (used with variant: 'message'). Defaults to `senderField`. Set this when `senderField` holds an id — an id-keyed thread otherwise labels bubbles `staff-1` instead of `Sam Staff`."
|
|
249
|
+
@tier "presentation"
|
|
236
250
|
currentUser : string
|
|
237
251
|
@label "Current User"
|
|
238
252
|
@description "Current user identifier; messages matching this value align right (used with variant: 'message')"
|
|
239
253
|
@tier "presentation"
|
|
254
|
+
emptyMessage : string
|
|
255
|
+
@label "Empty Message"
|
|
256
|
+
@description "Message shown when there are no rows. Falls back to the generic 'no items' translation. `TableView` already exposes this; an agenda or an inbox wants to say what 'empty' means in its own words."
|
|
257
|
+
@tier "presentation"
|
|
240
258
|
className : string
|
|
241
259
|
@label "Class Name"
|
|
242
260
|
@description "Additional CSS classes"
|
|
@@ -289,6 +307,14 @@ orbital DataListOrbital {
|
|
|
289
307
|
@label "Page Size"
|
|
290
308
|
@description "Max items to show before 'Show More' button. Defaults to 5. Set to 0 to disable."
|
|
291
309
|
@tier "presentation"
|
|
310
|
+
sortBy : string
|
|
311
|
+
@label "Sort By"
|
|
312
|
+
@description "Field name to order rows by. Values are compared by their own type — numbers numerically, date-like strings chronologically, everything else alphabetically — never by what the field is called. Empty cells sort last. Unset leaves the incoming order untouched. Orders only the rows already fetched: a collection larger than its `limit` still needs ordering at the data layer."
|
|
313
|
+
@tier "presentation"
|
|
314
|
+
sortDirection : "asc" | "desc" = asc
|
|
315
|
+
@label "Sort Direction"
|
|
316
|
+
@description "Direction for `sortBy`. Defaults to ascending."
|
|
317
|
+
@tier "presentation"
|
|
292
318
|
look : "dense" | "spacious" | "striped" | "borderless" | "card-rows" = dense
|
|
293
319
|
@label "Look"
|
|
294
320
|
@description "Layer 2 visual treatment — mirrors the `entity-table` look enum so data-grid / data-list / entity-table share one knob name from authors."
|
|
@@ -8,9 +8,14 @@ orbital GraphCanvasOrbital {
|
|
|
8
8
|
color : string
|
|
9
9
|
size : number
|
|
10
10
|
badge : number
|
|
11
|
+
mark : GraphCanvasNodesItemMark
|
|
11
12
|
x : number
|
|
12
13
|
y : number
|
|
13
14
|
}
|
|
15
|
+
type GraphCanvasNodesItemMark = {
|
|
16
|
+
kind : json!
|
|
17
|
+
suggestionId : string!
|
|
18
|
+
}
|
|
14
19
|
type GraphCanvasEdgesItem = {
|
|
15
20
|
source : string!
|
|
16
21
|
target : string!
|
|
@@ -18,6 +23,13 @@ orbital GraphCanvasOrbital {
|
|
|
18
23
|
weight : number
|
|
19
24
|
color : string
|
|
20
25
|
}
|
|
26
|
+
type GraphCanvasProposedEdgesItem = {
|
|
27
|
+
source : string!
|
|
28
|
+
target : string!
|
|
29
|
+
label : string
|
|
30
|
+
weight : number
|
|
31
|
+
color : string
|
|
32
|
+
}
|
|
21
33
|
type GraphCanvasSimilarityItem = {
|
|
22
34
|
source : string!
|
|
23
35
|
target : string!
|
|
@@ -42,9 +54,29 @@ orbital GraphCanvasOrbital {
|
|
|
42
54
|
color : string
|
|
43
55
|
size : number
|
|
44
56
|
badge : number
|
|
57
|
+
mark : GraphCanvasNODECLICKNodeMark
|
|
58
|
+
x : number
|
|
59
|
+
y : number
|
|
60
|
+
}
|
|
61
|
+
type GraphCanvasNODECLICKNodeMark = {
|
|
62
|
+
kind : json!
|
|
63
|
+
suggestionId : string!
|
|
64
|
+
}
|
|
65
|
+
type GraphCanvasMARKCLICKNode = {
|
|
66
|
+
id : string!
|
|
67
|
+
label : string
|
|
68
|
+
group : string
|
|
69
|
+
color : string
|
|
70
|
+
size : number
|
|
71
|
+
badge : number
|
|
72
|
+
mark : GraphCanvasMARKCLICKNodeMark
|
|
45
73
|
x : number
|
|
46
74
|
y : number
|
|
47
75
|
}
|
|
76
|
+
type GraphCanvasMARKCLICKNodeMark = {
|
|
77
|
+
kind : json!
|
|
78
|
+
suggestionId : string!
|
|
79
|
+
}
|
|
48
80
|
type GraphCanvasNODEDOUBLECLICKNode = {
|
|
49
81
|
id : string!
|
|
50
82
|
label : string
|
|
@@ -52,9 +84,14 @@ orbital GraphCanvasOrbital {
|
|
|
52
84
|
color : string
|
|
53
85
|
size : number
|
|
54
86
|
badge : number
|
|
87
|
+
mark : GraphCanvasNODEDOUBLECLICKNodeMark
|
|
55
88
|
x : number
|
|
56
89
|
y : number
|
|
57
90
|
}
|
|
91
|
+
type GraphCanvasNODEDOUBLECLICKNodeMark = {
|
|
92
|
+
kind : json!
|
|
93
|
+
suggestionId : string!
|
|
94
|
+
}
|
|
58
95
|
type GraphCanvasBADGECLICKNode = {
|
|
59
96
|
id : string!
|
|
60
97
|
label : string
|
|
@@ -62,9 +99,14 @@ orbital GraphCanvasOrbital {
|
|
|
62
99
|
color : string
|
|
63
100
|
size : number
|
|
64
101
|
badge : number
|
|
102
|
+
mark : GraphCanvasBADGECLICKNodeMark
|
|
65
103
|
x : number
|
|
66
104
|
y : number
|
|
67
105
|
}
|
|
106
|
+
type GraphCanvasBADGECLICKNodeMark = {
|
|
107
|
+
kind : json!
|
|
108
|
+
suggestionId : string!
|
|
109
|
+
}
|
|
68
110
|
|
|
69
111
|
entity GraphCanvasItem [runtime] {
|
|
70
112
|
id : string!
|
|
@@ -79,6 +121,7 @@ orbital GraphCanvasOrbital {
|
|
|
79
121
|
title: @config.title
|
|
80
122
|
nodes: @config.nodes
|
|
81
123
|
edges: @config.edges
|
|
124
|
+
proposedEdges: @config.proposedEdges
|
|
82
125
|
similarity: @config.similarity
|
|
83
126
|
height: @config.height
|
|
84
127
|
showLabels: @config.showLabels
|
|
@@ -86,6 +129,7 @@ orbital GraphCanvasOrbital {
|
|
|
86
129
|
draggable: @config.draggable
|
|
87
130
|
actions: @config.actions
|
|
88
131
|
onNodeClick: @config.onNodeClick
|
|
132
|
+
onMarkClick: @config.onMarkClick
|
|
89
133
|
onNodeDoubleClick: @config.onNodeDoubleClick
|
|
90
134
|
onBadgeClick: @config.onBadgeClick
|
|
91
135
|
nodeClickEvent: @config.nodeClickEvent
|
|
@@ -109,6 +153,11 @@ orbital GraphCanvasOrbital {
|
|
|
109
153
|
}
|
|
110
154
|
@description "On node click"
|
|
111
155
|
@tier "essential"
|
|
156
|
+
@config.onMarkClick -> external {
|
|
157
|
+
node : GraphCanvasMARKCLICKNode
|
|
158
|
+
}
|
|
159
|
+
@description "On marked-node click (suggestion/proposal target). Takes priority over onNodeClick."
|
|
160
|
+
@tier "essential"
|
|
112
161
|
@config.onNodeDoubleClick -> external {
|
|
113
162
|
node : GraphCanvasNODEDOUBLECLICKNode
|
|
114
163
|
}
|
|
@@ -134,6 +183,10 @@ orbital GraphCanvasOrbital {
|
|
|
134
183
|
@label "Edges"
|
|
135
184
|
@description "Graph edges (the only rendered links)"
|
|
136
185
|
@tier "presentation"
|
|
186
|
+
proposedEdges : [GraphCanvasProposedEdgesItem] = []
|
|
187
|
+
@label "Proposed Edges"
|
|
188
|
+
@description "Uncommitted proposal links — rendered dashed/faint in a separate pass, never folded into the layout springs."
|
|
189
|
+
@tier "presentation"
|
|
137
190
|
similarity : [GraphCanvasSimilarityItem] = []
|
|
138
191
|
@label "Similarity"
|
|
139
192
|
@description "All-pairs similarity (cosine 0–1) used ONLY for layout, never drawn. It is the secondary macro-layout: non-connected pairs get a weak spring (higher cosine ⇒ closer) so clusters arrange relative to each other; drawn `edges` stay the primary tight structure. When omitted, edges alone drive the layout."
|
|
@@ -162,6 +215,10 @@ orbital GraphCanvasOrbital {
|
|
|
162
215
|
@label "On Node Click"
|
|
163
216
|
@description "On node click"
|
|
164
217
|
@tier "presentation"
|
|
218
|
+
onMarkClick : string = "MARK_CLICK"
|
|
219
|
+
@label "On Mark Click"
|
|
220
|
+
@description "On marked-node click (suggestion/proposal target). Takes priority over onNodeClick."
|
|
221
|
+
@tier "presentation"
|
|
165
222
|
onNodeDoubleClick : string = "NODE_DOUBLE_CLICK"
|
|
166
223
|
@label "On Node Double Click"
|
|
167
224
|
@description "On node double-click (e.g. to drill in)"
|
|
@@ -26,11 +26,11 @@ orbital SimpleGridOrbital {
|
|
|
26
26
|
@label "Min Child Width"
|
|
27
27
|
@description "Minimum width of each child (e.g., 200, '200px', '15rem')"
|
|
28
28
|
@tier "presentation"
|
|
29
|
-
maxCols : number
|
|
29
|
+
maxCols : number
|
|
30
30
|
@label "Max Cols"
|
|
31
31
|
@description "Maximum number of columns"
|
|
32
32
|
@tier "presentation"
|
|
33
|
-
cols : number
|
|
33
|
+
cols : number
|
|
34
34
|
@label "Cols"
|
|
35
35
|
@description "Exact number of columns (disables auto-fit)"
|
|
36
36
|
@tier "presentation"
|
|
@@ -176,7 +176,9 @@ orbital TableViewOrbital {
|
|
|
176
176
|
@label "Fields"
|
|
177
177
|
@description "Alias for `columns`."
|
|
178
178
|
@tier "presentation"
|
|
179
|
-
itemActions :
|
|
179
|
+
itemActions : [TableViewItemActionsItem] = []
|
|
180
|
+
@label "Item Actions"
|
|
181
|
+
@description "Per-row action buttons (trailing column)."
|
|
180
182
|
@tier "presentation"
|
|
181
183
|
maxInlineActions : number
|
|
182
184
|
@label "Max Inline Actions"
|
|
@@ -160,7 +160,7 @@ orbital EntityCardsOrbital {
|
|
|
160
160
|
@label "Min Card Width"
|
|
161
161
|
@description "Minimum width of each card (default: 280px)"
|
|
162
162
|
@tier "presentation"
|
|
163
|
-
maxCols : number
|
|
163
|
+
maxCols : number
|
|
164
164
|
@label "Max Cols"
|
|
165
165
|
@description "Maximum number of columns"
|
|
166
166
|
@tier "presentation"
|
|
@@ -188,7 +188,9 @@ orbital EntityCardsOrbital {
|
|
|
188
188
|
@label "Columns"
|
|
189
189
|
@description "Alias for fields - backwards compatibility"
|
|
190
190
|
@tier "presentation"
|
|
191
|
-
itemActions :
|
|
191
|
+
itemActions : [EntityCardsItemActionsItem] = [{ event: VIEW, label: View, variant: ghost }]
|
|
192
|
+
@label "Item Actions"
|
|
193
|
+
@description "Actions for each card item (schema-driven)"
|
|
192
194
|
@tier "presentation"
|
|
193
195
|
showTotal : boolean = true
|
|
194
196
|
@label "Show Total"
|
|
@@ -148,6 +148,8 @@ orbital EntityListOrbital {
|
|
|
148
148
|
@description "selectable prop"
|
|
149
149
|
@tier "presentation"
|
|
150
150
|
itemActions : json = [{ event: VIEW, label: View, variant: ghost }]
|
|
151
|
+
@label "Item Actions"
|
|
152
|
+
@description "Item actions - schema-driven or function-based"
|
|
151
153
|
@tier "presentation"
|
|
152
154
|
showDividers : boolean
|
|
153
155
|
@label "Show Dividers"
|
|
@@ -189,7 +189,9 @@ orbital EntityTableOrbital {
|
|
|
189
189
|
@label "Columns"
|
|
190
190
|
@description "Columns can be Column objects or simple string field names"
|
|
191
191
|
@tier "presentation"
|
|
192
|
-
itemActions :
|
|
192
|
+
itemActions : [EntityTableItemActionsItem] = [{ event: VIEW, label: View, variant: ghost }]
|
|
193
|
+
@label "Item Actions"
|
|
194
|
+
@description "Item actions from generated code - maps to rowActions"
|
|
193
195
|
@tier "presentation"
|
|
194
196
|
emptyIcon : icon
|
|
195
197
|
@label "Empty Icon"
|
|
@@ -98,7 +98,9 @@ orbital TimelineOrbital {
|
|
|
98
98
|
@label "Fields"
|
|
99
99
|
@description "Fields to display"
|
|
100
100
|
@tier "presentation"
|
|
101
|
-
itemActions :
|
|
101
|
+
itemActions : [TimelineItemActionsItem] = []
|
|
102
|
+
@label "Item Actions"
|
|
103
|
+
@description "Actions per item"
|
|
102
104
|
@tier "presentation"
|
|
103
105
|
look : "vertical-compact" | "vertical-spacious" | "horizontal" | "swimlane" = "vertical-spacious"
|
|
104
106
|
@label "Look"
|