@almadar/std 16.211.0 → 16.213.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/behaviors/lolo/agent/organisms/std-agent-rabit.lolo +1 -0
  2. package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +3 -0
  3. package/behaviors/lolo/infra/atoms/std-cache-aside.lolo +6 -0
  4. package/behaviors/lolo/infra/atoms/std-calendar-sync.lolo +3 -0
  5. package/behaviors/lolo/infra/atoms/std-cascade-on-delete.lolo +1 -0
  6. package/behaviors/lolo/infra/atoms/std-circuit-breaker.lolo +2 -0
  7. package/behaviors/lolo/infra/atoms/std-cross-reference.lolo +2 -0
  8. package/behaviors/lolo/infra/atoms/std-data-erasure.lolo +3 -0
  9. package/behaviors/lolo/infra/atoms/std-lifecycle.lolo +2 -0
  10. package/behaviors/lolo/infra/atoms/std-migration-job.lolo +12 -0
  11. package/behaviors/lolo/infra/atoms/std-mod-queue.lolo +1 -0
  12. package/behaviors/lolo/infra/atoms/std-notification-center.lolo +21 -1
  13. package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +5 -0
  14. package/behaviors/lolo/infra/atoms/std-reminder-scheduler.lolo +2 -0
  15. package/behaviors/lolo/infra/atoms/std-status-lifecycle.lolo +1 -0
  16. package/behaviors/lolo/ml/atoms/std-ml-classify.lolo +1 -0
  17. package/behaviors/lolo/ml/atoms/std-ml-infer.lolo +1 -0
  18. package/behaviors/lolo/ui/core/atoms/std-board.lolo +6 -0
  19. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +6 -1
  20. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +6 -1
  21. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +2 -0
  22. package/behaviors/lolo/ui/core/atoms/std-gallery.lolo +8 -1
  23. package/behaviors/lolo/ui/core/atoms/std-list.lolo +8 -1
  24. package/behaviors/lolo/ui/core/atoms/std-rating-review.lolo +214 -3
  25. package/behaviors/lolo/ui/core/atoms/std-selection.lolo +8 -1
  26. package/behaviors/lolo/ui/core/atoms/std-tag-strip.lolo +1 -0
  27. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +16 -0
  28. package/behaviors/lolo/ui/core/atoms/std-wizard.lolo +36 -0
  29. package/behaviors/lolo/ui/core/atoms/ui-badge.lolo +1 -1
  30. package/behaviors/lolo/ui/core/atoms/ui-button.lolo +1 -1
  31. package/behaviors/lolo/ui/core/atoms/ui-checkbox.lolo +22 -2
  32. package/behaviors/lolo/ui/core/atoms/ui-game-icon.lolo +1 -1
  33. package/behaviors/lolo/ui/core/atoms/ui-select.lolo +6 -2
  34. package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +3 -1
  35. package/behaviors/lolo/ui/core/molecules/ui-command-palette.lolo +1 -1
  36. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +13 -0
  37. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +13 -0
  38. package/behaviors/lolo/ui/core/molecules/ui-floating-toolbar.lolo +1 -1
  39. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +1 -1
  40. package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +1 -1
  41. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +13 -0
  42. package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +2 -2
  43. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +13 -0
  44. package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +6 -0
  45. package/behaviors/lolo/ui/game/atoms/ui-action-palette.lolo +1 -1
  46. package/behaviors/lolo/ui/game/atoms/ui-action-tile.lolo +1 -1
  47. package/behaviors/lolo/ui/game/atoms/ui-canvas-2d.lolo +2 -2
  48. package/behaviors/lolo/ui/game/atoms/ui-canvas.lolo +2 -2
  49. package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +1 -1
  50. package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +1 -1
  51. package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +4 -4
  52. package/behaviors/lolo/ui/game/atoms/ui-dialogue-bubble.lolo +1 -1
  53. package/behaviors/lolo/ui/game/atoms/ui-draw-fx-layer.lolo +1 -1
  54. package/behaviors/lolo/ui/game/atoms/ui-draw-skinned-mesh.lolo +7 -2
  55. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite-layer.lolo +1 -1
  56. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +1 -1
  57. package/behaviors/lolo/ui/game/atoms/ui-game-audio-toggle.lolo +2 -2
  58. package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +5 -5
  59. package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +1 -1
  60. package/behaviors/lolo/ui/game/atoms/ui-health-bar.lolo +2 -2
  61. package/behaviors/lolo/ui/game/atoms/ui-score-display.lolo +1 -1
  62. package/behaviors/lolo/ui/game/atoms/ui-sequence-bar.lolo +2 -2
  63. package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +2 -2
  64. package/behaviors/lolo/ui/game/atoms/ui-trait-slot.lolo +4 -4
  65. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +2 -2
  66. package/behaviors/registry/agent/organisms/std-agent-rabit.orb +8 -0
  67. package/behaviors/registry/infra/atoms/std-approval-gate.orb +56 -18
  68. package/behaviors/registry/infra/atoms/std-cache-aside.orb +76 -32
  69. package/behaviors/registry/infra/atoms/std-calendar-sync.orb +46 -0
  70. package/behaviors/registry/infra/atoms/std-cascade-on-delete.orb +20 -0
  71. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +40 -14
  72. package/behaviors/registry/infra/atoms/std-cross-reference.orb +41 -15
  73. package/behaviors/registry/infra/atoms/std-data-erasure.orb +52 -0
  74. package/behaviors/registry/infra/atoms/std-lifecycle.orb +36 -0
  75. package/behaviors/registry/infra/atoms/std-migration-job.orb +108 -0
  76. package/behaviors/registry/infra/atoms/std-mod-queue.orb +20 -0
  77. package/behaviors/registry/infra/atoms/std-notification-center.orb +208 -1
  78. package/behaviors/registry/infra/atoms/std-notify-on-event.orb +70 -0
  79. package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +36 -0
  80. package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +20 -0
  81. package/behaviors/registry/ml/atoms/std-ml-classify.orb +18 -0
  82. package/behaviors/registry/ml/atoms/std-ml-infer.orb +18 -0
  83. package/behaviors/registry/ui/core/atoms/std-board.orb +58 -0
  84. package/behaviors/registry/ui/core/atoms/std-browse.orb +9 -1
  85. package/behaviors/registry/ui/core/atoms/std-calendar.orb +9 -1
  86. package/behaviors/registry/ui/core/atoms/std-event-log.orb +26 -0
  87. package/behaviors/registry/ui/core/atoms/std-gallery.orb +35 -1
  88. package/behaviors/registry/ui/core/atoms/std-list.orb +35 -1
  89. package/behaviors/registry/ui/core/atoms/std-rating-review.orb +443 -2
  90. package/behaviors/registry/ui/core/atoms/std-selection.orb +35 -1
  91. package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +20 -0
  92. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +56 -0
  93. package/behaviors/registry/ui/core/atoms/std-wizard.orb +77 -0
  94. package/behaviors/registry/ui/core/atoms/ui-badge.orb +4 -1
  95. package/behaviors/registry/ui/core/atoms/ui-button.orb +4 -1
  96. package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +78 -2
  97. package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +4 -1
  98. package/behaviors/registry/ui/core/atoms/ui-select.orb +28 -0
  99. package/behaviors/registry/ui/core/atoms/ui-textarea.orb +14 -0
  100. package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +1 -28
  101. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +58 -0
  102. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +58 -0
  103. package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +1 -20
  104. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +1 -14
  105. package/behaviors/registry/ui/core/molecules/ui-menu.orb +1 -24
  106. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +58 -0
  107. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +8 -2
  108. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +58 -0
  109. package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +44 -0
  110. package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +4 -1
  111. package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +4 -1
  112. package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +2 -2
  113. package/behaviors/registry/ui/game/atoms/ui-canvas.orb +2 -2
  114. package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +4 -1
  115. package/behaviors/registry/ui/game/atoms/ui-control-button.orb +4 -1
  116. package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +10 -4
  117. package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +4 -1
  118. package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +4 -1
  119. package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +12 -2
  120. package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +4 -1
  121. package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +4 -1
  122. package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +8 -2
  123. package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +20 -5
  124. package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +4 -1
  125. package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +8 -2
  126. package/behaviors/registry/ui/game/atoms/ui-score-display.orb +4 -1
  127. package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +4 -1
  128. package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +8 -2
  129. package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +8 -2
  130. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +2 -2
  131. package/dist/behaviors/exports-reader.js +1813 -283
  132. package/dist/behaviors/functions/index.d.ts +64 -19
  133. package/dist/behaviors/functions/index.js +1811 -284
  134. package/dist/behaviors/index.d.ts +1 -1
  135. package/dist/behaviors/index.js +1814 -284
  136. package/dist/behaviors/query.js +1813 -283
  137. package/dist/behaviors-embeddings.hash.json +3 -3
  138. package/dist/behaviors-embeddings.json +15 -15
  139. package/dist/behaviors-registry.json +827 -490
  140. package/dist/index.d.ts +1 -1
  141. package/dist/index.js +1814 -284
  142. package/dist/knob-embeddings.hash.json +3 -3
  143. package/dist/knob-embeddings.json +1 -1
  144. package/dist/registry/factory-signatures.json +1 -1
  145. package/package.json +2 -2
