@almadar/std 16.150.0 → 16.151.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 +29 -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 +15 -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/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 +166 -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 +50 -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/learning/atoms/std-branching-logic.orb +0 -34
- package/dist/behaviors/behaviors-embeddings.json +185 -185
- package/dist/behaviors/behaviors-registry.json +3 -2
- package/dist/behaviors/exports-reader.js +143 -4
- package/dist/behaviors/functions/index.d.ts +19 -18
- package/dist/behaviors/functions/index.js +143 -4
- 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 +166 -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 +50 -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/learning/atoms/std-branching-logic.orb +0 -34
- package/dist/behaviors-embeddings.json +185 -185
- package/dist/behaviors-registry.json +3 -2
- 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.4.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: (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id])
|
|
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: (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id])
|
|
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: (or ["=", @config.scopeField, ""] ["=", (object/get @entity @config.scopeField), @user.id])
|
|
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,11 @@ 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"
|
|
340
356
|
selectable : boolean = false
|
|
341
357
|
@label "Show row selection checkboxes?"
|
|
342
358
|
@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 +381,11 @@ orbital BrowseItemOrbital {
|
|
|
365
381
|
@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
382
|
@synonyms "detail columns, record fields, detail pane fields"
|
|
367
383
|
@tier "presentation"
|
|
384
|
+
detailActions : json = [{ event: CLOSE, label: Close }]
|
|
385
|
+
@label "Master-detail record pane actions"
|
|
386
|
+
@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."
|
|
387
|
+
@synonyms "record actions, detail actions, pane actions"
|
|
388
|
+
@tier "presentation"
|
|
368
389
|
bodyContent : render-ui = {
|
|
369
390
|
children: [@trait.DataGrid1]
|
|
370
391
|
direction: vertical
|
|
@@ -465,6 +486,7 @@ orbital BrowseItemOrbital {
|
|
|
465
486
|
children: [{
|
|
466
487
|
color: muted
|
|
467
488
|
content: @config.metaBinding
|
|
489
|
+
format: @config.metaFormat
|
|
468
490
|
type: typography
|
|
469
491
|
variant: caption
|
|
470
492
|
}, {
|
|
@@ -639,13 +661,10 @@ orbital BrowseItemOrbital {
|
|
|
639
661
|
type: stack
|
|
640
662
|
}, {
|
|
641
663
|
detail: {
|
|
642
|
-
actions:
|
|
643
|
-
event: CLOSE
|
|
644
|
-
label: Close
|
|
645
|
-
}]
|
|
664
|
+
actions: @config.detailActions
|
|
646
665
|
fieldNames: @config.detailFields
|
|
647
666
|
initialData: ?row
|
|
648
|
-
showActions:
|
|
667
|
+
showActions: true
|
|
649
668
|
type: detail-panel
|
|
650
669
|
}
|
|
651
670
|
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
|
|
@@ -105,7 +107,9 @@ orbital DataListOrbital {
|
|
|
105
107
|
variant: @config.variant
|
|
106
108
|
groupBy: @config.groupBy
|
|
107
109
|
senderField: @config.senderField
|
|
110
|
+
senderLabelField: @config.senderLabelField
|
|
108
111
|
currentUser: @config.currentUser
|
|
112
|
+
emptyMessage: @config.emptyMessage
|
|
109
113
|
className: @config.className
|
|
110
114
|
isLoading: @config.isLoading
|
|
111
115
|
error: @config.error
|
|
@@ -207,7 +211,9 @@ orbital DataListOrbital {
|
|
|
207
211
|
@label "Columns"
|
|
208
212
|
@description "Alias for `fields` — the compiler emits `columns` for field defs."
|
|
209
213
|
@tier "presentation"
|
|
210
|
-
itemActions :
|
|
214
|
+
itemActions : [DataListItemActionsItem] = []
|
|
215
|
+
@label "Item Actions"
|
|
216
|
+
@description "Per-item action buttons"
|
|
211
217
|
@tier "presentation"
|
|
212
218
|
maxInlineActions : number
|
|
213
219
|
@label "Max Inline Actions"
|
|
@@ -233,10 +239,18 @@ orbital DataListOrbital {
|
|
|
233
239
|
@label "Sender Field"
|
|
234
240
|
@description "Field name identifying the sender (used with variant: 'message')"
|
|
235
241
|
@tier "presentation"
|
|
242
|
+
senderLabelField : string
|
|
243
|
+
@label "Sender Label Field"
|
|
244
|
+
@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`."
|
|
245
|
+
@tier "presentation"
|
|
236
246
|
currentUser : string
|
|
237
247
|
@label "Current User"
|
|
238
248
|
@description "Current user identifier; messages matching this value align right (used with variant: 'message')"
|
|
239
249
|
@tier "presentation"
|
|
250
|
+
emptyMessage : string
|
|
251
|
+
@label "Empty Message"
|
|
252
|
+
@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."
|
|
253
|
+
@tier "presentation"
|
|
240
254
|
className : string
|
|
241
255
|
@label "Class Name"
|
|
242
256
|
@description "Additional CSS classes"
|
|
@@ -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"
|
|
@@ -48,34 +48,6 @@ orbital BranchingLogicOrbital {
|
|
|
48
48
|
direction: horizontal
|
|
49
49
|
gap: sm
|
|
50
50
|
type: stack
|
|
51
|
-
}, {
|
|
52
|
-
children: [{
|
|
53
|
-
icon: git-branch
|
|
54
|
-
label: "Total rules"
|
|
55
|
-
look: @config.statLook
|
|
56
|
-
type: stat-display
|
|
57
|
-
value: ?data.length
|
|
58
|
-
}, {
|
|
59
|
-
icon: clipboard-list
|
|
60
|
-
label: "Active surveys"
|
|
61
|
-
look: @config.statLook
|
|
62
|
-
type: stat-display
|
|
63
|
-
value: "8"
|
|
64
|
-
}, {
|
|
65
|
-
icon: skip-forward
|
|
66
|
-
label: "Skip jumps"
|
|
67
|
-
look: @config.statLook
|
|
68
|
-
type: stat-display
|
|
69
|
-
value: "42"
|
|
70
|
-
}, {
|
|
71
|
-
icon: trending-up
|
|
72
|
-
label: "Priority avg"
|
|
73
|
-
look: @config.statLook
|
|
74
|
-
type: stat-display
|
|
75
|
-
value: "3"
|
|
76
|
-
}]
|
|
77
|
-
cols: 4
|
|
78
|
-
type: simple-grid
|
|
79
51
|
}, { type: divider }, {
|
|
80
52
|
cols: 1
|
|
81
53
|
entity: ?data
|