@almadar/std 16.212.0 → 16.213.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/agent/organisms/std-agent-rabit.lolo +1 -0
- package/behaviors/lolo/infra/atoms/std-notification-center.lolo +19 -1
- package/behaviors/lolo/ui/core/atoms/std-rating-review.lolo +214 -3
- package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +13 -0
- package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +13 -0
- package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +13 -0
- package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +13 -0
- package/behaviors/lolo/ui/game/atoms/ui-canvas-2d.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-canvas.lolo +2 -2
- package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +2 -2
- package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +2 -2
- package/behaviors/registry/agent/organisms/std-agent-rabit.orb +8 -0
- package/behaviors/registry/infra/atoms/std-notification-center.orb +176 -1
- package/behaviors/registry/ui/core/atoms/std-rating-review.orb +443 -2
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +58 -0
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +58 -0
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +58 -0
- package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +58 -0
- package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +2 -2
- package/behaviors/registry/ui/game/atoms/ui-canvas.orb +2 -2
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +2 -2
- package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +2 -2
- package/dist/behaviors/exports-reader.js +626 -6
- package/dist/behaviors/functions/index.d.ts +27 -13
- package/dist/behaviors/functions/index.js +624 -7
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +627 -7
- package/dist/behaviors/query.js +626 -6
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +1 -1
- package/dist/behaviors-registry.json +293 -309
- package/dist/index.d.ts +1 -1
- package/dist/index.js +627 -7
- 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
|
@@ -44,6 +44,7 @@ orbital CoordinatorOrbital {
|
|
|
44
44
|
(session/write-spec "coordinator-plan" @entity.plan)
|
|
45
45
|
(set @entity.phase dispatching)
|
|
46
46
|
(emit DISPATCHED { plan: @entity.plan, totalOrbitals: @entity.totalOrbitals })
|
|
47
|
+
(navigate "/rabit/process")
|
|
47
48
|
PLAN_FAILED -> monitoring
|
|
48
49
|
(set @entity.plan "")
|
|
49
50
|
}
|
|
@@ -3,6 +3,8 @@ app std-notification-center "1.0.0"
|
|
|
3
3
|
type NotifRow = { id : string, recipient : string, channel : string, message : string, severity : string, dispatched : boolean, error : string, recordedAt : number }
|
|
4
4
|
type PushCreds = { endpoint : string, p256dh : string, auth : string }
|
|
5
5
|
orbital NotificationCenterOrbital {
|
|
6
|
+
uses Button from "std/behaviors/ui-button"
|
|
7
|
+
|
|
6
8
|
type PUSH_SUBSCRIBED = Event { endpoint : string, p256dh : string, auth : string } "browser/push-subscribe resolved — the credentials arrive FLAT on the payload (?endpoint, ?p256dh, ?auth), not wrapped in a `result` field."
|
|
7
9
|
|
|
8
10
|
entity NotificationPreference [persistent: notificationPreferences] {
|
|
@@ -101,10 +103,26 @@ orbital NotificationCenterOrbital {
|
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
|
|
106
|
+
trait PreferenceEditorButtonSubscribe = Button.traits.ButtonRender -> NotificationPreference { config { label: "Enable push notifications", action: OPEN_SUBSCRIBE } }
|
|
107
|
+
|
|
108
|
+
trait PreferenceEditorButtonDigest = Button.traits.ButtonRender -> NotificationPreference { config { label: "View notification digest", action: OPEN_DIGEST } }
|
|
109
|
+
|
|
104
110
|
trait PreferenceEditor -> NotificationPreference [lifecycle, instance] {
|
|
105
111
|
initial: idle
|
|
106
112
|
|
|
107
113
|
state idle {
|
|
114
|
+
INIT -> idle
|
|
115
|
+
(fetch NotificationPreference)
|
|
116
|
+
(render-ui main {
|
|
117
|
+
type: stack
|
|
118
|
+
direction: vertical
|
|
119
|
+
gap: md
|
|
120
|
+
children: [@trait.PreferenceEditorButtonSubscribe, @trait.PreferenceEditorButtonDigest]
|
|
121
|
+
})
|
|
122
|
+
OPEN_SUBSCRIBE -> idle
|
|
123
|
+
(navigate "/notifications/subscribe")
|
|
124
|
+
OPEN_DIGEST -> idle
|
|
125
|
+
(navigate "/notifications/digest")
|
|
108
126
|
SAVE_PREFERENCE -> idle
|
|
109
127
|
(persist create NotificationPreference {
|
|
110
128
|
channel: ?channel
|
|
@@ -288,7 +306,7 @@ orbital NotificationCenterOrbital {
|
|
|
288
306
|
}
|
|
289
307
|
}
|
|
290
308
|
|
|
291
|
-
page "/notifications/preferences" as NotificationPreferencesPage -> PreferenceEditor
|
|
309
|
+
page "/notifications/preferences" as NotificationPreferencesPage -> PreferenceEditor, PreferenceEditorButtonSubscribe, PreferenceEditorButtonDigest
|
|
292
310
|
page "/notifications/subscribe" as PushSubscribePage -> PushSubscriber
|
|
293
311
|
page "/notifications/digest" as NotificationDigestPage -> DigestDrain
|
|
294
312
|
}
|
|
@@ -881,9 +881,189 @@ orbital RatingReviewOrbital {
|
|
|
881
881
|
type: stack
|
|
882
882
|
})
|
|
883
883
|
MARK_HELPFUL -> viewing
|
|
884
|
+
(set @entity.reviews (array/map @entity.reviews (fn row (if ["=", (object/get @row id ""), ?id] (object/merge @row { helpful: ["+", (object/get @row helpful 0), 1] }) @row))))
|
|
885
|
+
(set @entity.reviewsSource (array/map @entity.reviewsSource (fn row (if ["=", (object/get @row id ""), ?id] (object/merge @row { helpful: ["+", (object/get @row helpful 0), 1] }) @row))))
|
|
884
886
|
(render-ui main {
|
|
885
|
-
|
|
886
|
-
|
|
887
|
+
children: [{
|
|
888
|
+
align: center
|
|
889
|
+
children: [{
|
|
890
|
+
children: [{
|
|
891
|
+
align: center
|
|
892
|
+
children: [{ name: star, type: icon }, {
|
|
893
|
+
content: Reviews
|
|
894
|
+
type: typography
|
|
895
|
+
variant: h3
|
|
896
|
+
}, {
|
|
897
|
+
color: muted
|
|
898
|
+
content: "·"
|
|
899
|
+
type: typography
|
|
900
|
+
}, {
|
|
901
|
+
content: @entity.averageRating
|
|
902
|
+
type: typography
|
|
903
|
+
variant: h3
|
|
904
|
+
}, {
|
|
905
|
+
color: warning
|
|
906
|
+
name: star
|
|
907
|
+
type: icon
|
|
908
|
+
}, {
|
|
909
|
+
color: muted
|
|
910
|
+
content: "·"
|
|
911
|
+
type: typography
|
|
912
|
+
}, {
|
|
913
|
+
color: muted
|
|
914
|
+
content: @entity.totalReviews
|
|
915
|
+
type: typography
|
|
916
|
+
variant: h4
|
|
917
|
+
}, {
|
|
918
|
+
color: muted
|
|
919
|
+
content: reviews
|
|
920
|
+
type: typography
|
|
921
|
+
variant: h4
|
|
922
|
+
}]
|
|
923
|
+
direction: horizontal
|
|
924
|
+
gap: sm
|
|
925
|
+
type: stack
|
|
926
|
+
}, {
|
|
927
|
+
color: muted
|
|
928
|
+
content: @config.subjectTitle
|
|
929
|
+
type: typography
|
|
930
|
+
variant: caption
|
|
931
|
+
}]
|
|
932
|
+
direction: vertical
|
|
933
|
+
gap: xs
|
|
934
|
+
type: stack
|
|
935
|
+
}, {
|
|
936
|
+
action: WRITE_REVIEW
|
|
937
|
+
icon: edit
|
|
938
|
+
label: @config.writeLabel
|
|
939
|
+
type: button
|
|
940
|
+
variant: primary
|
|
941
|
+
}]
|
|
942
|
+
direction: horizontal
|
|
943
|
+
gap: md
|
|
944
|
+
justify: between
|
|
945
|
+
type: stack
|
|
946
|
+
}, {
|
|
947
|
+
children: [{
|
|
948
|
+
children: [{
|
|
949
|
+
content: "Rating distribution"
|
|
950
|
+
type: typography
|
|
951
|
+
variant: h4
|
|
952
|
+
}, {
|
|
953
|
+
entity: @entity.starDistribution
|
|
954
|
+
fields: []
|
|
955
|
+
gap: sm
|
|
956
|
+
renderItem: (fn bar {
|
|
957
|
+
align: center
|
|
958
|
+
children: [{
|
|
959
|
+
content: @bar.label
|
|
960
|
+
type: typography
|
|
961
|
+
variant: caption
|
|
962
|
+
}, {
|
|
963
|
+
max: 100
|
|
964
|
+
type: progress-bar
|
|
965
|
+
value: @bar.percentage
|
|
966
|
+
variant: primary
|
|
967
|
+
}, {
|
|
968
|
+
color: muted
|
|
969
|
+
content: @bar.percentage
|
|
970
|
+
type: typography
|
|
971
|
+
variant: caption
|
|
972
|
+
}, {
|
|
973
|
+
color: muted
|
|
974
|
+
content: "%"
|
|
975
|
+
type: typography
|
|
976
|
+
variant: caption
|
|
977
|
+
}]
|
|
978
|
+
direction: horizontal
|
|
979
|
+
gap: md
|
|
980
|
+
type: stack
|
|
981
|
+
})
|
|
982
|
+
type: data-list
|
|
983
|
+
}]
|
|
984
|
+
direction: vertical
|
|
985
|
+
gap: sm
|
|
986
|
+
type: stack
|
|
987
|
+
}]
|
|
988
|
+
look: @config.cardLook
|
|
989
|
+
type: card
|
|
990
|
+
}, {
|
|
991
|
+
activeTab: @entity.currentSort
|
|
992
|
+
tabChangeEvent: CHANGE_SORT
|
|
993
|
+
tabs: @config.sortOptions
|
|
994
|
+
type: tabs
|
|
995
|
+
}, {
|
|
996
|
+
entity: @entity.reviews
|
|
997
|
+
fields: []
|
|
998
|
+
gap: md
|
|
999
|
+
renderItem: (fn review {
|
|
1000
|
+
children: [{
|
|
1001
|
+
children: [{
|
|
1002
|
+
align: center
|
|
1003
|
+
children: [{ name: @review.avatarIcon, type: icon }, {
|
|
1004
|
+
content: @review.authorName
|
|
1005
|
+
type: typography
|
|
1006
|
+
weight: bold
|
|
1007
|
+
}, {
|
|
1008
|
+
color: muted
|
|
1009
|
+
content: "·"
|
|
1010
|
+
type: typography
|
|
1011
|
+
}, {
|
|
1012
|
+
color: warning
|
|
1013
|
+
name: star
|
|
1014
|
+
type: icon
|
|
1015
|
+
}, {
|
|
1016
|
+
content: @review.rating
|
|
1017
|
+
type: typography
|
|
1018
|
+
weight: bold
|
|
1019
|
+
}, {
|
|
1020
|
+
color: muted
|
|
1021
|
+
content: "·"
|
|
1022
|
+
type: typography
|
|
1023
|
+
}, {
|
|
1024
|
+
color: muted
|
|
1025
|
+
content: @review.createdAt
|
|
1026
|
+
type: typography
|
|
1027
|
+
variant: caption
|
|
1028
|
+
}]
|
|
1029
|
+
direction: horizontal
|
|
1030
|
+
gap: sm
|
|
1031
|
+
type: stack
|
|
1032
|
+
}, {
|
|
1033
|
+
content: @review.comment
|
|
1034
|
+
type: typography
|
|
1035
|
+
variant: body
|
|
1036
|
+
}, {
|
|
1037
|
+
align: center
|
|
1038
|
+
children: [{
|
|
1039
|
+
action: MARK_HELPFUL
|
|
1040
|
+
actionPayload: { id: @review.id }
|
|
1041
|
+
icon: thumbs-up
|
|
1042
|
+
label: Helpful
|
|
1043
|
+
type: button
|
|
1044
|
+
variant: ghost
|
|
1045
|
+
}, {
|
|
1046
|
+
color: muted
|
|
1047
|
+
content: @review.helpful
|
|
1048
|
+
type: typography
|
|
1049
|
+
variant: caption
|
|
1050
|
+
}]
|
|
1051
|
+
direction: horizontal
|
|
1052
|
+
gap: sm
|
|
1053
|
+
type: stack
|
|
1054
|
+
}]
|
|
1055
|
+
direction: vertical
|
|
1056
|
+
gap: sm
|
|
1057
|
+
type: stack
|
|
1058
|
+
}]
|
|
1059
|
+
look: @config.cardLook
|
|
1060
|
+
type: card
|
|
1061
|
+
})
|
|
1062
|
+
type: data-list
|
|
1063
|
+
}]
|
|
1064
|
+
direction: vertical
|
|
1065
|
+
gap: lg
|
|
1066
|
+
type: stack
|
|
887
1067
|
})
|
|
888
1068
|
}
|
|
889
1069
|
|
|
@@ -1539,7 +1719,38 @@ orbital RatingReviewOrbital {
|
|
|
1539
1719
|
}
|
|
1540
1720
|
}
|
|
1541
1721
|
|
|
1542
|
-
|
|
1722
|
+
trait RatingReviewPageNav -> ReviewView [interaction, instance] {
|
|
1723
|
+
initial: ready
|
|
1724
|
+
|
|
1725
|
+
state ready {
|
|
1726
|
+
INIT -> ready
|
|
1727
|
+
(render-ui main {
|
|
1728
|
+
action: OPEN_REVIEW_FORM
|
|
1729
|
+
icon: external-link
|
|
1730
|
+
label: "Open review form"
|
|
1731
|
+
type: button
|
|
1732
|
+
variant: ghost
|
|
1733
|
+
})
|
|
1734
|
+
OPEN_REVIEW_FORM -> ready
|
|
1735
|
+
(navigate "/reviews/new")
|
|
1736
|
+
}
|
|
1737
|
+
|
|
1738
|
+
emits {
|
|
1739
|
+
OPEN_REVIEW_FORM
|
|
1740
|
+
@description "Opens the standalone review-submission page."
|
|
1741
|
+
@synonyms "open form, new page, direct link"
|
|
1742
|
+
@tier "presentation"
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1745
|
+
listens {
|
|
1746
|
+
OPEN_REVIEW_FORM
|
|
1747
|
+
@description "Opens the standalone review-submission page in place of the inline composer."
|
|
1748
|
+
@synonyms "open form, new page, direct link"
|
|
1749
|
+
@tier "presentation"
|
|
1750
|
+
}
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1753
|
+
page "/reviews" as RatingReviewPage -> RatingReviewBoard, RatingReviewPageNav
|
|
1543
1754
|
|
|
1544
1755
|
page "/reviews/new" as RatingReviewSubmitPage -> RatingReviewSubmit
|
|
1545
1756
|
}
|
|
@@ -32,6 +32,12 @@ orbital DataGridOrbital {
|
|
|
32
32
|
code : string
|
|
33
33
|
stack : string
|
|
34
34
|
}
|
|
35
|
+
type DataGridRelationsDataValueItem = {
|
|
36
|
+
value : string!
|
|
37
|
+
label : string!
|
|
38
|
+
description : string
|
|
39
|
+
disabled : boolean
|
|
40
|
+
}
|
|
35
41
|
|
|
36
42
|
entity DataGridItem [runtime] {
|
|
37
43
|
id : string!
|
|
@@ -72,6 +78,7 @@ orbital DataGridOrbital {
|
|
|
72
78
|
hasMore: @config.hasMore
|
|
73
79
|
pageSize: @config.pageSize
|
|
74
80
|
look: @config.look
|
|
81
|
+
relationsData: @config.relationsData
|
|
75
82
|
type: data-grid
|
|
76
83
|
})
|
|
77
84
|
INIT -> idle when (not @config.selfFetch)
|
|
@@ -104,6 +111,7 @@ orbital DataGridOrbital {
|
|
|
104
111
|
hasMore: @config.hasMore
|
|
105
112
|
pageSize: @config.pageSize
|
|
106
113
|
look: @config.look
|
|
114
|
+
relationsData: @config.relationsData
|
|
107
115
|
type: data-grid
|
|
108
116
|
})
|
|
109
117
|
DataGridLoaded -> idle
|
|
@@ -136,6 +144,7 @@ orbital DataGridOrbital {
|
|
|
136
144
|
hasMore: @config.hasMore
|
|
137
145
|
pageSize: @config.pageSize
|
|
138
146
|
look: @config.look
|
|
147
|
+
relationsData: @config.relationsData
|
|
139
148
|
type: data-grid
|
|
140
149
|
})
|
|
141
150
|
}
|
|
@@ -270,6 +279,10 @@ orbital DataGridOrbital {
|
|
|
270
279
|
@label "Look"
|
|
271
280
|
@description "Layer 2 visual treatment — mirrors the `entity-table` look enum so data-grid / data-list / entity-table share one knob name from authors."
|
|
272
281
|
@tier "presentation"
|
|
282
|
+
relationsData : Map string [DataGridRelationsDataValueItem] = {}
|
|
283
|
+
@label "Relations Data"
|
|
284
|
+
@description "Relation display data: { fieldName: [{value, label}] } — injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a field whose type is relation. Same contract DetailPanel takes."
|
|
285
|
+
@tier "presentation"
|
|
273
286
|
selfFetch : boolean = true
|
|
274
287
|
@label "Fetch its own rows on mount?"
|
|
275
288
|
@description "true (default) = standalone mount self-populates on INIT. false = a composing atom owns the fetch and routes its loaded event here — suppresses the wrapper's own un-hydrated fetch so it cannot race the composer's."
|
|
@@ -38,6 +38,12 @@ orbital DataListOrbital {
|
|
|
38
38
|
icon : icon
|
|
39
39
|
variant : "primary" | "secondary" | "danger" | "ghost"
|
|
40
40
|
}
|
|
41
|
+
type DataListRelationsDataValueItem = {
|
|
42
|
+
value : string!
|
|
43
|
+
label : string!
|
|
44
|
+
description : string
|
|
45
|
+
disabled : boolean
|
|
46
|
+
}
|
|
41
47
|
|
|
42
48
|
entity DataListItem [runtime] {
|
|
43
49
|
id : string!
|
|
@@ -87,6 +93,7 @@ orbital DataListOrbital {
|
|
|
87
93
|
sortBy: @config.sortBy
|
|
88
94
|
sortDirection: @config.sortDirection
|
|
89
95
|
look: @config.look
|
|
96
|
+
relationsData: @config.relationsData
|
|
90
97
|
type: data-list
|
|
91
98
|
})
|
|
92
99
|
INIT -> idle when (not @config.selfFetch)
|
|
@@ -128,6 +135,7 @@ orbital DataListOrbital {
|
|
|
128
135
|
sortBy: @config.sortBy
|
|
129
136
|
sortDirection: @config.sortDirection
|
|
130
137
|
look: @config.look
|
|
138
|
+
relationsData: @config.relationsData
|
|
131
139
|
type: data-list
|
|
132
140
|
})
|
|
133
141
|
DataListLoaded -> idle
|
|
@@ -169,6 +177,7 @@ orbital DataListOrbital {
|
|
|
169
177
|
sortBy: @config.sortBy
|
|
170
178
|
sortDirection: @config.sortDirection
|
|
171
179
|
look: @config.look
|
|
180
|
+
relationsData: @config.relationsData
|
|
172
181
|
type: data-list
|
|
173
182
|
})
|
|
174
183
|
}
|
|
@@ -352,6 +361,10 @@ orbital DataListOrbital {
|
|
|
352
361
|
@label "Look"
|
|
353
362
|
@description "Layer 2 visual treatment — mirrors the `entity-table` look enum so data-grid / data-list / entity-table share one knob name from authors."
|
|
354
363
|
@tier "presentation"
|
|
364
|
+
relationsData : Map string [DataListRelationsDataValueItem] = {}
|
|
365
|
+
@label "Relations Data"
|
|
366
|
+
@description "Relation display data: { fieldName: [{value, label}] } — injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a field whose type is relation. Same contract DetailPanel takes."
|
|
367
|
+
@tier "presentation"
|
|
355
368
|
selfFetch : boolean = true
|
|
356
369
|
@label "Fetch its own rows on mount?"
|
|
357
370
|
@description "true (default) = standalone mount self-populates on INIT. false = a composing atom owns the fetch and routes its loaded event here — suppresses the wrapper's own un-hydrated fetch so it cannot race the composer's."
|
|
@@ -41,6 +41,12 @@ orbital TableViewOrbital {
|
|
|
41
41
|
code : string
|
|
42
42
|
stack : string
|
|
43
43
|
}
|
|
44
|
+
type TableViewRelationsDataValueItem = {
|
|
45
|
+
value : string!
|
|
46
|
+
label : string!
|
|
47
|
+
description : string
|
|
48
|
+
disabled : boolean
|
|
49
|
+
}
|
|
44
50
|
|
|
45
51
|
entity TableViewItem [runtime] {
|
|
46
52
|
id : string!
|
|
@@ -80,6 +86,7 @@ orbital TableViewOrbital {
|
|
|
80
86
|
groupBy: @config.groupBy
|
|
81
87
|
pageSize: @config.pageSize
|
|
82
88
|
look: @config.look
|
|
89
|
+
relationsData: @config.relationsData
|
|
83
90
|
type: table-view
|
|
84
91
|
})
|
|
85
92
|
INIT -> idle when (not @config.selfFetch)
|
|
@@ -111,6 +118,7 @@ orbital TableViewOrbital {
|
|
|
111
118
|
groupBy: @config.groupBy
|
|
112
119
|
pageSize: @config.pageSize
|
|
113
120
|
look: @config.look
|
|
121
|
+
relationsData: @config.relationsData
|
|
114
122
|
type: table-view
|
|
115
123
|
})
|
|
116
124
|
TableViewLoaded -> idle
|
|
@@ -142,6 +150,7 @@ orbital TableViewOrbital {
|
|
|
142
150
|
groupBy: @config.groupBy
|
|
143
151
|
pageSize: @config.pageSize
|
|
144
152
|
look: @config.look
|
|
153
|
+
relationsData: @config.relationsData
|
|
145
154
|
type: table-view
|
|
146
155
|
})
|
|
147
156
|
}
|
|
@@ -275,6 +284,10 @@ orbital TableViewOrbital {
|
|
|
275
284
|
@label "Look"
|
|
276
285
|
@description "Layer 2 visual treatment — mirrors the data-list / entity-table look enum so authors share one knob name across row renderers."
|
|
277
286
|
@tier "presentation"
|
|
287
|
+
relationsData : Map string [TableViewRelationsDataValueItem] = {}
|
|
288
|
+
@label "Relations Data"
|
|
289
|
+
@description "Relation display data: { fieldName: [{value, label}] } — injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a column whose field is relation-typed. Same contract DetailPanel takes."
|
|
290
|
+
@tier "presentation"
|
|
278
291
|
selfFetch : boolean = true
|
|
279
292
|
@label "Fetch its own rows on mount?"
|
|
280
293
|
@description "true (default) = standalone mount self-populates on INIT. false = a composing atom owns the fetch and routes its loaded event here — suppresses the wrapper's own un-hydrated fetch so it cannot race the composer's."
|
|
@@ -48,6 +48,12 @@ orbital EntityTableOrbital {
|
|
|
48
48
|
variant : "default" | "danger"
|
|
49
49
|
event : event
|
|
50
50
|
}
|
|
51
|
+
type EntityTableRelationsDataValueItem = {
|
|
52
|
+
value : string!
|
|
53
|
+
label : string!
|
|
54
|
+
description : string
|
|
55
|
+
disabled : boolean
|
|
56
|
+
}
|
|
51
57
|
|
|
52
58
|
entity EntityTableItem [runtime] {
|
|
53
59
|
id : string!
|
|
@@ -87,6 +93,7 @@ orbital EntityTableOrbital {
|
|
|
87
93
|
headerActions: @config.headerActions
|
|
88
94
|
showTotal: @config.showTotal
|
|
89
95
|
look: @config.look
|
|
96
|
+
relationsData: @config.relationsData
|
|
90
97
|
type: entity-table
|
|
91
98
|
})
|
|
92
99
|
INIT -> idle when (not @config.selfFetch)
|
|
@@ -118,6 +125,7 @@ orbital EntityTableOrbital {
|
|
|
118
125
|
headerActions: @config.headerActions
|
|
119
126
|
showTotal: @config.showTotal
|
|
120
127
|
look: @config.look
|
|
128
|
+
relationsData: @config.relationsData
|
|
121
129
|
type: entity-table
|
|
122
130
|
})
|
|
123
131
|
EntityTableLoaded -> idle
|
|
@@ -149,6 +157,7 @@ orbital EntityTableOrbital {
|
|
|
149
157
|
headerActions: @config.headerActions
|
|
150
158
|
showTotal: @config.showTotal
|
|
151
159
|
look: @config.look
|
|
160
|
+
relationsData: @config.relationsData
|
|
152
161
|
type: entity-table
|
|
153
162
|
})
|
|
154
163
|
}
|
|
@@ -272,6 +281,10 @@ orbital EntityTableOrbital {
|
|
|
272
281
|
@label "Look"
|
|
273
282
|
@description "Layer 2 visual treatment — orthogonal to the semantic variant."
|
|
274
283
|
@tier "presentation"
|
|
284
|
+
relationsData : Map string [EntityTableRelationsDataValueItem] = {}
|
|
285
|
+
@label "Relations Data"
|
|
286
|
+
@description "Relation display data: { fieldName: [{value, label}] } — injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a column whose field is relation-typed. Same contract DetailPanel takes."
|
|
287
|
+
@tier "presentation"
|
|
275
288
|
selfFetch : boolean = true
|
|
276
289
|
@label "Fetch its own rows on mount?"
|
|
277
290
|
@description "true (default) = standalone mount self-populates on INIT. false = a composing atom owns the fetch and routes its loaded event here — suppresses the wrapper's own un-hydrated fetch so it cannot race the composer's."
|
|
@@ -135,11 +135,11 @@ orbital Canvas2dOrbital {
|
|
|
135
135
|
@label "Tile Leave Event"
|
|
136
136
|
@description "Emits UI:{tileLeaveEvent} with {} on pointer leave."
|
|
137
137
|
@tier "presentation"
|
|
138
|
-
keyMap : Map string string = { item: "
|
|
138
|
+
keyMap : Map string string = { item: "INIT" }
|
|
139
139
|
@label "Key Map"
|
|
140
140
|
@description "Maps a keydown `e.code` → the board's SEMANTIC event (device-agnostic input)."
|
|
141
141
|
@tier "presentation"
|
|
142
|
-
keyUpMap : Map string string = { item: "
|
|
142
|
+
keyUpMap : Map string string = { item: "INIT" }
|
|
143
143
|
@label "Key Up Map"
|
|
144
144
|
@description "Maps a keyup `e.code` → the board's SEMANTIC event."
|
|
145
145
|
@tier "presentation"
|
|
@@ -272,11 +272,11 @@ orbital CanvasOrbital {
|
|
|
272
272
|
@label "Feature Click Event"
|
|
273
273
|
@description "Feature-click event (3D only)."
|
|
274
274
|
@tier "presentation"
|
|
275
|
-
keyMap : Map string string = { item: "
|
|
275
|
+
keyMap : Map string string = { item: "INIT" }
|
|
276
276
|
@label "Key Map"
|
|
277
277
|
@description "keyMap prop"
|
|
278
278
|
@tier "presentation"
|
|
279
|
-
keyUpMap : Map string string = { item: "
|
|
279
|
+
keyUpMap : Map string string = { item: "INIT" }
|
|
280
280
|
@label "Key Up Map"
|
|
281
281
|
@description "keyUpMap prop"
|
|
282
282
|
@tier "presentation"
|
|
@@ -114,11 +114,11 @@ orbital ControlGridOrbital {
|
|
|
114
114
|
@label "Direction Event"
|
|
115
115
|
@description "Event-bus event emitted with `{ direction, pressed }` (kind='dpad')"
|
|
116
116
|
@tier "presentation"
|
|
117
|
-
directionEvents : Map string string = { item: "
|
|
117
|
+
directionEvents : Map string string = { item: "INIT" }
|
|
118
118
|
@label "Direction Events"
|
|
119
119
|
@description "Per-direction PRESS → the board's SEMANTIC event (kind='dpad'), e.g. `{ left: 'LEFT', right: 'RIGHT', up: 'JUMP' }`. Lets the d-pad emit the SAME intent events as the keyboard so the FSM stays device-agnostic."
|
|
120
120
|
@tier "presentation"
|
|
121
|
-
directionReleaseEvents : Map string string = { item: "
|
|
121
|
+
directionReleaseEvents : Map string string = { item: "INIT" }
|
|
122
122
|
@label "Direction Release Events"
|
|
123
123
|
@description "Per-direction RELEASE → semantic event, e.g. `{ left: 'STOP', right: 'STOP' }`. Omit a direction to ignore its release."
|
|
124
124
|
@tier "presentation"
|
|
@@ -407,11 +407,11 @@ orbital MathCanvasOrbital {
|
|
|
407
407
|
@label "On Shape Click"
|
|
408
408
|
@description "onShapeClick prop"
|
|
409
409
|
@tier "presentation"
|
|
410
|
-
keyMap : Map string string = { item: "
|
|
410
|
+
keyMap : Map string string = { item: "INIT" }
|
|
411
411
|
@label "Key Map"
|
|
412
412
|
@description "Maps a keydown `e.code` → the board's SEMANTIC event (device-agnostic input), emitted as `UI:{event}` — same contract as the game canvas keyMap."
|
|
413
413
|
@tier "presentation"
|
|
414
|
-
keyUpMap : Map string string = { item: "
|
|
414
|
+
keyUpMap : Map string string = { item: "INIT" }
|
|
415
415
|
@label "Key Up Map"
|
|
416
416
|
@description "Maps a keyup `e.code` → the board's SEMANTIC event."
|
|
417
417
|
@tier "presentation"
|
|
@@ -467,6 +467,10 @@
|
|
|
467
467
|
{
|
|
468
468
|
"kind": "llm/generate"
|
|
469
469
|
},
|
|
470
|
+
{
|
|
471
|
+
"kind": "navigate",
|
|
472
|
+
"resource": "/rabit/process"
|
|
473
|
+
},
|
|
470
474
|
{
|
|
471
475
|
"kind": "session/write-spec"
|
|
472
476
|
},
|
|
@@ -787,6 +791,10 @@
|
|
|
787
791
|
"plan": "@entity.plan",
|
|
788
792
|
"totalOrbitals": "@entity.totalOrbitals"
|
|
789
793
|
}
|
|
794
|
+
],
|
|
795
|
+
[
|
|
796
|
+
"navigate",
|
|
797
|
+
"/rabit/process"
|
|
790
798
|
]
|
|
791
799
|
],
|
|
792
800
|
"event": "PLANNED",
|