@@ -881,9 +881,189 @@ orbital RatingReviewOrbital {
881
881
  type: stack
882
882
  })
883
883
  MARK_HELPFUL -> viewing
884
+ (set @entity.reviews (array/map @entity.reviews (fn row (if ["=", (object/get @row id ""), ?id] (object/merge @row { helpful: ["+", (object/get @row helpful 0), 1] }) @row))))
885
+ (set @entity.reviewsSource (array/map @entity.reviewsSource (fn row (if ["=", (object/get @row id ""), ?id] (object/merge @row { helpful: ["+", (object/get @row helpful 0), 1] }) @row))))
884
886
  (render-ui main {
885
- title: "Recording…"
886
- type: loading-state
887
+ children: [{
888
+ align: center
889
+ children: [{
890
+ children: [{
891
+ align: center
892
+ children: [{ name: star, type: icon }, {
893
+ content: Reviews
894
+ type: typography
895
+ variant: h3
896
+ }, {
897
+ color: muted
898
+ content: "·"
899
+ type: typography
900
+ }, {
901
+ content: @entity.averageRating
902
+ type: typography
903
+ variant: h3
904
+ }, {
905
+ color: warning
906
+ name: star
907
+ type: icon
908
+ }, {
909
+ color: muted
910
+ content: "·"
911
+ type: typography
912
+ }, {
913
+ color: muted
914
+ content: @entity.totalReviews
915
+ type: typography
916
+ variant: h4
917
+ }, {
918
+ color: muted
919
+ content: reviews
920
+ type: typography
921
+ variant: h4
922
+ }]
923
+ direction: horizontal
924
+ gap: sm
925
+ type: stack
926
+ }, {
927
+ color: muted
928
+ content: @config.subjectTitle
929
+ type: typography
930
+ variant: caption
931
+ }]
932
+ direction: vertical
933
+ gap: xs
934
+ type: stack
935
+ }, {
936
+ action: WRITE_REVIEW
937
+ icon: edit
938
+ label: @config.writeLabel
939
+ type: button
940
+ variant: primary
941
+ }]
942
+ direction: horizontal
943
+ gap: md
944
+ justify: between
945
+ type: stack
946
+ }, {
947
+ children: [{
948
+ children: [{
949
+ content: "Rating distribution"
950
+ type: typography
951
+ variant: h4
952
+ }, {
953
+ entity: @entity.starDistribution
954
+ fields: []
955
+ gap: sm
956
+ renderItem: (fn bar {
957
+ align: center
958
+ children: [{
959
+ content: @bar.label
960
+ type: typography
961
+ variant: caption
962
+ }, {
963
+ max: 100
964
+ type: progress-bar
965
+ value: @bar.percentage
966
+ variant: primary
967
+ }, {
968
+ color: muted
969
+ content: @bar.percentage
970
+ type: typography
971
+ variant: caption
972
+ }, {
973
+ color: muted
974
+ content: "%"
975
+ type: typography
976
+ variant: caption
977
+ }]
978
+ direction: horizontal
979
+ gap: md
980
+ type: stack
981
+ })
982
+ type: data-list
983
+ }]
984
+ direction: vertical
985
+ gap: sm
986
+ type: stack
987
+ }]
988
+ look: @config.cardLook
989
+ type: card
990
+ }, {
991
+ activeTab: @entity.currentSort
992
+ tabChangeEvent: CHANGE_SORT
993
+ tabs: @config.sortOptions
994
+ type: tabs
995
+ }, {
996
+ entity: @entity.reviews
997
+ fields: []
998
+ gap: md
999
+ renderItem: (fn review {
1000
+ children: [{
1001
+ children: [{
1002
+ align: center
1003
+ children: [{ name: @review.avatarIcon, type: icon }, {
1004
+ content: @review.authorName
1005
+ type: typography
1006
+ weight: bold
1007
+ }, {
1008
+ color: muted
1009
+ content: "·"
1010
+ type: typography
1011
+ }, {
1012
+ color: warning
1013
+ name: star
1014
+ type: icon
1015
+ }, {
1016
+ content: @review.rating
1017
+ type: typography
1018
+ weight: bold
1019
+ }, {
1020
+ color: muted
1021
+ content: "·"
1022
+ type: typography
1023
+ }, {
1024
+ color: muted
1025
+ content: @review.createdAt
1026
+ type: typography
1027
+ variant: caption
1028
+ }]
1029
+ direction: horizontal
1030
+ gap: sm
1031
+ type: stack
1032
+ }, {
1033
+ content: @review.comment
1034
+ type: typography
1035
+ variant: body
1036
+ }, {
1037
+ align: center
1038
+ children: [{
1039
+ action: MARK_HELPFUL
1040
+ actionPayload: { id: @review.id }
1041
+ icon: thumbs-up
1042
+ label: Helpful
1043
+ type: button
1044
+ variant: ghost
1045
+ }, {
1046
+ color: muted
1047
+ content: @review.helpful
1048
+ type: typography
1049
+ variant: caption
1050
+ }]
1051
+ direction: horizontal
1052
+ gap: sm
1053
+ type: stack
1054
+ }]
1055
+ direction: vertical
1056
+ gap: sm
1057
+ type: stack
1058
+ }]
1059
+ look: @config.cardLook
1060
+ type: card
1061
+ })
1062
+ type: data-list
1063
+ }]
1064
+ direction: vertical
1065
+ gap: lg
1066
+ type: stack
887
1067
  })
