@almadar/std 16.191.0 → 16.193.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +184 -18
- package/behaviors/lolo/infra/atoms/std-status-lifecycle.lolo +16 -3
- package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +6 -0
- package/behaviors/lolo/ui/core/atoms/std-billable-hour.lolo +1 -0
- package/behaviors/lolo/ui/core/atoms/std-browse.lolo +3 -0
- package/behaviors/lolo/ui/core/atoms/std-image-upload-multi.lolo +37 -4
- package/behaviors/lolo/ui/core/atoms/std-record-detail.lolo +37 -0
- package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +314 -0
- package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +195 -13
- package/behaviors/lolo/ui/core/atoms/std-tree.lolo +104 -12
- package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +3 -1
- package/behaviors/lolo/ui/core/molecules/ui-calendar-grid.lolo +25 -1
- package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +37 -1
- package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +46 -1
- package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +30 -2
- package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +14 -0
- package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +25 -0
- package/behaviors/lolo/ui/core/molecules/ui-positioned-canvas.lolo +19 -1
- package/behaviors/lolo/ui/core/molecules/ui-reply-tree.lolo +21 -1
- package/behaviors/lolo/ui/core/molecules/ui-sortable-list.lolo +15 -1
- package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +36 -1
- package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +41 -1
- package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +34 -1
- package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +30 -1
- package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +36 -1
- package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +39 -1
- package/behaviors/lolo/ui/core/organisms/ui-form.lolo +39 -1
- package/behaviors/lolo/ui/core/organisms/ui-master-detail.lolo +24 -1
- package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +30 -1
- package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +37 -1
- package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +18 -1
- package/behaviors/lolo/ui/core/templates/ui-counter-template.lolo +21 -1
- package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +5 -0
- package/behaviors/lolo/ui/core/templates/ui-generic-app-template.lolo +16 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-book-chapter-view.lolo +12 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-book-table-of-contents.lolo +13 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-book-viewer.lolo +23 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-case-study-organism.lolo +23 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-feature-grid-organism.lolo +24 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-hero-organism.lolo +22 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-pricing-organism.lolo +23 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-showcase-organism.lolo +24 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-stats-organism.lolo +22 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-step-flow-organism.lolo +25 -1
- package/behaviors/lolo/ui/marketing/organisms/ui-team-organism.lolo +23 -1
- package/behaviors/lolo/ui/marketing/templates/ui-about-page-template.lolo +11 -1
- package/behaviors/lolo/ui/marketing/templates/ui-feature-detail-page-template.lolo +11 -1
- package/behaviors/lolo/ui/marketing/templates/ui-landing-page-template.lolo +13 -1
- package/behaviors/lolo/ui/marketing/templates/ui-pricing-page-template.lolo +11 -1
- package/behaviors/registry/infra/atoms/std-approval-gate.orb +717 -45
- package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +85 -10
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +8 -0
- package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +5 -2
- package/behaviors/registry/ui/core/atoms/std-browse.orb +12 -0
- package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +129 -7
- package/behaviors/registry/ui/core/atoms/std-record-detail.orb +316 -0
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +1360 -0
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +564 -10
- package/behaviors/registry/ui/core/atoms/std-tree.orb +427 -66
- package/behaviors/registry/ui/core/atoms/std-version-history.orb +5 -1
- package/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +43 -0
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +55 -0
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +64 -0
- package/behaviors/registry/ui/core/molecules/ui-document-details.orb +106 -1
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +18 -0
- package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +41 -0
- package/behaviors/registry/ui/core/molecules/ui-positioned-canvas.orb +37 -0
- package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +39 -0
- package/behaviors/registry/ui/core/molecules/ui-sortable-list.orb +45 -0
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +54 -0
- package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +59 -0
- package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +52 -0
- package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +48 -0
- package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +54 -0
- package/behaviors/registry/ui/core/organisms/ui-form-section.orb +57 -0
- package/behaviors/registry/ui/core/organisms/ui-form.orb +57 -0
- package/behaviors/registry/ui/core/organisms/ui-master-detail.orb +42 -0
- package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +48 -0
- package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +55 -0
- package/behaviors/registry/ui/core/organisms/ui-timeline.orb +36 -0
- package/behaviors/registry/ui/core/templates/ui-counter-template.orb +39 -0
- package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +7 -0
- package/behaviors/registry/ui/core/templates/ui-generic-app-template.orb +34 -0
- package/behaviors/registry/ui/marketing/organisms/ui-book-chapter-view.orb +30 -0
- package/behaviors/registry/ui/marketing/organisms/ui-book-table-of-contents.orb +31 -0
- package/behaviors/registry/ui/marketing/organisms/ui-book-viewer.orb +41 -0
- package/behaviors/registry/ui/marketing/organisms/ui-case-study-organism.orb +41 -0
- package/behaviors/registry/ui/marketing/organisms/ui-feature-grid-organism.orb +42 -0
- package/behaviors/registry/ui/marketing/organisms/ui-hero-organism.orb +40 -0
- package/behaviors/registry/ui/marketing/organisms/ui-pricing-organism.orb +41 -0
- package/behaviors/registry/ui/marketing/organisms/ui-showcase-organism.orb +42 -0
- package/behaviors/registry/ui/marketing/organisms/ui-stats-organism.orb +40 -0
- package/behaviors/registry/ui/marketing/organisms/ui-step-flow-organism.orb +43 -0
- package/behaviors/registry/ui/marketing/organisms/ui-team-organism.orb +41 -0
- package/behaviors/registry/ui/marketing/templates/ui-about-page-template.orb +29 -0
- package/behaviors/registry/ui/marketing/templates/ui-feature-detail-page-template.orb +29 -0
- package/behaviors/registry/ui/marketing/templates/ui-landing-page-template.orb +31 -0
- package/behaviors/registry/ui/marketing/templates/ui-pricing-page-template.orb +29 -0
- package/dist/behaviors/exports-reader.js +4884 -1967
- package/dist/behaviors/functions/index.d.ts +293 -13
- package/dist/behaviors/functions/index.js +4880 -1968
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +4885 -1968
- package/dist/behaviors/query.js +4884 -1967
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +21 -13
- package/dist/behaviors-registry.json +685 -60
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4885 -1968
- 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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
app std-tree "1.0.0"
|
|
2
|
-
"std-tree — generic hierarchical node browser. Fetches a flat TreeNode collection and renders it through file-tree's flat `items` mode (parentId-nested at render time by the component, not the .lolo); OPEN_NODE is the external handoff for a selected node's id. Rebindable: pass `fields` at the call site to retarget it at any parent-pointer entity (categories, org units, comment threads). Search/filter are wired (REFETCH_QUERY/REFETCH_FILTER re-fetch the flat node set server-side); pagination is deliberately NOT offered — a hierarchy is not a paged list, and paging a flat node set would sever children from parents that fell on another page."
|
|
2
|
+
"std-tree — generic hierarchical node browser. Fetches a flat TreeNode collection and renders it through file-tree's flat `items` mode (parentId-nested at render time by the component, not the .lolo); OPEN_NODE is the external handoff for a selected node's id. Rebindable: pass `fields` at the call site to retarget it at any parent-pointer entity (categories, org units, comment threads). Search/filter are wired (REFETCH_QUERY/REFETCH_FILTER re-fetch the flat node set server-side). `look: rail` renders the compact sidebar-navigation form (slim caption, nav-styled rows) for mounting in an app layout's sidebarTrait; SET_CURRENT marks the open record so the row highlights and its ancestors auto-expand; `childAction: true` renders a hover plus-affordance per row emitting CHILD_REQUESTED { parentId } for the host's create-draft writer; pagination is deliberately NOT offered — a hierarchy is not a paged list, and paging a flat node set would sever children from parents that fell on another page."
|
|
3
3
|
type FilterSpec = { field : string!, label : string, options : [string] }
|
|
4
4
|
orbital TreeNodeOrbital {
|
|
5
5
|
type TreeNodeLoaded = Event { data : [TreeNode] } "Fired when the tree node collection finishes loading"
|
|
@@ -18,6 +18,11 @@ orbital TreeNodeOrbital {
|
|
|
18
18
|
initial: loading
|
|
19
19
|
|
|
20
20
|
state loading {
|
|
21
|
+
SET_CURRENT -> loading
|
|
22
|
+
(set @entity.id ?id)
|
|
23
|
+
(fetch TreeNode {
|
|
24
|
+
emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
|
|
25
|
+
})
|
|
21
26
|
INIT -> loading
|
|
22
27
|
(fetch TreeNode {
|
|
23
28
|
emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
|
|
@@ -37,7 +42,13 @@ orbital TreeNodeOrbital {
|
|
|
37
42
|
})
|
|
38
43
|
TreeNodeLoaded -> browsing
|
|
39
44
|
(render-ui main {
|
|
40
|
-
children: [{
|
|
45
|
+
children: [(if ["=", @config.look, "rail"] {
|
|
46
|
+
className: "px-2 pb-1 uppercase tracking-wide"
|
|
47
|
+
color: muted
|
|
48
|
+
content: @config.title
|
|
49
|
+
type: typography
|
|
50
|
+
variant: caption
|
|
51
|
+
} {
|
|
41
52
|
align: center
|
|
42
53
|
children: [{ name: list-tree, type: icon }, {
|
|
43
54
|
content: @config.title
|
|
@@ -52,7 +63,11 @@ orbital TreeNodeOrbital {
|
|
|
52
63
|
direction: horizontal
|
|
53
64
|
gap: sm
|
|
54
65
|
type: stack
|
|
55
|
-
},
|
|
66
|
+
}), (if ["=", @config.look, "rail"] {
|
|
67
|
+
children: []
|
|
68
|
+
gap: none
|
|
69
|
+
type: stack
|
|
70
|
+
} { type: divider }), (if @config.bodySearch {
|
|
56
71
|
children: [{
|
|
57
72
|
className: "w-full max-w-md"
|
|
58
73
|
clearable: true
|
|
@@ -84,12 +99,17 @@ orbital TreeNodeOrbital {
|
|
|
84
99
|
type: stack
|
|
85
100
|
}), {
|
|
86
101
|
items: (array/map ?data (fn row {
|
|
87
|
-
icon: @row.
|
|
102
|
+
icon: (str/default (object/get @row @config.iconField) "")
|
|
88
103
|
id: @row.id
|
|
89
|
-
label: @row.
|
|
90
|
-
parentId: @row.
|
|
104
|
+
label: (str/default (object/get @row @config.labelField) "")
|
|
105
|
+
parentId: (str/default (object/get @row @config.parentField) "")
|
|
91
106
|
}))
|
|
107
|
+
look: (if ["=", @config.look, "rail"] nav files)
|
|
108
|
+
nodeActionIcon: plus
|
|
109
|
+
nodeActionLabel: @config.childActionLabel
|
|
110
|
+
onNodeAction: (if @config.childAction ADD_CHILD null)
|
|
92
111
|
onNodeSelect: OPEN_NODE
|
|
112
|
+
selectedId: (str/default (object/get @entity id) "")
|
|
93
113
|
type: file-tree
|
|
94
114
|
}]
|
|
95
115
|
direction: vertical
|
|
@@ -153,7 +173,7 @@ orbital TreeNodeOrbital {
|
|
|
153
173
|
REFETCH_QUERY -> browsing
|
|
154
174
|
(fetch TreeNode {
|
|
155
175
|
emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
|
|
156
|
-
filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity
|
|
176
|
+
filter: (or ["=", ?searchTerm, ""] (str/includes (str/default (object/get @entity @config.labelField) "") ?searchTerm))
|
|
157
177
|
})
|
|
158
178
|
REFETCH_FILTER -> browsing
|
|
159
179
|
(fetch TreeNode {
|
|
@@ -162,9 +182,25 @@ orbital TreeNodeOrbital {
|
|
|
162
182
|
})
|
|
163
183
|
OPEN_NODE -> browsing
|
|
164
184
|
(set @entity.id ?id)
|
|
185
|
+
;; The open record changed (routed from the host document's load
|
|
186
|
+
;; events): remember it and re-fetch so the re-render highlights the
|
|
187
|
+
;; row and unfolds its ancestors.
|
|
188
|
+
SET_CURRENT -> browsing
|
|
189
|
+
(set @entity.id ?id)
|
|
190
|
+
(fetch TreeNode {
|
|
191
|
+
emit: { failure: TreeNodeLoadFailed, success: TreeNodeLoaded }
|
|
192
|
+
})
|
|
193
|
+
ADD_CHILD -> browsing
|
|
194
|
+
(emit CHILD_REQUESTED { parentId: ?id })
|
|
165
195
|
TreeNodeLoaded -> browsing
|
|
166
196
|
(render-ui main {
|
|
167
|
-
children: [{
|
|
197
|
+
children: [(if ["=", @config.look, "rail"] {
|
|
198
|
+
className: "px-2 pb-1 uppercase tracking-wide"
|
|
199
|
+
color: muted
|
|
200
|
+
content: @config.title
|
|
201
|
+
type: typography
|
|
202
|
+
variant: caption
|
|
203
|
+
} {
|
|
168
204
|
align: center
|
|
169
205
|
children: [{ name: list-tree, type: icon }, {
|
|
170
206
|
content: @config.title
|
|
@@ -179,7 +215,11 @@ orbital TreeNodeOrbital {
|
|
|
179
215
|
direction: horizontal
|
|
180
216
|
gap: sm
|
|
181
217
|
type: stack
|
|
182
|
-
},
|
|
218
|
+
}), (if ["=", @config.look, "rail"] {
|
|
219
|
+
children: []
|
|
220
|
+
gap: none
|
|
221
|
+
type: stack
|
|
222
|
+
} { type: divider }), (if @config.bodySearch {
|
|
183
223
|
children: [{
|
|
184
224
|
className: "w-full max-w-md"
|
|
185
225
|
clearable: true
|
|
@@ -211,12 +251,17 @@ orbital TreeNodeOrbital {
|
|
|
211
251
|
type: stack
|
|
212
252
|
}), {
|
|
213
253
|
items: (array/map ?data (fn row {
|
|
214
|
-
icon: @row.
|
|
254
|
+
icon: (str/default (object/get @row @config.iconField) "")
|
|
215
255
|
id: @row.id
|
|
216
|
-
label: @row.
|
|
217
|
-
parentId: @row.
|
|
256
|
+
label: (str/default (object/get @row @config.labelField) "")
|
|
257
|
+
parentId: (str/default (object/get @row @config.parentField) "")
|
|
218
258
|
}))
|
|
259
|
+
look: (if ["=", @config.look, "rail"] nav files)
|
|
260
|
+
nodeActionIcon: plus
|
|
261
|
+
nodeActionLabel: @config.childActionLabel
|
|
262
|
+
onNodeAction: (if @config.childAction ADD_CHILD null)
|
|
219
263
|
onNodeSelect: OPEN_NODE
|
|
264
|
+
selectedId: (str/default (object/get @entity id) "")
|
|
220
265
|
type: file-tree
|
|
221
266
|
}]
|
|
222
267
|
direction: vertical
|
|
@@ -275,6 +320,12 @@ orbital TreeNodeOrbital {
|
|
|
275
320
|
@description "Signals a tree node has been selected for external handoff."
|
|
276
321
|
@synonyms "select, choose, open, activate"
|
|
277
322
|
@tier "domain"
|
|
323
|
+
CHILD_REQUESTED -> external {
|
|
324
|
+
parentId : string!
|
|
325
|
+
}
|
|
326
|
+
@description "Create a new record under this node — the host routes it into its create-draft writer with parentId stamped."
|
|
327
|
+
@synonyms "new subpage, add child page, create under"
|
|
328
|
+
@tier "domain"
|
|
278
329
|
TreeNodeLoaded {
|
|
279
330
|
data : [TreeNode]
|
|
280
331
|
}
|
|
@@ -291,6 +342,18 @@ orbital TreeNodeOrbital {
|
|
|
291
342
|
}
|
|
292
343
|
|
|
293
344
|
listens {
|
|
345
|
+
SET_CURRENT {
|
|
346
|
+
id : string!
|
|
347
|
+
}
|
|
348
|
+
@description "Mark this record as the open one (routed from the host document's load events); its row highlights and its ancestors auto-expand."
|
|
349
|
+
@synonyms "highlight current, select node, you are here"
|
|
350
|
+
@tier "domain"
|
|
351
|
+
ADD_CHILD {
|
|
352
|
+
id : string!
|
|
353
|
+
}
|
|
354
|
+
@description "The row's hover + affordance was clicked."
|
|
355
|
+
@synonyms "add inside, new child"
|
|
356
|
+
@tier "presentation"
|
|
294
357
|
REFETCH_QUERY {
|
|
295
358
|
searchTerm : string!
|
|
296
359
|
}
|
|
@@ -330,6 +393,35 @@ orbital TreeNodeOrbital {
|
|
|
330
393
|
@label "Section title"
|
|
331
394
|
@description "Heading shown above the tree"
|
|
332
395
|
@tier "presentation"
|
|
396
|
+
labelField : string = name
|
|
397
|
+
@label "Label column"
|
|
398
|
+
@description "Entity field rendered as each node's label. Config-driven on purpose: the trait-level `fields {}` remap is compiled-path-only (the JS runtime never applies it), so a rebind names its columns here and both execution paths agree."
|
|
399
|
+
@synonyms "title field, name column, display field"
|
|
400
|
+
@tier "domain"
|
|
401
|
+
parentField : string = parentId
|
|
402
|
+
@label "Parent column"
|
|
403
|
+
@description "Entity field holding the parent reference the hierarchy nests by."
|
|
404
|
+
@synonyms "parent id field, hierarchy column"
|
|
405
|
+
@tier "domain"
|
|
406
|
+
iconField : string = icon
|
|
407
|
+
@label "Icon column"
|
|
408
|
+
@description "Entity field holding each node's icon name; point it at a nonexistent field (or empty) to suppress per-node icons."
|
|
409
|
+
@synonyms "glyph field, icon column"
|
|
410
|
+
@tier "presentation"
|
|
411
|
+
look : "full" | "rail" = full
|
|
412
|
+
@label "Tree look"
|
|
413
|
+
@description "full = standalone section (heading, count, divider); rail = compact sidebar navigation (slim caption, nav-styled rows) for an app layout's sidebarTrait slot."
|
|
414
|
+
@synonyms "sidebar tree, rail look, nav tree, compact"
|
|
415
|
+
@tier "presentation"
|
|
416
|
+
childAction : boolean = false
|
|
417
|
+
@label "Row + affordance?"
|
|
418
|
+
@description "Render a hover + on every row that emits CHILD_REQUESTED { parentId } — wire it to the host's create-draft writer so new records are born inside the node."
|
|
419
|
+
@synonyms "add inside, new subpage button, plus on rows"
|
|
420
|
+
@tier "domain"
|
|
421
|
+
childActionLabel : string = "Add inside"
|
|
422
|
+
@label "Row + tooltip"
|
|
423
|
+
@description "Accessible label on the row's + affordance (e.g. New subpage)."
|
|
424
|
+
@tier "presentation"
|
|
333
425
|
bodySearch : boolean = false
|
|
334
426
|
@label "Show the tree's own search box?"
|
|
335
427
|
@description "Embeds a search box above the tree that re-fetches the flat node set server-side. Set false (the default) when the page already provides a search affordance (a toolbar Search molecule), so the surface shows one search box instead of two."
|
|
@@ -245,7 +245,9 @@ orbital RevisionOrbital {
|
|
|
245
245
|
label: Document
|
|
246
246
|
look: @config.statLook
|
|
247
247
|
type: stat-display
|
|
248
|
-
|
|
248
|
+
;; The captured title, never the raw foreign id — also keeps this
|
|
249
|
+
;; binding scalar when a consumer retypes documentId as a relation.
|
|
250
|
+
value: (str/default @entity.summary "")
|
|
249
251
|
}, {
|
|
250
252
|
icon: layers
|
|
251
253
|
label: Type
|
|
@@ -15,7 +15,7 @@ orbital CalendarGridOrbital {
|
|
|
15
15
|
initial: idle
|
|
16
16
|
|
|
17
17
|
state idle {
|
|
18
|
-
INIT -> idle
|
|
18
|
+
INIT -> idle when @config.selfFetch
|
|
19
19
|
(fetch CalendarGridItem { emit: { success: CalendarGridLoaded } })
|
|
20
20
|
(render-ui main {
|
|
21
21
|
weekStart: @config.weekStart
|
|
@@ -36,6 +36,26 @@ orbital CalendarGridOrbital {
|
|
|
36
36
|
colorField: @config.colorField
|
|
37
37
|
type: calendar-grid
|
|
38
38
|
})
|
|
39
|
+
INIT -> idle when (not @config.selfFetch)
|
|
40
|
+
(render-ui main {
|
|
41
|
+
weekStart: @config.weekStart
|
|
42
|
+
timeSlots: @config.timeSlots
|
|
43
|
+
events: @entity
|
|
44
|
+
onSlotClick: @config.onSlotClick
|
|
45
|
+
onDayClick: @config.onDayClick
|
|
46
|
+
onEventClick: @config.onEventClick
|
|
47
|
+
className: @config.className
|
|
48
|
+
longPressEvent: @config.longPressEvent
|
|
49
|
+
longPressPayload: @config.longPressPayload
|
|
50
|
+
swipeLeftEvent: @config.swipeLeftEvent
|
|
51
|
+
swipeRightEvent: @config.swipeRightEvent
|
|
52
|
+
dayWindow: @config.dayWindow
|
|
53
|
+
titleField: @config.titleField
|
|
54
|
+
startField: @config.startField
|
|
55
|
+
endField: @config.endField
|
|
56
|
+
colorField: @config.colorField
|
|
57
|
+
type: calendar-grid
|
|
58
|
+
})
|
|
39
59
|
CalendarGridLoaded -> idle
|
|
40
60
|
(render-ui main {
|
|
41
61
|
weekStart: @config.weekStart
|
|
@@ -158,6 +178,10 @@ orbital CalendarGridOrbital {
|
|
|
158
178
|
@label "Color Field"
|
|
159
179
|
@description "Row field holding the chip's Tailwind colour class. Defaults to `color`."
|
|
160
180
|
@tier "presentation"
|
|
181
|
+
selfFetch : boolean = true
|
|
182
|
+
@label "Fetch its own rows on mount?"
|
|
183
|
+
@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."
|
|
184
|
+
@tier "internal"
|
|
161
185
|
}
|
|
162
186
|
}
|
|
163
187
|
|
|
@@ -41,7 +41,7 @@ orbital DataGridOrbital {
|
|
|
41
41
|
initial: idle
|
|
42
42
|
|
|
43
43
|
state idle {
|
|
44
|
-
INIT -> idle
|
|
44
|
+
INIT -> idle when @config.selfFetch
|
|
45
45
|
(fetch DataGridItem { emit: { success: DataGridLoaded } })
|
|
46
46
|
(render-ui main {
|
|
47
47
|
dragGroup: @config.dragGroup
|
|
@@ -74,6 +74,38 @@ orbital DataGridOrbital {
|
|
|
74
74
|
look: @config.look
|
|
75
75
|
type: data-grid
|
|
76
76
|
})
|
|
77
|
+
INIT -> idle when (not @config.selfFetch)
|
|
78
|
+
(render-ui main {
|
|
79
|
+
dragGroup: @config.dragGroup
|
|
80
|
+
accepts: @config.accepts
|
|
81
|
+
sortable: @config.sortable
|
|
82
|
+
dropEvent: @config.dropEvent
|
|
83
|
+
reorderEvent: @config.reorderEvent
|
|
84
|
+
positionEvent: @config.positionEvent
|
|
85
|
+
dndItemIdField: @config.dndItemIdField
|
|
86
|
+
dndRoot: @config.dndRoot
|
|
87
|
+
entity: @entity
|
|
88
|
+
fields: @config.fields
|
|
89
|
+
columns: @config.columns
|
|
90
|
+
itemActions: @config.itemActions
|
|
91
|
+
maxInlineActions: @config.maxInlineActions
|
|
92
|
+
scrollX: @config.scrollX
|
|
93
|
+
cols: @config.cols
|
|
94
|
+
gap: @config.gap
|
|
95
|
+
minCardWidth: @config.minCardWidth
|
|
96
|
+
className: @config.className
|
|
97
|
+
isLoading: @config.isLoading
|
|
98
|
+
error: @config.error
|
|
99
|
+
imageField: @config.imageField
|
|
100
|
+
selectable: @config.selectable
|
|
101
|
+
selectionEvent: @config.selectionEvent
|
|
102
|
+
infiniteScroll: @config.infiniteScroll
|
|
103
|
+
loadMoreEvent: @config.loadMoreEvent
|
|
104
|
+
hasMore: @config.hasMore
|
|
105
|
+
pageSize: @config.pageSize
|
|
106
|
+
look: @config.look
|
|
107
|
+
type: data-grid
|
|
108
|
+
})
|
|
77
109
|
DataGridLoaded -> idle
|
|
78
110
|
(render-ui main {
|
|
79
111
|
dragGroup: @config.dragGroup
|
|
@@ -239,6 +271,10 @@ orbital DataGridOrbital {
|
|
|
239
271
|
@label "Look"
|
|
240
272
|
@description "Layer 2 visual treatment — mirrors the `entity-table` look enum so data-grid / data-list / entity-table share one knob name from authors."
|
|
241
273
|
@tier "presentation"
|
|
274
|
+
selfFetch : boolean = true
|
|
275
|
+
@label "Fetch its own rows on mount?"
|
|
276
|
+
@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."
|
|
277
|
+
@tier "internal"
|
|
242
278
|
}
|
|
243
279
|
}
|
|
244
280
|
|
|
@@ -47,7 +47,7 @@ orbital DataListOrbital {
|
|
|
47
47
|
initial: idle
|
|
48
48
|
|
|
49
49
|
state idle {
|
|
50
|
-
INIT -> idle
|
|
50
|
+
INIT -> idle when @config.selfFetch
|
|
51
51
|
(fetch DataListItem { emit: { success: DataListLoaded } })
|
|
52
52
|
(render-ui main {
|
|
53
53
|
dragGroup: @config.dragGroup
|
|
@@ -89,6 +89,47 @@ orbital DataListOrbital {
|
|
|
89
89
|
look: @config.look
|
|
90
90
|
type: data-list
|
|
91
91
|
})
|
|
92
|
+
INIT -> idle when (not @config.selfFetch)
|
|
93
|
+
(render-ui main {
|
|
94
|
+
dragGroup: @config.dragGroup
|
|
95
|
+
accepts: @config.accepts
|
|
96
|
+
sortable: @config.sortable
|
|
97
|
+
dropEvent: @config.dropEvent
|
|
98
|
+
reorderEvent: @config.reorderEvent
|
|
99
|
+
positionEvent: @config.positionEvent
|
|
100
|
+
dndItemIdField: @config.dndItemIdField
|
|
101
|
+
dndRoot: @config.dndRoot
|
|
102
|
+
entity: @entity
|
|
103
|
+
fields: @config.fields
|
|
104
|
+
columns: @config.columns
|
|
105
|
+
itemActions: @config.itemActions
|
|
106
|
+
maxInlineActions: @config.maxInlineActions
|
|
107
|
+
itemClickEvent: @config.itemClickEvent
|
|
108
|
+
gap: @config.gap
|
|
109
|
+
variant: @config.variant
|
|
110
|
+
groupBy: @config.groupBy
|
|
111
|
+
senderField: @config.senderField
|
|
112
|
+
senderLabelField: @config.senderLabelField
|
|
113
|
+
currentUser: @config.currentUser
|
|
114
|
+
emptyMessage: @config.emptyMessage
|
|
115
|
+
className: @config.className
|
|
116
|
+
isLoading: @config.isLoading
|
|
117
|
+
error: @config.error
|
|
118
|
+
reorderable: @config.reorderable
|
|
119
|
+
swipeLeftEvent: @config.swipeLeftEvent
|
|
120
|
+
swipeLeftActions: @config.swipeLeftActions
|
|
121
|
+
swipeRightEvent: @config.swipeRightEvent
|
|
122
|
+
swipeRightActions: @config.swipeRightActions
|
|
123
|
+
longPressEvent: @config.longPressEvent
|
|
124
|
+
infiniteScroll: @config.infiniteScroll
|
|
125
|
+
loadMoreEvent: @config.loadMoreEvent
|
|
126
|
+
hasMore: @config.hasMore
|
|
127
|
+
pageSize: @config.pageSize
|
|
128
|
+
sortBy: @config.sortBy
|
|
129
|
+
sortDirection: @config.sortDirection
|
|
130
|
+
look: @config.look
|
|
131
|
+
type: data-list
|
|
132
|
+
})
|
|
92
133
|
DataListLoaded -> idle
|
|
93
134
|
(render-ui main {
|
|
94
135
|
dragGroup: @config.dragGroup
|
|
@@ -319,6 +360,10 @@ orbital DataListOrbital {
|
|
|
319
360
|
@label "Look"
|
|
320
361
|
@description "Layer 2 visual treatment — mirrors the `entity-table` look enum so data-grid / data-list / entity-table share one knob name from authors."
|
|
321
362
|
@tier "presentation"
|
|
363
|
+
selfFetch : boolean = true
|
|
364
|
+
@label "Fetch its own rows on mount?"
|
|
365
|
+
@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."
|
|
366
|
+
@tier "internal"
|
|
322
367
|
}
|
|
323
368
|
}
|
|
324
369
|
|
|
@@ -9,9 +9,10 @@ orbital DocumentDetailsOrbital {
|
|
|
9
9
|
label : string
|
|
10
10
|
header : string
|
|
11
11
|
icon : icon
|
|
12
|
-
kind : "text" | "boolean" | "select" | "readonly"
|
|
12
|
+
kind : "text" | "boolean" | "select" | "readonly" | "image"
|
|
13
13
|
options : [string]
|
|
14
14
|
format : "date" | "currency" | "number" | "boolean" | "percent"
|
|
15
|
+
type : string
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
entity DocumentDetailsItem [runtime] {
|
|
@@ -22,12 +23,23 @@ orbital DocumentDetailsOrbital {
|
|
|
22
23
|
initial: idle
|
|
23
24
|
|
|
24
25
|
state idle {
|
|
25
|
-
INIT -> idle
|
|
26
|
+
INIT -> idle when @config.selfFetch
|
|
26
27
|
(fetch DocumentDetailsItem { emit: { success: DocumentDetailsLoaded } })
|
|
27
28
|
(render-ui main {
|
|
28
29
|
entity: @entity
|
|
29
30
|
fields: @config.fields
|
|
30
31
|
metaCommitEvent: @config.metaCommitEvent
|
|
32
|
+
relationEvent: @config.relationEvent
|
|
33
|
+
title: @config.title
|
|
34
|
+
className: @config.className
|
|
35
|
+
type: document-details
|
|
36
|
+
})
|
|
37
|
+
INIT -> idle when (not @config.selfFetch)
|
|
38
|
+
(render-ui main {
|
|
39
|
+
entity: @entity
|
|
40
|
+
fields: @config.fields
|
|
41
|
+
metaCommitEvent: @config.metaCommitEvent
|
|
42
|
+
relationEvent: @config.relationEvent
|
|
31
43
|
title: @config.title
|
|
32
44
|
className: @config.className
|
|
33
45
|
type: document-details
|
|
@@ -37,6 +49,7 @@ orbital DocumentDetailsOrbital {
|
|
|
37
49
|
entity: @payload.data
|
|
38
50
|
fields: @config.fields
|
|
39
51
|
metaCommitEvent: @config.metaCommitEvent
|
|
52
|
+
relationEvent: @config.relationEvent
|
|
40
53
|
title: @config.title
|
|
41
54
|
className: @config.className
|
|
42
55
|
type: document-details
|
|
@@ -50,6 +63,13 @@ orbital DocumentDetailsOrbital {
|
|
|
50
63
|
}
|
|
51
64
|
@description "Emitted when a property commits: { id, patch } — patch carries the id plus the one changed field, ready for a partial persist update."
|
|
52
65
|
@tier "essential"
|
|
66
|
+
@config.relationEvent -> external {
|
|
67
|
+
field : string!
|
|
68
|
+
id : string!
|
|
69
|
+
name : string!
|
|
70
|
+
}
|
|
71
|
+
@description "Makes relation chips clickable: emitted with { field, id, name } when a hydrated relation value (or one row of a many-relation) is clicked — the host routes it to the linked record's own surface."
|
|
72
|
+
@tier "essential"
|
|
53
73
|
DocumentDetailsLoaded
|
|
54
74
|
@description "DocumentDetails rows finished loading; payload.data holds the collection."
|
|
55
75
|
@synonyms "loaded, fetched, retrieved"
|
|
@@ -65,6 +85,10 @@ orbital DocumentDetailsOrbital {
|
|
|
65
85
|
@label "Meta Commit Event"
|
|
66
86
|
@description "Emitted when a property commits: { id, patch } — patch carries the id plus the one changed field, ready for a partial persist update."
|
|
67
87
|
@tier "presentation"
|
|
88
|
+
relationEvent : string = "RELATION"
|
|
89
|
+
@label "Relation Event"
|
|
90
|
+
@description "Makes relation chips clickable: emitted with { field, id, name } when a hydrated relation value (or one row of a many-relation) is clicked — the host routes it to the linked record's own surface."
|
|
91
|
+
@tier "presentation"
|
|
68
92
|
title : string
|
|
69
93
|
@label "Title"
|
|
70
94
|
@description "Card heading (defaults to the localized 'Details')"
|
|
@@ -73,6 +97,10 @@ orbital DocumentDetailsOrbital {
|
|
|
73
97
|
@label "Class Name"
|
|
74
98
|
@description "className prop"
|
|
75
99
|
@tier "presentation"
|
|
100
|
+
selfFetch : boolean = true
|
|
101
|
+
@label "Fetch its own rows on mount?"
|
|
102
|
+
@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."
|
|
103
|
+
@tier "internal"
|
|
76
104
|
}
|
|
77
105
|
}
|
|
78
106
|
|
|
@@ -25,6 +25,8 @@ orbital DocumentPanelOrbital {
|
|
|
25
25
|
(render-ui main {
|
|
26
26
|
title: @entity.title
|
|
27
27
|
subtitle: @config.subtitle
|
|
28
|
+
coverImage: @config.coverImage
|
|
29
|
+
icon: @config.icon
|
|
28
30
|
value: @entity.value
|
|
29
31
|
actions: @config.actions
|
|
30
32
|
maxInlineActions: @config.maxInlineActions
|
|
@@ -45,6 +47,8 @@ orbital DocumentPanelOrbital {
|
|
|
45
47
|
(render-ui main {
|
|
46
48
|
title: @entity.title
|
|
47
49
|
subtitle: @config.subtitle
|
|
50
|
+
coverImage: @config.coverImage
|
|
51
|
+
icon: @config.icon
|
|
48
52
|
value: @entity.value
|
|
49
53
|
actions: @config.actions
|
|
50
54
|
maxInlineActions: @config.maxInlineActions
|
|
@@ -65,6 +69,8 @@ orbital DocumentPanelOrbital {
|
|
|
65
69
|
(render-ui main {
|
|
66
70
|
title: @entity.title
|
|
67
71
|
subtitle: @config.subtitle
|
|
72
|
+
coverImage: @config.coverImage
|
|
73
|
+
icon: @config.icon
|
|
68
74
|
value: @entity.value
|
|
69
75
|
actions: @config.actions
|
|
70
76
|
maxInlineActions: @config.maxInlineActions
|
|
@@ -125,6 +131,14 @@ orbital DocumentPanelOrbital {
|
|
|
125
131
|
@label "Subtitle"
|
|
126
132
|
@description "Muted byline under the title; hidden when empty"
|
|
127
133
|
@tier "presentation"
|
|
134
|
+
coverImage : string
|
|
135
|
+
@label "Cover Image"
|
|
136
|
+
@description "Cover/hero image URL painted as a full-bleed banner above the header row (Notion/article-hero shape); hidden when empty"
|
|
137
|
+
@tier "presentation"
|
|
138
|
+
icon : icon
|
|
139
|
+
@label "Icon"
|
|
140
|
+
@description "Document icon rendered beside the title (a file glyph, a domain icon); hidden when empty"
|
|
141
|
+
@tier "presentation"
|
|
128
142
|
value : string
|
|
129
143
|
@label "Value"
|
|
130
144
|
@description "The document body as rich-text HTML"
|
|
@@ -29,8 +29,13 @@ orbital FileTreeOrbital {
|
|
|
29
29
|
tree: @config.tree
|
|
30
30
|
items: @config.items
|
|
31
31
|
selectedPath: @config.selectedPath
|
|
32
|
+
selectedId: @config.selectedId
|
|
33
|
+
look: @config.look
|
|
32
34
|
onFileSelect: @config.onFileSelect
|
|
33
35
|
onNodeSelect: @config.onNodeSelect
|
|
36
|
+
onNodeAction: @config.onNodeAction
|
|
37
|
+
nodeActionIcon: @config.nodeActionIcon
|
|
38
|
+
nodeActionLabel: @config.nodeActionLabel
|
|
34
39
|
className: @config.className
|
|
35
40
|
indent: @config.indent
|
|
36
41
|
type: file-tree
|
|
@@ -58,6 +63,14 @@ orbital FileTreeOrbital {
|
|
|
58
63
|
@label "Selected Path"
|
|
59
64
|
@description "Currently selected file path"
|
|
60
65
|
@tier "presentation"
|
|
66
|
+
selectedId : string
|
|
67
|
+
@label "Selected Id"
|
|
68
|
+
@description "Currently selected node id, in flat `items` mode: the row highlights and every ancestor auto-expands so the selection is always visible — the 'you are here' a navigation tree needs."
|
|
69
|
+
@tier "presentation"
|
|
70
|
+
look : "files" | "nav" = files
|
|
71
|
+
@label "Look"
|
|
72
|
+
@description "Visual treatment for flat `items` mode: `files` (default) keeps the monospace file-browser look; `nav` renders a sidebar navigation tree — regular font, document icons, roomier hit areas."
|
|
73
|
+
@tier "presentation"
|
|
61
74
|
onFileSelect : string = "FILE_SELECT"
|
|
62
75
|
@label "On File Select"
|
|
63
76
|
@description "Called when a file is clicked"
|
|
@@ -66,6 +79,18 @@ orbital FileTreeOrbital {
|
|
|
66
79
|
@label "On Node Select"
|
|
67
80
|
@description "Called when a node is clicked, in flat `items` mode; carries the selected node's id. Presence-gated: binding this prop is what turns on the click-to-select affordance, mirroring Badge's `onRemove`."
|
|
68
81
|
@tier "presentation"
|
|
82
|
+
onNodeAction : string = ""
|
|
83
|
+
@label "On Node Action"
|
|
84
|
+
@description "Called from the row's hover action button, in flat `items` mode; carries that node's id. Presence-gated: binding it renders the action."
|
|
85
|
+
@tier "presentation"
|
|
86
|
+
nodeActionIcon : string
|
|
87
|
+
@label "Node Action Icon"
|
|
88
|
+
@description "Icon for the row hover action (default: plus)."
|
|
89
|
+
@tier "presentation"
|
|
90
|
+
nodeActionLabel : string
|
|
91
|
+
@label "Node Action Label"
|
|
92
|
+
@description "Accessible label/tooltip for the row hover action."
|
|
93
|
+
@tier "presentation"
|
|
69
94
|
className : string
|
|
70
95
|
@label "Class Name"
|
|
71
96
|
@description "CSS class"
|
|
@@ -19,7 +19,7 @@ orbital PositionedCanvasOrbital {
|
|
|
19
19
|
initial: idle
|
|
20
20
|
|
|
21
21
|
state idle {
|
|
22
|
-
INIT -> idle
|
|
22
|
+
INIT -> idle when @config.selfFetch
|
|
23
23
|
(fetch PositionedCanvasItem { emit: { success: PositionedCanvasLoaded } })
|
|
24
24
|
(render-ui main {
|
|
25
25
|
items: @entity
|
|
@@ -34,6 +34,20 @@ orbital PositionedCanvasOrbital {
|
|
|
34
34
|
className: @config.className
|
|
35
35
|
type: positioned-canvas
|
|
36
36
|
})
|
|
37
|
+
INIT -> idle when (not @config.selfFetch)
|
|
38
|
+
(render-ui main {
|
|
39
|
+
items: @entity
|
|
40
|
+
width: @config.width
|
|
41
|
+
height: @config.height
|
|
42
|
+
selectedId: @config.selectedId
|
|
43
|
+
editable: @config.editable
|
|
44
|
+
onSelect: @config.onSelect
|
|
45
|
+
onMove: @config.onMove
|
|
46
|
+
selectEvent: @config.selectEvent
|
|
47
|
+
moveEvent: @config.moveEvent
|
|
48
|
+
className: @config.className
|
|
49
|
+
type: positioned-canvas
|
|
50
|
+
})
|
|
37
51
|
PositionedCanvasLoaded -> idle
|
|
38
52
|
(render-ui main {
|
|
39
53
|
items: @payload.data
|
|
@@ -106,6 +120,10 @@ orbital PositionedCanvasOrbital {
|
|
|
106
120
|
@label "Class Name"
|
|
107
121
|
@description "className prop"
|
|
108
122
|
@tier "presentation"
|
|
123
|
+
selfFetch : boolean = true
|
|
124
|
+
@label "Fetch its own rows on mount?"
|
|
125
|
+
@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."
|
|
126
|
+
@tier "internal"
|
|
109
127
|
}
|
|
110
128
|
}
|
|
111
129
|
|
|
@@ -19,7 +19,7 @@ orbital ReplyTreeOrbital {
|
|
|
19
19
|
initial: idle
|
|
20
20
|
|
|
21
21
|
state idle {
|
|
22
|
-
INIT -> idle
|
|
22
|
+
INIT -> idle when @config.selfFetch
|
|
23
23
|
(fetch ReplyTreeItem { emit: { success: ReplyTreeLoaded } })
|
|
24
24
|
(render-ui main {
|
|
25
25
|
nodes: @entity
|
|
@@ -36,6 +36,22 @@ orbital ReplyTreeOrbital {
|
|
|
36
36
|
className: @config.className
|
|
37
37
|
type: reply-tree
|
|
38
38
|
})
|
|
39
|
+
INIT -> idle when (not @config.selfFetch)
|
|
40
|
+
(render-ui main {
|
|
41
|
+
nodes: @entity
|
|
42
|
+
maxDepth: @config.maxDepth
|
|
43
|
+
onVote: @config.onVote
|
|
44
|
+
onReply: @config.onReply
|
|
45
|
+
onFlag: @config.onFlag
|
|
46
|
+
onContinueThread: @config.onContinueThread
|
|
47
|
+
voteEvent: @config.voteEvent
|
|
48
|
+
replyEvent: @config.replyEvent
|
|
49
|
+
flagEvent: @config.flagEvent
|
|
50
|
+
continueThreadEvent: @config.continueThreadEvent
|
|
51
|
+
showActions: @config.showActions
|
|
52
|
+
className: @config.className
|
|
53
|
+
type: reply-tree
|
|
54
|
+
})
|
|
39
55
|
ReplyTreeLoaded -> idle
|
|
40
56
|
(render-ui main {
|
|
41
57
|
nodes: @payload.data
|
|
@@ -128,6 +144,10 @@ orbital ReplyTreeOrbital {
|
|
|
128
144
|
@label "Class Name"
|
|
129
145
|
@description "className prop"
|
|
130
146
|
@tier "presentation"
|
|
147
|
+
selfFetch : boolean = true
|
|
148
|
+
@label "Fetch its own rows on mount?"
|
|
149
|
+
@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."
|
|
150
|
+
@tier "internal"
|
|
131
151
|
}
|
|
132
152
|
}
|
|
133
153
|
|