@almadar/std 16.191.0 → 16.192.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-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-taxonomy.lolo +176 -4
- 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-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-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-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-taxonomy.orb +539 -1
- 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-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-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 +2566 -44
- package/dist/behaviors/functions/index.d.ts +134 -11
- package/dist/behaviors/functions/index.js +2565 -45
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +2567 -45
- package/dist/behaviors/query.js +2566 -44
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +11 -11
- package/dist/behaviors-registry.json +96 -53
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2567 -45
- 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
|
@@ -7,6 +7,8 @@ orbital TagTaxonomyOrbital {
|
|
|
7
7
|
|
|
8
8
|
type TagSelected = Event { tagId : string! } "Fired when a tag is selected to drill into its children"
|
|
9
9
|
|
|
10
|
+
type TagCommit = { name : string!, parentId : string }
|
|
11
|
+
|
|
10
12
|
entity Tag [persistent: tags] {
|
|
11
13
|
id : string!
|
|
12
14
|
name : string! @description "The descriptive label for this item." @synonyms "label, title, description"
|
|
@@ -21,6 +23,11 @@ orbital TagTaxonomyOrbital {
|
|
|
21
23
|
initial: loading
|
|
22
24
|
|
|
23
25
|
state loading {
|
|
26
|
+
LEVEL_RELOAD -> loading
|
|
27
|
+
(fetch Tag {
|
|
28
|
+
filter: ["=", (object/get @entity parentId), (str/default ?tagId "")]
|
|
29
|
+
emit: { failure: TagLoadFailed, success: TagLoaded }
|
|
30
|
+
})
|
|
24
31
|
INIT -> loading
|
|
25
32
|
(set @entity.id "")
|
|
26
33
|
(set @entity.parentId "")
|
|
@@ -55,7 +62,14 @@ orbital TagTaxonomyOrbital {
|
|
|
55
62
|
content: @config.title
|
|
56
63
|
type: typography
|
|
57
64
|
variant: h3
|
|
58
|
-
}, {
|
|
65
|
+
}, (if @config.allowEdit {
|
|
66
|
+
action: NEW_TAG
|
|
67
|
+
icon: plus
|
|
68
|
+
label: "New category"
|
|
69
|
+
size: sm
|
|
70
|
+
type: button
|
|
71
|
+
variant: secondary
|
|
72
|
+
} null), {
|
|
59
73
|
entity: ?data
|
|
60
74
|
fields: []
|
|
61
75
|
gap: sm
|
|
@@ -200,7 +214,14 @@ orbital TagTaxonomyOrbital {
|
|
|
200
214
|
content: @config.title
|
|
201
215
|
type: typography
|
|
202
216
|
variant: h3
|
|
203
|
-
}, {
|
|
217
|
+
}, (if @config.allowEdit {
|
|
218
|
+
action: NEW_TAG
|
|
219
|
+
icon: plus
|
|
220
|
+
label: "New category"
|
|
221
|
+
size: sm
|
|
222
|
+
type: button
|
|
223
|
+
variant: secondary
|
|
224
|
+
} null), {
|
|
204
225
|
entity: ?data
|
|
205
226
|
fields: []
|
|
206
227
|
gap: sm
|
|
@@ -261,6 +282,29 @@ orbital TagTaxonomyOrbital {
|
|
|
261
282
|
gap: md
|
|
262
283
|
type: stack
|
|
263
284
|
})
|
|
285
|
+
NEW_TAG -> creating when @config.allowEdit
|
|
286
|
+
(render-ui modal {
|
|
287
|
+
children: [{
|
|
288
|
+
content: "New category"
|
|
289
|
+
type: typography
|
|
290
|
+
variant: h3
|
|
291
|
+
}, {
|
|
292
|
+
color: muted
|
|
293
|
+
content: (if (!= @entity.id "") "Created inside the open category." "Created at the top level.")
|
|
294
|
+
type: typography
|
|
295
|
+
variant: caption
|
|
296
|
+
}, { type: divider }, {
|
|
297
|
+
cancelEvent: CANCEL_TAG
|
|
298
|
+
entity: { parentId: @entity.id }
|
|
299
|
+
fields: (name)
|
|
300
|
+
mode: create
|
|
301
|
+
submitEvent: COMMIT_TAG
|
|
302
|
+
type: form-section
|
|
303
|
+
}]
|
|
304
|
+
direction: vertical
|
|
305
|
+
gap: md
|
|
306
|
+
type: stack
|
|
307
|
+
})
|
|
264
308
|
TagLoadFailed -> error
|
|
265
309
|
(render-ui main {
|
|
266
310
|
message: ?error
|
|
@@ -269,6 +313,61 @@ orbital TagTaxonomyOrbital {
|
|
|
269
313
|
})
|
|
270
314
|
}
|
|
271
315
|
|
|
316
|
+
state creating {
|
|
317
|
+
COMMIT_TAG -> creating
|
|
318
|
+
(persist create Tag {
|
|
319
|
+
name: (object/get ?data name)
|
|
320
|
+
parentId: (str/default (object/get ?data parentId) "")
|
|
321
|
+
} {
|
|
322
|
+
emit: { failure: TagCreateFailed, success: TagCreated }
|
|
323
|
+
})
|
|
324
|
+
;; A filter expression binds @entity to the candidate ROW, so the open
|
|
325
|
+
;; level must travel by payload: the arm emits LEVEL_RELOAD carrying the
|
|
326
|
+
;; trait's own level id, and loading refetches from it.
|
|
327
|
+
CANCEL_TAG -> loading
|
|
328
|
+
(render-ui modal null)
|
|
329
|
+
(render-ui main {
|
|
330
|
+
align: center
|
|
331
|
+
children: [{ type: spinner }, {
|
|
332
|
+
color: muted
|
|
333
|
+
content: "Loading categories…"
|
|
334
|
+
type: typography
|
|
335
|
+
variant: caption
|
|
336
|
+
}]
|
|
337
|
+
className: py-12
|
|
338
|
+
direction: vertical
|
|
339
|
+
gap: md
|
|
340
|
+
type: stack
|
|
341
|
+
})
|
|
342
|
+
(emit LEVEL_RELOAD { tagId: @entity.id })
|
|
343
|
+
;; Refetch the level the new tag landed on — its own parentId names it.
|
|
344
|
+
TagCreated -> loading
|
|
345
|
+
(render-ui modal null)
|
|
346
|
+
(render-ui main {
|
|
347
|
+
align: center
|
|
348
|
+
children: [{ type: spinner }, {
|
|
349
|
+
color: muted
|
|
350
|
+
content: "Loading categories…"
|
|
351
|
+
type: typography
|
|
352
|
+
variant: caption
|
|
353
|
+
}]
|
|
354
|
+
className: py-12
|
|
355
|
+
direction: vertical
|
|
356
|
+
gap: md
|
|
357
|
+
type: stack
|
|
358
|
+
})
|
|
359
|
+
(fetch Tag {
|
|
360
|
+
filter: ["=", (object/get @entity parentId), (str/default (object/get ?row parentId) "")]
|
|
361
|
+
emit: { failure: TagLoadFailed, success: TagLoaded }
|
|
362
|
+
})
|
|
363
|
+
TagCreateFailed -> creating
|
|
364
|
+
(render-ui modal {
|
|
365
|
+
message: ?error
|
|
366
|
+
type: alert
|
|
367
|
+
variant: error
|
|
368
|
+
})
|
|
369
|
+
}
|
|
370
|
+
|
|
272
371
|
state editing {
|
|
273
372
|
INIT -> loading
|
|
274
373
|
(set @entity.id "")
|
|
@@ -311,7 +410,14 @@ orbital TagTaxonomyOrbital {
|
|
|
311
410
|
content: @config.title
|
|
312
411
|
type: typography
|
|
313
412
|
variant: h3
|
|
314
|
-
}, {
|
|
413
|
+
}, (if @config.allowEdit {
|
|
414
|
+
action: NEW_TAG
|
|
415
|
+
icon: plus
|
|
416
|
+
label: "New category"
|
|
417
|
+
size: sm
|
|
418
|
+
type: button
|
|
419
|
+
variant: secondary
|
|
420
|
+
} null), {
|
|
315
421
|
entity: ?data
|
|
316
422
|
fields: []
|
|
317
423
|
gap: sm
|
|
@@ -429,6 +535,39 @@ orbital TagTaxonomyOrbital {
|
|
|
429
535
|
@description "Signals a tag has been chosen for further exploration."
|
|
430
536
|
@synonyms "chosen, picked, activated, highlighted"
|
|
431
537
|
@tier "domain"
|
|
538
|
+
NEW_TAG
|
|
539
|
+
@description "Opens the new-category form (rendered only when allowEdit is on); the creation lands at the level currently open."
|
|
540
|
+
@synonyms "add tag, create category, new category"
|
|
541
|
+
@tier "domain"
|
|
542
|
+
COMMIT_TAG {
|
|
543
|
+
data : TagCommit
|
|
544
|
+
}
|
|
545
|
+
@description "The new-category form committed; data carries the name and the parent level."
|
|
546
|
+
@synonyms "save tag, create tag"
|
|
547
|
+
@tier "internal"
|
|
548
|
+
CANCEL_TAG
|
|
549
|
+
@description "The new-category form was dismissed without creating."
|
|
550
|
+
@synonyms "cancel, back"
|
|
551
|
+
@tier "internal"
|
|
552
|
+
LEVEL_RELOAD {
|
|
553
|
+
tagId : string
|
|
554
|
+
}
|
|
555
|
+
@description "Internal hop that refetches the open level after the new-category form closes (a fetch filter cannot read trait state, so the level travels by payload)."
|
|
556
|
+
@synonyms "reload level, refresh"
|
|
557
|
+
@tier "internal"
|
|
558
|
+
TagCreated {
|
|
559
|
+
row : Tag
|
|
560
|
+
}
|
|
561
|
+
@description "A new tag row persisted; the open level refetches to show it."
|
|
562
|
+
@synonyms "created, added"
|
|
563
|
+
@tier "internal"
|
|
564
|
+
TagCreateFailed {
|
|
565
|
+
error : string
|
|
566
|
+
code : string
|
|
567
|
+
}
|
|
568
|
+
@description "The tag create failed."
|
|
569
|
+
@synonyms "error, failure"
|
|
570
|
+
@tier "internal"
|
|
432
571
|
}
|
|
433
572
|
|
|
434
573
|
listens {
|
|
@@ -457,6 +596,39 @@ orbital TagTaxonomyOrbital {
|
|
|
457
596
|
@description "A tag in the taxonomy has been chosen by the user."
|
|
458
597
|
@synonyms "chosen, picked, activated, selected"
|
|
459
598
|
@tier "domain"
|
|
599
|
+
NEW_TAG
|
|
600
|
+
@description "The New-category affordance was clicked."
|
|
601
|
+
@synonyms "add tag, create category"
|
|
602
|
+
@tier "domain"
|
|
603
|
+
COMMIT_TAG {
|
|
604
|
+
data : TagCommit
|
|
605
|
+
}
|
|
606
|
+
@description "The new-category form committed."
|
|
607
|
+
@synonyms "save tag, create tag"
|
|
608
|
+
@tier "internal"
|
|
609
|
+
CANCEL_TAG
|
|
610
|
+
@description "The new-category form was dismissed."
|
|
611
|
+
@synonyms "cancel, back"
|
|
612
|
+
@tier "internal"
|
|
613
|
+
LEVEL_RELOAD {
|
|
614
|
+
tagId : string
|
|
615
|
+
}
|
|
616
|
+
@description "Refetch the open level."
|
|
617
|
+
@synonyms "reload level, refresh"
|
|
618
|
+
@tier "internal"
|
|
619
|
+
TagCreated {
|
|
620
|
+
row : Tag
|
|
621
|
+
}
|
|
622
|
+
@description "A new tag row persisted."
|
|
623
|
+
@synonyms "created, added"
|
|
624
|
+
@tier "internal"
|
|
625
|
+
TagCreateFailed {
|
|
626
|
+
error : string
|
|
627
|
+
code : string
|
|
628
|
+
}
|
|
629
|
+
@description "The tag create failed."
|
|
630
|
+
@synonyms "error, failure"
|
|
631
|
+
@tier "internal"
|
|
460
632
|
}
|
|
461
633
|
|
|
462
634
|
config {
|
|
@@ -466,7 +638,7 @@ orbital TagTaxonomyOrbital {
|
|
|
466
638
|
@tier "presentation"
|
|
467
639
|
allowEdit : boolean = false
|
|
468
640
|
@label "Allow editing"
|
|
469
|
-
@description "
|
|
641
|
+
@description "Render the New-category affordance: creations land at the level currently open (top level, or inside the drilled-into category). Rename is a follow-up (ledgered)."
|
|
470
642
|
@tier "domain"
|
|
471
643
|
tableLook : "dense" | "spacious" | "striped" | "borderless" | "card-rows" = dense
|
|
472
644
|
@label "Table look"
|
|
@@ -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"
|
|
@@ -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
|
|
|
@@ -12,7 +12,7 @@ orbital SortableListOrbital {
|
|
|
12
12
|
initial: idle
|
|
13
13
|
|
|
14
14
|
state idle {
|
|
15
|
-
INIT -> idle
|
|
15
|
+
INIT -> idle when @config.selfFetch
|
|
16
16
|
(fetch SortableListItem { emit: { success: SortableListLoaded } })
|
|
17
17
|
(render-ui main {
|
|
18
18
|
items: @entity
|
|
@@ -23,6 +23,16 @@ orbital SortableListOrbital {
|
|
|
23
23
|
className: @config.className
|
|
24
24
|
type: sortable-list
|
|
25
25
|
})
|
|
26
|
+
INIT -> idle when (not @config.selfFetch)
|
|
27
|
+
(render-ui main {
|
|
28
|
+
items: @entity
|
|
29
|
+
renderItem: (fn item { content: (object/get @item @config.itemLabelField ""), type: typography })
|
|
30
|
+
reorderEvent: @config.reorderEvent
|
|
31
|
+
reorderPayload: @config.reorderPayload
|
|
32
|
+
dragHandlePosition: @config.dragHandlePosition
|
|
33
|
+
className: @config.className
|
|
34
|
+
type: sortable-list
|
|
35
|
+
})
|
|
26
36
|
SortableListLoaded -> idle
|
|
27
37
|
(render-ui main {
|
|
28
38
|
items: @payload.data
|
|
@@ -68,6 +78,10 @@ orbital SortableListOrbital {
|
|
|
68
78
|
@label "Class Name"
|
|
69
79
|
@description "className prop"
|
|
70
80
|
@tier "presentation"
|
|
81
|
+
selfFetch : boolean = true
|
|
82
|
+
@label "Fetch its own rows on mount?"
|
|
83
|
+
@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."
|
|
84
|
+
@tier "internal"
|
|
71
85
|
}
|
|
72
86
|
}
|
|
73
87
|
|