888
1068
  }
889
1069
 
@@ -1539,7 +1719,38 @@ orbital RatingReviewOrbital {
1539
1719
  }
1540
1720
  }
1541
1721
 
1542
- page "/reviews" as RatingReviewPage -> RatingReviewBoard
1722
+ trait RatingReviewPageNav -> ReviewView [interaction, instance] {
1723
+ initial: ready
1724
+
1725
+ state ready {
1726
+ INIT -> ready
1727
+ (render-ui main {
1728
+ action: OPEN_REVIEW_FORM
1729
+ icon: external-link
1730
+ label: "Open review form"
1731
+ type: button
1732
+ variant: ghost
1733
+ })
1734
+ OPEN_REVIEW_FORM -> ready
1735
+ (navigate "/reviews/new")
1736
+ }
1737
+
1738
+ emits {
1739
+ OPEN_REVIEW_FORM
1740
+ @description "Opens the standalone review-submission page."
1741
+ @synonyms "open form, new page, direct link"
1742
+ @tier "presentation"
1743
+ }
1744
+
1745
+ listens {
1746
+ OPEN_REVIEW_FORM
1747
+ @description "Opens the standalone review-submission page in place of the inline composer."
1748
+ @synonyms "open form, new page, direct link"
1749
+ @tier "presentation"
1750
+ }
1751
+ }
1752
+
1753
+ page "/reviews" as RatingReviewPage -> RatingReviewBoard, RatingReviewPageNav
1543
1754
 
