@almadar/std 16.179.0 → 16.181.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-detail-layout.lolo +82 -0
- package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -9
- package/behaviors/lolo/ui/core/atoms/ui-filter-pill.lolo +2 -25
- package/behaviors/lolo/ui/core/molecules/ui-breadcrumb.lolo +20 -2
- package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +6 -0
- package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +2 -36
- package/behaviors/registry/ui/core/atoms/std-detail-layout.orb +265 -0
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +1 -38
- package/behaviors/registry/ui/core/atoms/ui-filter-pill.orb +2 -90
- package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +55 -17
- package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +8 -0
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +2 -101
- package/canonical-operators.json +14 -2
- package/dist/behaviors/exports-reader.js +2519 -2467
- package/dist/behaviors/functions/index.d.ts +91 -29
- package/dist/behaviors/functions/index.js +2517 -2468
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +2520 -2468
- package/dist/behaviors/query.js +2519 -2467
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +299 -291
- package/dist/behaviors-registry.json +556 -133
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2520 -2468
- 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
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
app std-detail-layout "1.0.0"
|
|
2
|
+
"std-detail-layout — detail-page chrome band (back button + navigation-stack breadcrumb trail) above a single contentTrait slot. Use as the contentTrait of a detail page's AppShell binding: the band renders `← Back | Contracts › Contract details` from the orbital-scoped client navigation stack (session history, seeded from declared page-path ancestry on cold loads — the trail is never empty), and the consumer's detail trait renders below it. Back pops the stack; crumb clicks navigate to their level; a list router's `(navigate path payload { crumb: ?row.title })` labels the detail crumb with the real record title. Bind once per detail page — `XDetailLayout = DetailShell.traits.DetailLayout` with `contentTrait: @trait.XDetail`."
|
|
3
|
+
;; @capabilities "detail page shell, breadcrumb trail, back navigation, record detail chrome, navigation stack, drill-down hierarchy"
|
|
4
|
+
orbital DetailLayoutOrbital {
|
|
5
|
+
entity DetailLayoutData [runtime] {
|
|
6
|
+
id : string!
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
trait DetailLayout -> @rebindable DetailLayoutData [interaction, instance] {
|
|
10
|
+
initial: composing
|
|
11
|
+
|
|
12
|
+
state composing {
|
|
13
|
+
INIT -> composing
|
|
14
|
+
(render-ui main {
|
|
15
|
+
type: stack
|
|
16
|
+
direction: vertical
|
|
17
|
+
gap: lg
|
|
18
|
+
className: "w-full"
|
|
19
|
+
children: [{
|
|
20
|
+
type: stack
|
|
21
|
+
direction: horizontal
|
|
22
|
+
align: center
|
|
23
|
+
gap: sm
|
|
24
|
+
className: "w-full border-b border-border pb-3"
|
|
25
|
+
children: [{
|
|
26
|
+
type: button
|
|
27
|
+
variant: ghost
|
|
28
|
+
size: sm
|
|
29
|
+
icon: arrow-left
|
|
30
|
+
label: @config.backLabel
|
|
31
|
+
action: BACK
|
|
32
|
+
}, {
|
|
33
|
+
type: breadcrumb
|
|
34
|
+
fromNavStack: true
|
|
35
|
+
itemEvent: CRUMB_NAV
|
|
36
|
+
}]
|
|
37
|
+
},
|
|
38
|
+
@config.contentTrait]
|
|
39
|
+
})
|
|
40
|
+
BACK -> composing
|
|
41
|
+
(navigate-back)
|
|
42
|
+
CRUMB_NAV -> composing
|
|
43
|
+
(navigate ?href)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
emits {
|
|
47
|
+
BACK
|
|
48
|
+
@description "The shell's back affordance was pressed; the layout pops the navigation stack."
|
|
49
|
+
@synonyms "go back, return, previous page, up one level"
|
|
50
|
+
@tier "internal"
|
|
51
|
+
CRUMB_NAV
|
|
52
|
+
@description "A breadcrumb level was clicked; the layout navigates to that level's href."
|
|
53
|
+
@synonyms "breadcrumb click, jump to level, trail navigation"
|
|
54
|
+
@tier "internal"
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
listens {
|
|
58
|
+
CRUMB_NAV {
|
|
59
|
+
label : string
|
|
60
|
+
href : string!
|
|
61
|
+
index : number
|
|
62
|
+
}
|
|
63
|
+
@description "Breadcrumb level picked from the navigation-stack trail."
|
|
64
|
+
@synonyms "breadcrumb click, trail navigation"
|
|
65
|
+
@tier "internal"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
config {
|
|
69
|
+
contentTrait : trait
|
|
70
|
+
@label "Content trait"
|
|
71
|
+
@description "The detail trait rendered below the navigation band (the DetailPanel + sections view)."
|
|
72
|
+
@tier "presentation"
|
|
73
|
+
backLabel : string = Back
|
|
74
|
+
@label "Back button label"
|
|
75
|
+
@description "Label on the band's back button, e.g. \"Back to contracts\"."
|
|
76
|
+
@synonyms "back text, return label"
|
|
77
|
+
@tier "presentation"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
page "/detail-layout" as DetailLayoutPage -> DetailLayout
|
|
82
|
+
}
|
|
@@ -39,14 +39,6 @@ orbital BadgeOrbital {
|
|
|
39
39
|
})
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
emits {
|
|
43
|
-
@config.onRemove -> external {
|
|
44
|
-
id : string
|
|
45
|
-
}
|
|
46
|
-
@description "When set, renders a small X button on the right of the badge that invokes this handler — turns the badge into a removable chip. Used by the TagInput molecule and other 'list of removable values' surfaces."
|
|
47
|
-
@tier "essential"
|
|
48
|
-
}
|
|
49
|
-
|
|
50
42
|
config {
|
|
51
43
|
className : string
|
|
52
44
|
@label "Class Name"
|
|
@@ -76,7 +68,7 @@ orbital BadgeOrbital {
|
|
|
76
68
|
@label "Icon Asset"
|
|
77
69
|
@description "Asset image rendered as the badge icon; takes precedence over icon when provided."
|
|
78
70
|
@tier "presentation"
|
|
79
|
-
onRemove : string = "
|
|
71
|
+
onRemove : string = ""
|
|
80
72
|
@label "On Remove"
|
|
81
73
|
@description "When set, renders a small X button on the right of the badge that invokes this handler — turns the badge into a removable chip. Used by the TagInput molecule and other 'list of removable values' surfaces."
|
|
82
74
|
@tier "presentation"
|
|
@@ -25,21 +25,6 @@ orbital FilterPillOrbital {
|
|
|
25
25
|
removeEvent: @config.removeEvent
|
|
26
26
|
type: filter-pill
|
|
27
27
|
})
|
|
28
|
-
REMOVE -> idle
|
|
29
|
-
(set @entity.label ?label)
|
|
30
|
-
(render-ui main {
|
|
31
|
-
className: @config.className
|
|
32
|
-
variant: @config.variant
|
|
33
|
-
size: @config.size
|
|
34
|
-
label: @entity.label
|
|
35
|
-
icon: @config.icon
|
|
36
|
-
onRemove: @config.onRemove
|
|
37
|
-
removable: @config.removable
|
|
38
|
-
onClick: @config.onClick
|
|
39
|
-
clickEvent: @config.clickEvent
|
|
40
|
-
removeEvent: @config.removeEvent
|
|
41
|
-
type: filter-pill
|
|
42
|
-
})
|
|
43
28
|
CLICK -> idle
|
|
44
29
|
(set @entity.label ?label)
|
|
45
30
|
(render-ui main {
|
|
@@ -58,11 +43,6 @@ orbital FilterPillOrbital {
|
|
|
58
43
|
}
|
|
59
44
|
|
|
60
45
|
emits {
|
|
61
|
-
@config.onRemove -> external {
|
|
62
|
-
label : string!
|
|
63
|
-
}
|
|
64
|
-
@description "Called when the user clicks the remove (×) button"
|
|
65
|
-
@tier "essential"
|
|
66
46
|
@config.onClick -> external {
|
|
67
47
|
label : string!
|
|
68
48
|
}
|
|
@@ -71,9 +51,6 @@ orbital FilterPillOrbital {
|
|
|
71
51
|
}
|
|
72
52
|
|
|
73
53
|
listens {
|
|
74
|
-
REMOVE {
|
|
75
|
-
label : string!
|
|
76
|
-
}
|
|
77
54
|
CLICK {
|
|
78
55
|
label : string!
|
|
79
56
|
}
|
|
@@ -100,7 +77,7 @@ orbital FilterPillOrbital {
|
|
|
100
77
|
@label "Icon"
|
|
101
78
|
@description "Lucide icon component or canonical kebab-case icon name string"
|
|
102
79
|
@tier "presentation"
|
|
103
|
-
onRemove : string = "
|
|
80
|
+
onRemove : string = ""
|
|
104
81
|
@label "On Remove"
|
|
105
82
|
@description "Called when the user clicks the remove (×) button"
|
|
106
83
|
@tier "presentation"
|
|
@@ -116,7 +93,7 @@ orbital FilterPillOrbital {
|
|
|
116
93
|
@label "Click Event"
|
|
117
94
|
@description "Event name dispatched via event bus when the pill body is clicked. Payload: { label }"
|
|
118
95
|
@tier "presentation"
|
|
119
|
-
removeEvent : string = "
|
|
96
|
+
removeEvent : string = ""
|
|
120
97
|
@label "Remove Event"
|
|
121
98
|
@description "Event name dispatched via event bus when the remove (×) button is clicked. Payload: { label }"
|
|
122
99
|
@tier "presentation"
|
|
@@ -21,6 +21,8 @@ orbital BreadcrumbOrbital {
|
|
|
21
21
|
INIT -> idle
|
|
22
22
|
(render-ui main {
|
|
23
23
|
items: @config.items
|
|
24
|
+
fromNavStack: @config.fromNavStack
|
|
25
|
+
itemEvent: @config.itemEvent
|
|
24
26
|
separator: @config.separator
|
|
25
27
|
maxItems: @config.maxItems
|
|
26
28
|
className: @config.className
|
|
@@ -28,10 +30,26 @@ orbital BreadcrumbOrbital {
|
|
|
28
30
|
})
|
|
29
31
|
}
|
|
30
32
|
|
|
33
|
+
emits {
|
|
34
|
+
@config.itemEvent -> external {
|
|
35
|
+
id : string
|
|
36
|
+
}
|
|
37
|
+
@description "Event emitted when a non-current crumb is clicked, with payload `{ label, href, index }` — the trait handles it with `(navigate ?href)`. Without it, stack crumbs navigate directly."
|
|
38
|
+
@tier "essential"
|
|
39
|
+
}
|
|
40
|
+
|
|
31
41
|
config {
|
|
32
|
-
items : [BreadcrumbItemsItem] = [
|
|
42
|
+
items : [BreadcrumbItemsItem] = []
|
|
33
43
|
@label "Items"
|
|
34
|
-
@description "Breadcrumb items"
|
|
44
|
+
@description "Breadcrumb items. Omit together with `fromNavStack` to render the orbital-scoped navigation stack instead of an authored trail."
|
|
45
|
+
@tier "presentation"
|
|
46
|
+
fromNavStack : boolean = false
|
|
47
|
+
@label "From Nav Stack"
|
|
48
|
+
@description "Render the current orbital's navigation stack (NavStackProvider) as the trail: one crumb per visited/declared level, last entry current. The stack is client-session state both execution paths maintain; outside a provider this renders nothing."
|
|
49
|
+
@tier "presentation"
|
|
50
|
+
itemEvent : string = "ITEM"
|
|
51
|
+
@label "Item Event"
|
|
52
|
+
@description "Event emitted when a non-current crumb is clicked, with payload `{ label, href, index }` — the trait handles it with `(navigate ?href)`. Without it, stack crumbs navigate directly."
|
|
35
53
|
@tier "presentation"
|
|
36
54
|
separator : icon
|
|
37
55
|
@label "Separator"
|
|
@@ -79,6 +79,7 @@ orbital DetailPanelOrbital {
|
|
|
79
79
|
avatar: @config.avatar
|
|
80
80
|
sections: @config.sections
|
|
81
81
|
actions: @config.actions
|
|
82
|
+
maxInlineActions: @config.maxInlineActions
|
|
82
83
|
backAction: @config.backAction
|
|
83
84
|
footer: @config.footer
|
|
84
85
|
slideOver: @config.slideOver
|
|
@@ -113,6 +114,7 @@ orbital DetailPanelOrbital {
|
|
|
113
114
|
avatar: @config.avatar
|
|
114
115
|
sections: @config.sections
|
|
115
116
|
actions: @config.actions
|
|
117
|
+
maxInlineActions: @config.maxInlineActions
|
|
116
118
|
backAction: @config.backAction
|
|
117
119
|
footer: @config.footer
|
|
118
120
|
slideOver: @config.slideOver
|
|
@@ -206,6 +208,10 @@ orbital DetailPanelOrbital {
|
|
|
206
208
|
@label "Actions"
|
|
207
209
|
@description "Unified actions array - first action with variant='primary' is the main action"
|
|
208
210
|
@tier "presentation"
|
|
211
|
+
maxInlineActions : number
|
|
212
|
+
@label "Max Inline Actions"
|
|
213
|
+
@description "Max inline action buttons before the rest collapse into a '⋯' overflow menu (mirrors DataGrid's maxInlineActions). Omit = all inline."
|
|
214
|
+
@tier "presentation"
|
|
209
215
|
backAction : DetailPanelBackAction
|
|
210
216
|
@label "Back Action"
|
|
211
217
|
@description "Navigation-back affordance. Renders top-LEFT before the title (OS/back convention — Almadar_UX §8.4), spatially separated from the right-aligned action buttons + close X. Never inferred from actions[] labels."
|
|
@@ -156,32 +156,6 @@ orbital TraitSlotOrbital {
|
|
|
156
156
|
dropEvent: @config.dropEvent
|
|
157
157
|
type: trait-slot
|
|
158
158
|
})
|
|
159
|
-
REMOVE -> idle
|
|
160
|
-
(set @entity.slotNumber ?slotNumber)
|
|
161
|
-
(render-ui main {
|
|
162
|
-
slotNumber: @entity.slotNumber
|
|
163
|
-
equippedItem: @config.equippedItem
|
|
164
|
-
locked: @config.locked
|
|
165
|
-
lockLabel: @config.lockLabel
|
|
166
|
-
selected: @config.selected
|
|
167
|
-
size: @config.size
|
|
168
|
-
showTooltip: @config.showTooltip
|
|
169
|
-
categoryColors: @config.categoryColors
|
|
170
|
-
tooltipFrameUrl: @config.tooltipFrameUrl
|
|
171
|
-
className: @config.className
|
|
172
|
-
isLoading: @config.isLoading
|
|
173
|
-
error: @config.error
|
|
174
|
-
onItemDrop: @config.onItemDrop
|
|
175
|
-
draggable: @config.draggable
|
|
176
|
-
onDragStart: @config.onDragStart
|
|
177
|
-
feedback: @config.feedback
|
|
178
|
-
onClick: @config.onClick
|
|
179
|
-
onRemove: @config.onRemove
|
|
180
|
-
clickEvent: @config.clickEvent
|
|
181
|
-
removeEvent: @config.removeEvent
|
|
182
|
-
dropEvent: @config.dropEvent
|
|
183
|
-
type: trait-slot
|
|
184
|
-
})
|
|
185
159
|
DROP -> idle
|
|
186
160
|
(set @entity.slotNumber ?slotNumber)
|
|
187
161
|
(render-ui main {
|
|
@@ -226,11 +200,6 @@ orbital TraitSlotOrbital {
|
|
|
226
200
|
}
|
|
227
201
|
@description "-- Callbacks --"
|
|
228
202
|
@tier "essential"
|
|
229
|
-
@config.onRemove -> external {
|
|
230
|
-
slotNumber : number!
|
|
231
|
-
}
|
|
232
|
-
@description "Remove handler"
|
|
233
|
-
@tier "essential"
|
|
234
203
|
@config.dropEvent -> external {
|
|
235
204
|
slotNumber : number!
|
|
236
205
|
itemId : string!
|
|
@@ -243,9 +212,6 @@ orbital TraitSlotOrbital {
|
|
|
243
212
|
CLICK {
|
|
244
213
|
slotNumber : number!
|
|
245
214
|
}
|
|
246
|
-
REMOVE {
|
|
247
|
-
slotNumber : number!
|
|
248
|
-
}
|
|
249
215
|
DROP {
|
|
250
216
|
slotNumber : number!
|
|
251
217
|
itemId : string!
|
|
@@ -321,7 +287,7 @@ orbital TraitSlotOrbital {
|
|
|
321
287
|
@label "On Click"
|
|
322
288
|
@description "-- Callbacks --"
|
|
323
289
|
@tier "presentation"
|
|
324
|
-
onRemove : string = "
|
|
290
|
+
onRemove : string = ""
|
|
325
291
|
@label "On Remove"
|
|
326
292
|
@description "Remove handler"
|
|
327
293
|
@tier "presentation"
|
|
@@ -329,7 +295,7 @@ orbital TraitSlotOrbital {
|
|
|
329
295
|
@label "Click Event"
|
|
330
296
|
@description "-- Declarative events --"
|
|
331
297
|
@tier "presentation"
|
|
332
|
-
removeEvent : string = "
|
|
298
|
+
removeEvent : string = ""
|
|
333
299
|
@label "Remove Event"
|
|
334
300
|
@description "Emits UI:{removeEvent} with { slotNumber }"
|
|
335
301
|
@tier "presentation"
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "std-detail-layout — detail-page chrome band (back button + navigation-stack breadcrumb trail) above a single contentTrait slot. Use as the contentTrait of a detail page's AppShell binding: the band renders `← Back | Contracts › Contract details` from the orbital-scoped client navigation stack (session history, seeded from declared page-path ancestry on cold loads — the trail is never empty), and the consumer's detail trait renders below it. Back pops the stack; crumb clicks navigate to their level; a list router's `(navigate path payload { crumb: ?row.title })` labels the detail crumb with the real record title. Bind once per detail page — `XDetailLayout = DetailShell.traits.DetailLayout` with `contentTrait: @trait.XDetail`.",
|
|
3
|
+
"ledger": {
|
|
4
|
+
"entries": {
|
|
5
|
+
"ent_01M0J07QZHFKDT9JQZ42HBVNQQ": {
|
|
6
|
+
"bakedName": "DetailLayoutData",
|
|
7
|
+
"curName": "DetailLayoutData",
|
|
8
|
+
"id": "ent_01M0J07QZHFKDT9JQZ42HBVNQQ",
|
|
9
|
+
"kind": "entity",
|
|
10
|
+
"owner": "workspace",
|
|
11
|
+
"renames": []
|
|
12
|
+
},
|
|
13
|
+
"evt_01M0J07QZHF7RM3JBVCVWSV7B4": {
|
|
14
|
+
"bakedName": "INIT",
|
|
15
|
+
"curName": "INIT",
|
|
16
|
+
"id": "evt_01M0J07QZHF7RM3JBVCVWSV7B4",
|
|
17
|
+
"kind": "event",
|
|
18
|
+
"owner": "workspace",
|
|
19
|
+
"parent": "trt_01M0J07QZH6N0G9CKFXKBJ3AC6",
|
|
20
|
+
"renames": []
|
|
21
|
+
},
|
|
22
|
+
"evt_01M0J07QZKCG5P5AGK0VHN2N9G": {
|
|
23
|
+
"bakedName": "BACK",
|
|
24
|
+
"curName": "BACK",
|
|
25
|
+
"id": "evt_01M0J07QZKCG5P5AGK0VHN2N9G",
|
|
26
|
+
"kind": "event",
|
|
27
|
+
"owner": "workspace",
|
|
28
|
+
"parent": "trt_01M0J07QZH6N0G9CKFXKBJ3AC6",
|
|
29
|
+
"renames": []
|
|
30
|
+
},
|
|
31
|
+
"evt_01M0J07QZKF2YJ9MMQ69KZ3CVB": {
|
|
32
|
+
"bakedName": "CRUMB_NAV",
|
|
33
|
+
"curName": "CRUMB_NAV",
|
|
34
|
+
"id": "evt_01M0J07QZKF2YJ9MMQ69KZ3CVB",
|
|
35
|
+
"kind": "event",
|
|
36
|
+
"owner": "workspace",
|
|
37
|
+
"parent": "trt_01M0J07QZH6N0G9CKFXKBJ3AC6",
|
|
38
|
+
"renames": []
|
|
39
|
+
},
|
|
40
|
+
"orb_01M0J07QZHNJF5BJSSEKF13PVV": {
|
|
41
|
+
"bakedName": "DetailLayoutOrbital",
|
|
42
|
+
"curName": "DetailLayoutOrbital",
|
|
43
|
+
"id": "orb_01M0J07QZHNJF5BJSSEKF13PVV",
|
|
44
|
+
"kind": "orbital",
|
|
45
|
+
"owner": "workspace",
|
|
46
|
+
"renames": []
|
|
47
|
+
},
|
|
48
|
+
"pag_01M0J07QZKPKTYGMZR1DDDDFC1": {
|
|
49
|
+
"bakedName": "DetailLayoutPage",
|
|
50
|
+
"curName": "DetailLayoutPage",
|
|
51
|
+
"id": "pag_01M0J07QZKPKTYGMZR1DDDDFC1",
|
|
52
|
+
"kind": "page",
|
|
53
|
+
"owner": "workspace",
|
|
54
|
+
"renames": []
|
|
55
|
+
},
|
|
56
|
+
"trt_01M0J07QZH6N0G9CKFXKBJ3AC6": {
|
|
57
|
+
"bakedName": "DetailLayout",
|
|
58
|
+
"curName": "DetailLayout",
|
|
59
|
+
"id": "trt_01M0J07QZH6N0G9CKFXKBJ3AC6",
|
|
60
|
+
"kind": "trait",
|
|
61
|
+
"owner": "workspace",
|
|
62
|
+
"renames": []
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"schemaVersion": 1
|
|
66
|
+
},
|
|
67
|
+
"name": "std-detail-layout",
|
|
68
|
+
"orbitals": [
|
|
69
|
+
{
|
|
70
|
+
"entity": {
|
|
71
|
+
"fields": [
|
|
72
|
+
{
|
|
73
|
+
"name": "id",
|
|
74
|
+
"required": true,
|
|
75
|
+
"type": "string"
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"id": "ent_01M0J07QZHFKDT9JQZ42HBVNQQ",
|
|
79
|
+
"name": "DetailLayoutData",
|
|
80
|
+
"persistence": "runtime"
|
|
81
|
+
},
|
|
82
|
+
"id": "orb_01M0J07QZHNJF5BJSSEKF13PVV",
|
|
83
|
+
"name": "DetailLayoutOrbital",
|
|
84
|
+
"pages": [
|
|
85
|
+
{
|
|
86
|
+
"id": "pag_01M0J07QZKPKTYGMZR1DDDDFC1",
|
|
87
|
+
"name": "DetailLayoutPage",
|
|
88
|
+
"path": "/detail-layout",
|
|
89
|
+
"traits": [
|
|
90
|
+
{
|
|
91
|
+
"ref": "DetailLayout",
|
|
92
|
+
"refId": "trt_01M0J07QZH6N0G9CKFXKBJ3AC6"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"traits": [
|
|
98
|
+
{
|
|
99
|
+
"category": "interaction",
|
|
100
|
+
"config": {
|
|
101
|
+
"backLabel": {
|
|
102
|
+
"default": "Back",
|
|
103
|
+
"description": "Label on the band's back button, e.g. \"Back to contracts\".",
|
|
104
|
+
"label": "Back button label",
|
|
105
|
+
"synonyms": "back text, return label",
|
|
106
|
+
"tier": "presentation",
|
|
107
|
+
"type": "string"
|
|
108
|
+
},
|
|
109
|
+
"contentTrait": {
|
|
110
|
+
"description": "The detail trait rendered below the navigation band (the DetailPanel + sections view).",
|
|
111
|
+
"label": "Content trait",
|
|
112
|
+
"tier": "presentation",
|
|
113
|
+
"type": "trait"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"emits": [
|
|
117
|
+
{
|
|
118
|
+
"description": "The shell's back affordance was pressed; the layout pops the navigation stack.",
|
|
119
|
+
"event": "BACK",
|
|
120
|
+
"eventId": "evt_01M0J07QZKCG5P5AGK0VHN2N9G",
|
|
121
|
+
"synonyms": "go back, return, previous page, up one level",
|
|
122
|
+
"tier": "internal"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"description": "A breadcrumb level was clicked; the layout navigates to that level's href.",
|
|
126
|
+
"event": "CRUMB_NAV",
|
|
127
|
+
"eventId": "evt_01M0J07QZKF2YJ9MMQ69KZ3CVB",
|
|
128
|
+
"synonyms": "breadcrumb click, jump to level, trail navigation",
|
|
129
|
+
"tier": "internal"
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"entityContract": {
|
|
133
|
+
"provides": [],
|
|
134
|
+
"requires": []
|
|
135
|
+
},
|
|
136
|
+
"entityRebindable": true,
|
|
137
|
+
"entityRefIds": {
|
|
138
|
+
"DetailLayoutData": "ent_01M0J07QZHFKDT9JQZ42HBVNQQ"
|
|
139
|
+
},
|
|
140
|
+
"id": "trt_01M0J07QZH6N0G9CKFXKBJ3AC6",
|
|
141
|
+
"linkedEntity": "DetailLayoutData",
|
|
142
|
+
"linkedEntityId": "ent_01M0J07QZHFKDT9JQZ42HBVNQQ",
|
|
143
|
+
"name": "DetailLayout",
|
|
144
|
+
"scope": "instance",
|
|
145
|
+
"stateMachine": {
|
|
146
|
+
"events": [
|
|
147
|
+
{
|
|
148
|
+
"id": "evt_01M0J07QZHF7RM3JBVCVWSV7B4",
|
|
149
|
+
"key": "INIT",
|
|
150
|
+
"name": "Initialize"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"description": "The shell's back affordance was pressed; the layout pops the navigation stack.",
|
|
154
|
+
"id": "evt_01M0J07QZKCG5P5AGK0VHN2N9G",
|
|
155
|
+
"key": "BACK",
|
|
156
|
+
"name": "Back",
|
|
157
|
+
"synonyms": "go back, return, previous page, up one level",
|
|
158
|
+
"tier": "internal"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"description": "A breadcrumb level was clicked; the layout navigates to that level's href.",
|
|
162
|
+
"id": "evt_01M0J07QZKF2YJ9MMQ69KZ3CVB",
|
|
163
|
+
"key": "CRUMB_NAV",
|
|
164
|
+
"name": "Crumb Nav",
|
|
165
|
+
"payloadSchema": [
|
|
166
|
+
{
|
|
167
|
+
"name": "label",
|
|
168
|
+
"type": "string"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "href",
|
|
172
|
+
"required": true,
|
|
173
|
+
"type": "string"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "index",
|
|
177
|
+
"type": "number"
|
|
178
|
+
}
|
|
179
|
+
],
|
|
180
|
+
"synonyms": "breadcrumb click, jump to level, trail navigation",
|
|
181
|
+
"tier": "internal"
|
|
182
|
+
}
|
|
183
|
+
],
|
|
184
|
+
"states": [
|
|
185
|
+
{
|
|
186
|
+
"isInitial": true,
|
|
187
|
+
"name": "composing"
|
|
188
|
+
}
|
|
189
|
+
],
|
|
190
|
+
"transitions": [
|
|
191
|
+
{
|
|
192
|
+
"effects": [
|
|
193
|
+
[
|
|
194
|
+
"render-ui",
|
|
195
|
+
"main",
|
|
196
|
+
{
|
|
197
|
+
"children": [
|
|
198
|
+
{
|
|
199
|
+
"align": "center",
|
|
200
|
+
"children": [
|
|
201
|
+
{
|
|
202
|
+
"action": "BACK",
|
|
203
|
+
"icon": "arrow-left",
|
|
204
|
+
"label": "@config.backLabel",
|
|
205
|
+
"size": "sm",
|
|
206
|
+
"type": "button",
|
|
207
|
+
"variant": "ghost"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"fromNavStack": true,
|
|
211
|
+
"itemEvent": "CRUMB_NAV",
|
|
212
|
+
"type": "breadcrumb"
|
|
213
|
+
}
|
|
214
|
+
],
|
|
215
|
+
"className": "w-full border-b border-border pb-3",
|
|
216
|
+
"direction": "horizontal",
|
|
217
|
+
"gap": "sm",
|
|
218
|
+
"type": "stack"
|
|
219
|
+
},
|
|
220
|
+
"@config.contentTrait"
|
|
221
|
+
],
|
|
222
|
+
"className": "w-full",
|
|
223
|
+
"direction": "vertical",
|
|
224
|
+
"gap": "lg",
|
|
225
|
+
"type": "stack"
|
|
226
|
+
}
|
|
227
|
+
]
|
|
228
|
+
],
|
|
229
|
+
"event": "INIT",
|
|
230
|
+
"eventId": "evt_01M0J07QZHF7RM3JBVCVWSV7B4",
|
|
231
|
+
"from": "composing",
|
|
232
|
+
"to": "composing"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"effects": [
|
|
236
|
+
[
|
|
237
|
+
"navigate-back"
|
|
238
|
+
]
|
|
239
|
+
],
|
|
240
|
+
"event": "BACK",
|
|
241
|
+
"eventId": "evt_01M0J07QZKCG5P5AGK0VHN2N9G",
|
|
242
|
+
"from": "composing",
|
|
243
|
+
"to": "composing"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"effects": [
|
|
247
|
+
[
|
|
248
|
+
"navigate",
|
|
249
|
+
"@payload.href"
|
|
250
|
+
]
|
|
251
|
+
],
|
|
252
|
+
"event": "CRUMB_NAV",
|
|
253
|
+
"eventId": "evt_01M0J07QZKF2YJ9MMQ69KZ3CVB",
|
|
254
|
+
"from": "composing",
|
|
255
|
+
"to": "composing"
|
|
256
|
+
}
|
|
257
|
+
]
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
]
|
|
261
|
+
}
|
|
262
|
+
],
|
|
263
|
+
"schemaVersion": 1,
|
|
264
|
+
"version": "1.0.0"
|
|
265
|
+
}
|
|
@@ -19,15 +19,6 @@
|
|
|
19
19
|
"parent": "trt_01KXG04J66F1NVJTF3ZS57P7K6",
|
|
20
20
|
"renames": []
|
|
21
21
|
},
|
|
22
|
-
"evt_01KXG04J690VY1KHNSN7EFXBQX": {
|
|
23
|
-
"bakedName": "@config.onRemove",
|
|
24
|
-
"curName": "@config.onRemove",
|
|
25
|
-
"id": "evt_01KXG04J690VY1KHNSN7EFXBQX",
|
|
26
|
-
"kind": "event",
|
|
27
|
-
"owner": "workspace",
|
|
28
|
-
"parent": "trt_01KXG04J66F1NVJTF3ZS57P7K6",
|
|
29
|
-
"renames": []
|
|
30
|
-
},
|
|
31
22
|
"orb_01KXG04J66RQ2ZKZ9VJXM9VS1C": {
|
|
32
23
|
"bakedName": "BadgeOrbital",
|
|
33
24
|
"curName": "BadgeOrbital",
|
|
@@ -202,7 +193,7 @@
|
|
|
202
193
|
"type": "string"
|
|
203
194
|
},
|
|
204
195
|
"onRemove": {
|
|
205
|
-
"default": "
|
|
196
|
+
"default": "",
|
|
206
197
|
"description": "When set, renders a small X button on the right of the badge that invokes this handler — turns the badge into a removable chip. Used by the TagInput molecule and other 'list of removable values' surfaces.",
|
|
207
198
|
"label": "On Remove",
|
|
208
199
|
"tier": "presentation",
|
|
@@ -245,21 +236,6 @@
|
|
|
245
236
|
]
|
|
246
237
|
}
|
|
247
238
|
},
|
|
248
|
-
"emits": [
|
|
249
|
-
{
|
|
250
|
-
"description": "When set, renders a small X button on the right of the badge that invokes this handler — turns the badge into a removable chip. Used by the TagInput molecule and other 'list of removable values' surfaces.",
|
|
251
|
-
"event": "@config.onRemove",
|
|
252
|
-
"eventId": "evt_01KXG04J690VY1KHNSN7EFXBQX",
|
|
253
|
-
"payloadSchema": [
|
|
254
|
-
{
|
|
255
|
-
"name": "id",
|
|
256
|
-
"type": "string"
|
|
257
|
-
}
|
|
258
|
-
],
|
|
259
|
-
"scope": "external",
|
|
260
|
-
"tier": "essential"
|
|
261
|
-
}
|
|
262
|
-
],
|
|
263
239
|
"entityContract": {
|
|
264
240
|
"provides": [],
|
|
265
241
|
"requires": []
|
|
@@ -279,19 +255,6 @@
|
|
|
279
255
|
"id": "evt_01KXG04J66HMQ87R0XX75VN72Q",
|
|
280
256
|
"key": "INIT",
|
|
281
257
|
"name": "Initialize"
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
"description": "When set, renders a small X button on the right of the badge that invokes this handler — turns the badge into a removable chip. Used by the TagInput molecule and other 'list of removable values' surfaces.",
|
|
285
|
-
"id": "evt_01KXG04J690VY1KHNSN7EFXBQX",
|
|
286
|
-
"key": "@config.onRemove",
|
|
287
|
-
"name": "@config.on remove",
|
|
288
|
-
"payloadSchema": [
|
|
289
|
-
{
|
|
290
|
-
"name": "id",
|
|
291
|
-
"type": "string"
|
|
292
|
-
}
|
|
293
|
-
],
|
|
294
|
-
"tier": "essential"
|
|
295
258
|
}
|
|
296
259
|
],
|
|
297
260
|
"states": [
|