1544
1755
  page "/reviews/new" as RatingReviewSubmitPage -> RatingReviewSubmit
1545
1756
  }
@@ -145,7 +145,7 @@ orbital SelectableItemOrbital {
145
145
  REFETCH_QUERY -> idle
146
146
  (fetch SelectableItem {
147
147
  emit: { failure: SelectableItemLoadFailed, success: SelectableItemLoaded }
148
- filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity name) ?searchTerm))
148
+ filter: (or ["=", ?searchTerm, ""] (str/includes (object/get @entity @config.searchField) ?searchTerm))
149
149
  })
150
150
  REFETCH_FILTER -> idle
151
151
  (fetch SelectableItem {
@@ -166,6 +166,8 @@ orbital SelectableItemOrbital {
166
166
  limit: @config.pageSize
167
167
  offset: ["*", ["-", ?page, 1], @config.pageSize]
168
168
  })
169
+ SelectableItemLoadFailed -> idle
170
+ (notify error (str/concat "Couldn't refresh the list — " ?error))
169
171
  SelectableItemLoaded -> idle
170
172
  (render-ui main {
171
173
  children: [{
@@ -429,6 +431,11 @@ orbital SelectableItemOrbital {
429
431
  @label "Table look"
430
432
  @description "Layer 2 visual treatment for the data table rendered by this atom."
431
433
  @tier "presentation"
434
+ searchField : string = "name"
435
+ @label "Which column does the search box match against?"
436
+ @description "Name the field on this entity the search box's str/includes filter matches against. Declared, never inferred: an entity with no `name` column must set this to a real field (e.g. title, label) or the search box can never match a row."
437
+ @synonyms "search column, search on field, match field, search key"
438
+ @tier "policy"
432
439
  bodySearch : boolean = false
433
440
  @label "Show the pick-list's own search box?"
434
441
  @description "Embeds a search box above the pick-list. Set true only when the page has no other search affordance (e.g. no page-level std-search), so the surface shows one search box instead of two. False is the default — this atom has never had a search box (0 consumers today)."
@@ -35,6 +35,7 @@ orbital TagStripOrbital {
35
35
  ;; Pre-scope paint: the store is warm but no record is open yet.
36
36
  TagStripOptions -> idle
37
37
  TagStripLoadFailed -> idle
38
+ (notify error (str/concat "Couldn't load tags — " ?error))
38
39
  SHOW_TAG_STRIP -> loading
39
40
  (set @entity.docId ?id)
40
41
  (set @entity.docTagIds (array/map ?tagIds (fn t (str/default (object/get @t id) @t))))
@@ -342,6 +342,22 @@ orbital TagTaxonomyOrbital {
342
342
  type: stack
343
343
  })
344
344
  (emit LEVEL_RELOAD { tagId: @entity.id })
345
+ CLOSE -> loading
346
+ (render-ui modal null)
347
+ (render-ui main {
348
+ align: center
349
+ children: [{ type: spinner }, {
350
+ color: muted
351
+ content: "Loading…"
352
+ type: typography
353
+ variant: caption
354
+ }]
355
+ className: py-12
356
+ direction: vertical
357
+ gap: md
358
+ type: stack
359
+ })
360
+ (emit LEVEL_RELOAD { tagId: @entity.id })
345
361
  ;; Refetch the level the new tag landed on — its own parentId names it.
346
362
  TagCreated -> loading
347
363
  (render-ui modal null)
@@ -444,6 +444,42 @@ orbital WizardOrbital {
444
444
  }
445
445
 
446
446
  state completed {
447
+ WizardSaved -> completed
448
+ (render-ui main {
449
+ align: center
450
+ children: [{
451
+ name: check-circle
452
+ size: lg
453
+ type: icon
454
+ }, {
455
+ align: center
456
+ content: Complete
457
+ type: typography
458
+ variant: h2
459
+ }, {
460
+ align: center
461
+ color: muted
462
+ content: @entity.completionMessage
463
+ type: typography
464
+ variant: body
465
+ }, {
466
+ allowNavigation: false
467
+ currentStep: @entity.totalSteps
468
+ steps: @entity.wizardSteps
469
+ type: wizard-progress
470
+ }, {
471
+ action: RESTART
472
+ icon: rotate-ccw
473
+ label: "Start a new wizard"
474
+ type: button
475
+ variant: secondary
476
+ }]
477
+ direction: vertical
478
+ gap: lg
479
+ type: stack
480
+ })
481
+ WizardSaveFailed -> completed
482
+ (notify error (str/concat "Couldn't save the wizard — " ?error))
447
483
  RESTART -> loading
448
484
  (set @entity.currentStepIndex 0)
449
485
  (set @entity.completionMessage "")
@@ -9,7 +9,7 @@ orbital BadgeOrbital {
9
9
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
10
10
  variant : string
11
11
  dimension : "2d" | "3d"
12
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
12
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
13
13
  atlas : asset
14
14
  sprite : string
15
15
  name : string
@@ -9,7 +9,7 @@ orbital ButtonOrbital {
9
9
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
10
10
  variant : string
11
11
  dimension : "2d" | "3d"
12
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
12
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
13
13
  atlas : asset
14
14
  sprite : string
15
15
  name : string
@@ -3,6 +3,7 @@ app ui-checkbox "1.0.0"
3
3
  orbital CheckboxOrbital {
4
4
  entity CheckboxItem [runtime] {
5
5
  id : string!
6
+ checked : boolean @intrinsic
6
7
  }
7
8
 
8
9
  trait CheckboxRender -> @rebindable CheckboxItem [interaction, instance] {
@@ -10,9 +11,20 @@ orbital CheckboxOrbital {
10
11
 
11
12
  state idle {
12
13
  INIT -> idle
14
+ (set @entity.checked @config.checked)
13
15
  (render-ui main {
14
16
  className: @config.className
15
- checked: @config.checked
17
+ checked: @entity.checked
18
+ defaultChecked: @config.defaultChecked
19
+ label: @config.label
20
+ onChange: @config.onChange
21
+ type: checkbox
22
+ })
23
+ CHANGE -> idle
24
+ (set @entity.checked ?checked)
25
+ (render-ui main {
26
+ className: @config.className
27
+ checked: @entity.checked
16
28
  defaultChecked: @config.defaultChecked
17
29
  label: @config.label
18
30
  onChange: @config.onChange
@@ -21,11 +33,19 @@ orbital CheckboxOrbital {
21
33
  }
22
34
 
23
35
  emits {
24
- @config.onChange -> external { }
36
+ @config.onChange -> external {
37
+ checked : boolean!
38
+ }
25
39
  @description "onChange handler or declarative event key for trait dispatch"
26
40
  @tier "essential"
27
41
  }
28
42
 
43
+ listens {
44
+ CHANGE {
45
+ checked : boolean!
46
+ }
47
+ }
48
+
29
49
  config {
30
50
  className : string
31
51
  @label "Class Name"
@@ -9,7 +9,7 @@ orbital GameIconOrbital {
9
9
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
10
10
  variant : string
11
11
  dimension : "2d" | "3d"
12
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
12
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
13
13
  atlas : asset
14
14
  sprite : string
15
15
  name : string
@@ -46,10 +46,14 @@ orbital SelectOrbital {
46
46
  }
47
47
  @description "Declarative event name for trait dispatch — emits `{ value }` on selection commit (same gestures as `onChange`)."
48
48
  @tier "essential"
49
- @config.onChange -> external { }
49
+ @config.onChange -> external {
50
+ value : string!
51
+ }
50
52
  @description "onChange handler (native ChangeEvent) or declarative event key for trait dispatch"
51
53
  @tier "essential"
52
- @config.onValueChange -> external { }
54
+ @config.onValueChange -> external {
55
+ value : string!
56
+ }
53
57
  @description "Value-based change: a React callback (internal use) OR a declarative event key that emits `{ value }` on the bus (render-ui / lolo authoring). Mirrors the `onChange` handler|event convention so it's an event-emitting prop, not a bare callback."
54
58
  @tier "essential"
55
59
  }
@@ -25,7 +25,9 @@ orbital TextareaOrbital {
25
25
  @config.action -> external { }
26
26
  @description "Declarative event name for trait dispatch"
27
27
  @tier "essential"
28
- @config.onChange -> external { }
28
+ @config.onChange -> external {
29
+ value : string!
30
+ }
29
31
  @description "onChange handler or declarative event key for trait dispatch"
30
32
  @tier "essential"
31
33
  }
@@ -89,7 +89,7 @@ orbital CommandPaletteOrbital {
89
89
  @label "On Open Change"
90
90
  @description "Called to open/close the overlay (Escape, overlay click, or a selection)"
91
91
  @tier "presentation"
92
- commands : [CommandPaletteCommandsItem] = [{ id: "Id", label: "Label", icon: "circle", shortcut: "Shortcut", keywords: ["Item", "Item 2"], group: "Group", disabled: false, action: "INIT" }, { id: "Id 2", label: "Label 2", icon: "circle", shortcut: "Shortcut 2", keywords: ["Item", "Item 2"], group: "Group 2", disabled: true, action: "INIT" }]
92
+ commands : [CommandPaletteCommandsItem] = []
93
93
  @label "Commands"
94
94
  @description "Commands listed in the palette, filtered as the user types"
95
95
  @tier "presentation"
@@ -32,6 +32,12 @@ orbital DataGridOrbital {
32
32
  code : string
33
33
  stack : string
34
34
  }
35
+ type DataGridRelationsDataValueItem = {
36
+ value : string!
37
+ label : string!
38
+ description : string
39
+ disabled : boolean
40
+ }
35
41
 
36
42
  entity DataGridItem [runtime] {
37
43
  id : string!
@@ -72,6 +78,7 @@ orbital DataGridOrbital {
72
78
  hasMore: @config.hasMore
73
79
  pageSize: @config.pageSize
74
80
  look: @config.look
81
+ relationsData: @config.relationsData
75
82
  type: data-grid
76
83
  })
77
84
  INIT -> idle when (not @config.selfFetch)
@@ -104,6 +111,7 @@ orbital DataGridOrbital {
104
111
  hasMore: @config.hasMore
105
112
  pageSize: @config.pageSize
106
113
  look: @config.look
114
+ relationsData: @config.relationsData
107
115
  type: data-grid
108
116
  })
109
117
  DataGridLoaded -> idle
@@ -136,6 +144,7 @@ orbital DataGridOrbital {
136
144
  hasMore: @config.hasMore
137
145
  pageSize: @config.pageSize
138
146
  look: @config.look
147
+ relationsData: @config.relationsData
139
148
  type: data-grid
140
149
  })
141
150
  }
@@ -270,6 +279,10 @@ orbital DataGridOrbital {
270
279
  @label "Look"
271
280
  @description "Layer 2 visual treatment — mirrors the `entity-table` look enum so data-grid / data-list / entity-table share one knob name from authors."
272
281
  @tier "presentation"
282
+ relationsData : Map string [DataGridRelationsDataValueItem] = {}
283
+ @label "Relations Data"
284
+ @description "Relation display data: { fieldName: [{value, label}] } — injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a field whose type is relation. Same contract DetailPanel takes."
285
+ @tier "presentation"
273
286
  selfFetch : boolean = true
274
287
  @label "Fetch its own rows on mount?"
275
288
  @description "true (default) = standalone mount self-populates on INIT. false = a composing atom owns the fetch and routes its loaded event here — suppresses the wrapper's own un-hydrated fetch so it cannot race the composer's."
@@ -38,6 +38,12 @@ orbital DataListOrbital {
38
38
  icon : icon
39
39
  variant : "primary" | "secondary" | "danger" | "ghost"
40
40
  }
41
+ type DataListRelationsDataValueItem = {
42
+ value : string!
43
+ label : string!
44
+ description : string
45
+ disabled : boolean
46
+ }
41
47
 
42
48
  entity DataListItem [runtime] {
43
49
  id : string!
@@ -87,6 +93,7 @@ orbital DataListOrbital {
87
93
  sortBy: @config.sortBy
88
94
  sortDirection: @config.sortDirection
89
95
  look: @config.look
96
+ relationsData: @config.relationsData
90
97
  type: data-list
91
98
  })
92
99
  INIT -> idle when (not @config.selfFetch)
@@ -128,6 +135,7 @@ orbital DataListOrbital {
128
135
  sortBy: @config.sortBy
129
136
  sortDirection: @config.sortDirection
130
137
  look: @config.look
138
+ relationsData: @config.relationsData
131
139
  type: data-list
132
140
  })
133
141
  DataListLoaded -> idle
@@ -169,6 +177,7 @@ orbital DataListOrbital {
169
177
  sortBy: @config.sortBy
170
178
  sortDirection: @config.sortDirection
171
179
  look: @config.look
180
+ relationsData: @config.relationsData
172
181
  type: data-list
173
182
  })
174
183
  }
@@ -352,6 +361,10 @@ orbital DataListOrbital {
352
361
  @label "Look"
353
362
  @description "Layer 2 visual treatment — mirrors the `entity-table` look enum so data-grid / data-list / entity-table share one knob name from authors."
354
363
  @tier "presentation"
364
+ relationsData : Map string [DataListRelationsDataValueItem] = {}
365
+ @label "Relations Data"
366
+ @description "Relation display data: { fieldName: [{value, label}] } — injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a field whose type is relation. Same contract DetailPanel takes."
367
+ @tier "presentation"
355
368
  selfFetch : boolean = true
356
369
  @label "Fetch its own rows on mount?"
357
370
  @description "true (default) = standalone mount self-populates on INIT. false = a composing atom owns the fetch and routes its loaded event here — suppresses the wrapper's own un-hydrated fetch so it cannot race the composer's."
@@ -32,7 +32,7 @@ orbital FloatingToolbarOrbital {
32
32
  }
33
33
 
34
34
  config {
35
- items : [FloatingToolbarItemsItem] = [{ id: "Id", icon: "circle", label: "Label", action: "INIT", active: false, disabled: false, testId: "Test Id" }, { id: "Id 2", icon: "circle", label: "Label 2", action: "INIT", active: true, disabled: true, testId: "Test Id 2" }]
35
+ items : [FloatingToolbarItemsItem] = []
36
36
  @label "Items"
37
37
  @description "Tool items rendered as icon buttons"
38
38
  @tier "presentation"
@@ -56,7 +56,7 @@ orbital ImportPreviewTreeOrbital {
56
56
  }
57
57
 
58
58
  config {
59
- units : [ImportPreviewTreeUnitsItem] = [{ ref: "Ref", targetEntity: "Target Entity", fields: {}, parentRef: "Parent Ref" }, { ref: "Ref 2", targetEntity: "Target Entity 2", fields: {}, parentRef: "Parent Ref 2" }]
59
+ units : [ImportPreviewTreeUnitsItem] = []
60
60
  @label "Units"
61
61
  @description "Staged units to preview"
62
62
  @tier "presentation"
@@ -39,7 +39,7 @@ orbital MenuOrbital {
39
39
  @label "Trigger"
40
40
  @description "Menu trigger element"
41
41
  @tier "presentation"
42
- items : [MenuItemsItem] = [{ id: "Id", label: "Label", icon: "circle", badge: "Badge", disabled: false, title: "Title", url: "Url", variant: default, subMenu: [] }, { id: "Id 2", label: "Label 2", icon: "circle", badge: "Badge 2", disabled: true, title: "Title 2", url: "Url 2", variant: danger, subMenu: [] }]
42
+ items : [MenuItemsItem] = []
43
43
  @label "Items"
44
44
  @description "Menu items"
45
45
  @tier "presentation"
@@ -41,6 +41,12 @@ orbital TableViewOrbital {
41
41
  code : string
42
42
  stack : string
43
43
  }
44
+ type TableViewRelationsDataValueItem = {
45
+ value : string!
46
+ label : string!
47
+ description : string
48
+ disabled : boolean
49
+ }
44
50
 
45
51
  entity TableViewItem [runtime] {
46
52
  id : string!
@@ -80,6 +86,7 @@ orbital TableViewOrbital {
80
86
  groupBy: @config.groupBy
81
87
  pageSize: @config.pageSize
82
88
  look: @config.look
89
+ relationsData: @config.relationsData
83
90
  type: table-view
84
91
  })
85
92
  INIT -> idle when (not @config.selfFetch)
@@ -111,6 +118,7 @@ orbital TableViewOrbital {
111
118
  groupBy: @config.groupBy
112
119
  pageSize: @config.pageSize
113
120
  look: @config.look
121
+ relationsData: @config.relationsData
114
122
  type: table-view
115
123
  })
116
124
  TableViewLoaded -> idle
@@ -142,6 +150,7 @@ orbital TableViewOrbital {
142
150
  groupBy: @config.groupBy
143
151
  pageSize: @config.pageSize
144
152
  look: @config.look
153
+ relationsData: @config.relationsData
145
154
  type: table-view
146
155
  })
147
156
  }
@@ -275,6 +284,10 @@ orbital TableViewOrbital {
275
284
  @label "Look"
276
285
  @description "Layer 2 visual treatment — mirrors the data-list / entity-table look enum so authors share one knob name across row renderers."
277
286
  @tier "presentation"
287
+ relationsData : Map string [TableViewRelationsDataValueItem] = {}
288
+ @label "Relations Data"
289
+ @description "Relation display data: { fieldName: [{value, label}] } — injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a column whose field is relation-typed. Same contract DetailPanel takes."
290
+ @tier "presentation"
278
291
  selfFetch : boolean = true
279
292
  @label "Fetch its own rows on mount?"
280
293
  @description "true (default) = standalone mount self-populates on INIT. false = a composing atom owns the fetch and routes its loaded event here — suppresses the wrapper's own un-hydrated fetch so it cannot race the composer's."
@@ -21,7 +21,7 @@ orbital TabsOrbital {
21
21
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
22
22
  variant : string
23
23
  dimension : "2d" | "3d"
24
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
24
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
25
25
  atlas : asset
26
26
  sprite : string
27
27
  name : string
@@ -47,7 +47,7 @@ orbital TabsOrbital {
47
47
  style : "pixel" | "vector" | "hd" | "1-bit" | "isometric"
48
48
  variant : string
49
49
  dimension : "2d" | "3d"
50
- aspect : "1:1" | "16:9" | "5:7" | "8:1"
50
+ aspect : "1:1" | "16:9" | "5:7" | "8:1" | "4:1" | "5:3" | "1:2"
51
51
  atlas : asset
52
52
  sprite : string
53
53
  name : string