@almadar/std 16.198.0 → 16.200.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 (218) hide show
  1. package/behaviors/lolo/ui/avl/atoms/ui-behavior-view.lolo +2 -2
  2. package/behaviors/lolo/ui/avl/atoms/ui-module-card.lolo +2 -2
  3. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +1 -1
  4. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +1 -1
  5. package/behaviors/lolo/ui/core/atoms/ui-conditional-wrapper.lolo +11 -4
  6. package/behaviors/lolo/ui/core/atoms/ui-icon.lolo +1 -1
  7. package/behaviors/lolo/ui/core/atoms/ui-input.lolo +10 -4
  8. package/behaviors/lolo/ui/core/atoms/ui-select.lolo +6 -4
  9. package/behaviors/lolo/ui/core/molecules/ui-branching-logic-builder.lolo +5 -5
  10. package/behaviors/lolo/ui/core/molecules/ui-doc-sidebar.lolo +1 -1
  11. package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +8 -1
  12. package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +1 -1
  13. package/behaviors/lolo/ui/core/molecules/ui-edge-decoration.lolo +1 -1
  14. package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +1 -1
  15. package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +1 -1
  16. package/behaviors/lolo/ui/core/molecules/ui-gradient-divider.lolo +1 -1
  17. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +8 -1
  18. package/behaviors/lolo/ui/core/molecules/ui-input-group.lolo +10 -4
  19. package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +1 -1
  20. package/behaviors/lolo/ui/core/molecules/ui-navigation.lolo +1 -1
  21. package/behaviors/lolo/ui/core/molecules/ui-orbital-visualization.lolo +3 -3
  22. package/behaviors/lolo/ui/core/molecules/ui-reply-tree.lolo +1 -1
  23. package/behaviors/lolo/ui/core/molecules/ui-sidebar.lolo +1 -1
  24. package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +3 -3
  25. package/behaviors/lolo/ui/core/molecules/ui-wizard-container.lolo +24 -17
  26. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +2 -2
  27. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +1 -1
  28. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +2 -2
  29. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +15 -8
  30. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +15 -8
  31. package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +1 -1
  32. package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +3 -3
  33. package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +1 -1
  34. package/behaviors/lolo/ui/game/atoms/std-fx-narrative.lolo +126 -0
  35. package/behaviors/lolo/ui/game/atoms/std-pickup.lolo +104 -0
  36. package/behaviors/lolo/ui/game/atoms/std-platformer-body.lolo +39 -19
  37. package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +3 -3
  38. package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +1 -1
  39. package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +1 -1
  40. package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +3 -3
  41. package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +3 -3
  42. package/behaviors/registry/ui/avl/atoms/ui-behavior-view.orb +389 -3
  43. package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +389 -3
  44. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +93 -2
  45. package/behaviors/registry/ui/core/atoms/std-file-store.orb +101 -2
  46. package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +13 -1
  47. package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +13 -1
  48. package/behaviors/registry/ui/core/atoms/ui-badge.orb +56 -1
  49. package/behaviors/registry/ui/core/atoms/ui-button.orb +56 -1
  50. package/behaviors/registry/ui/core/atoms/ui-conditional-wrapper.orb +277 -5
  51. package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +56 -1
  52. package/behaviors/registry/ui/core/atoms/ui-icon.orb +1 -10
  53. package/behaviors/registry/ui/core/atoms/ui-input.orb +42 -7
  54. package/behaviors/registry/ui/core/atoms/ui-law-reference-tooltip.orb +27 -1
  55. package/behaviors/registry/ui/core/atoms/ui-select.orb +69 -9
  56. package/behaviors/registry/ui/core/molecules/ui-accordion.orb +30 -1
  57. package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +76 -13
  58. package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +30 -1
  59. package/behaviors/registry/ui/core/molecules/ui-chart-legend.orb +15 -1
  60. package/behaviors/registry/ui/core/molecules/ui-chart.orb +133 -1
  61. package/behaviors/registry/ui/core/molecules/ui-code-block.orb +77 -1
  62. package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +22 -1
  63. package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +34 -1
  64. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +99 -1
  65. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +118 -1
  66. package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +27 -1
  67. package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +15 -1
  68. package/behaviors/registry/ui/core/molecules/ui-doc-breadcrumb.orb +14 -1
  69. package/behaviors/registry/ui/core/molecules/ui-doc-pagination.orb +35 -1
  70. package/behaviors/registry/ui/core/molecules/ui-doc-sidebar.orb +46 -2
  71. package/behaviors/registry/ui/core/molecules/ui-doc-toc.orb +20 -1
  72. package/behaviors/registry/ui/core/molecules/ui-document-details.orb +65 -3
  73. package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +22 -1
  74. package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +60 -1
  75. package/behaviors/registry/ui/core/molecules/ui-drawer.orb +1 -8
  76. package/behaviors/registry/ui/core/molecules/ui-edge-decoration.orb +1 -9
  77. package/behaviors/registry/ui/core/molecules/ui-feature-grid.orb +39 -1
  78. package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +86 -2
  79. package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +39 -1
  80. package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +29 -10
  81. package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +85 -1
  82. package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +22 -1
  83. package/behaviors/registry/ui/core/molecules/ui-fx-overlay.orb +76 -1
  84. package/behaviors/registry/ui/core/molecules/ui-gradient-divider.orb +1 -10
  85. package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +421 -1
  86. package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +92 -1
  87. package/behaviors/registry/ui/core/molecules/ui-header.orb +59 -1
  88. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +125 -2
  89. package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +17 -1
  90. package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +39 -1
  91. package/behaviors/registry/ui/core/molecules/ui-input-group.orb +42 -7
  92. package/behaviors/registry/ui/core/molecules/ui-jazari-state-machine.orb +22 -1
  93. package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +17 -1
  94. package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +15 -1
  95. package/behaviors/registry/ui/core/molecules/ui-line-chart.orb +18 -1
  96. package/behaviors/registry/ui/core/molecules/ui-map-view.orb +109 -1
  97. package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +27 -1
  98. package/behaviors/registry/ui/core/molecules/ui-menu.orb +86 -2
  99. package/behaviors/registry/ui/core/molecules/ui-meter.orb +57 -1
  100. package/behaviors/registry/ui/core/molecules/ui-navigation.orb +99 -2
  101. package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +27 -1
  102. package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +78 -4
  103. package/behaviors/registry/ui/core/molecules/ui-page-header.orb +91 -1
  104. package/behaviors/registry/ui/core/molecules/ui-qr-scanner.orb +20 -1
  105. package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +23 -1
  106. package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +18 -1
  107. package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +5 -2
  108. package/behaviors/registry/ui/core/molecules/ui-section.orb +22 -1
  109. package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +99 -2
  110. package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +22 -1
  111. package/behaviors/registry/ui/core/molecules/ui-social-proof.orb +18 -1
  112. package/behaviors/registry/ui/core/molecules/ui-split.orb +22 -1
  113. package/behaviors/registry/ui/core/molecules/ui-stat-display.orb +22 -1
  114. package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +64 -4
  115. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +136 -1
  116. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +301 -1
  117. package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +25 -1
  118. package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +28 -1
  119. package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +46 -1
  120. package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +1607 -50
  121. package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +19 -1
  122. package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +22 -1
  123. package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +40 -1
  124. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +196 -1
  125. package/behaviors/registry/ui/core/organisms/ui-drawer-slot.orb +22 -1
  126. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +83 -14
  127. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +64 -8
  128. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +152 -14
  129. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +1140 -15
  130. package/behaviors/registry/ui/core/organisms/ui-form.orb +1140 -15
  131. package/behaviors/registry/ui/core/organisms/ui-master-detail.orb +22 -1
  132. package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +71 -1
  133. package/behaviors/registry/ui/core/organisms/ui-modal-slot.orb +22 -1
  134. package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +29 -1
  135. package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +61 -7
  136. package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +22 -1
  137. package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +37 -7
  138. package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +31 -1
  139. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +73 -1
  140. package/behaviors/registry/ui/core/organisms/ui-toast-slot.orb +22 -1
  141. package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +122 -2
  142. package/behaviors/registry/ui/game/atoms/std-fx-narrative.orb +695 -0
  143. package/behaviors/registry/ui/game/atoms/std-pickup.orb +835 -0
  144. package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +1515 -1041
  145. package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +269 -1
  146. package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +288 -1
  147. package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +54 -1
  148. package/behaviors/registry/ui/game/atoms/ui-canvas.orb +311 -1
  149. package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +56 -1
  150. package/behaviors/registry/ui/game/atoms/ui-control-button.orb +59 -20
  151. package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +186 -7
  152. package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +56 -1
  153. package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +233 -1
  154. package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +137 -1
  155. package/behaviors/registry/ui/game/atoms/ui-draw-mesh.orb +219 -1
  156. package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +951 -1
  157. package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +512 -1
  158. package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +270 -1
  159. package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +106 -1
  160. package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +85 -1
  161. package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +19 -1
  162. package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +128 -1
  163. package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +168 -8
  164. package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +151 -13
  165. package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +109 -1
  166. package/behaviors/registry/ui/game/atoms/ui-score-display.orb +56 -1
  167. package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +523 -1
  168. package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +112 -22
  169. package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +24 -1
  170. package/behaviors/registry/ui/game/atoms/ui-state-json-view.orb +20 -1
  171. package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +849 -1
  172. package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +289 -1
  173. package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +424 -1
  174. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +925 -1
  175. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +970 -1
  176. package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +351 -1
  177. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +592 -1
  178. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1049 -1
  179. package/behaviors/registry/ui/marketing/atoms/ui-community-links.orb +36 -1
  180. package/behaviors/registry/ui/marketing/atoms/ui-cta-banner.orb +27 -1
  181. package/behaviors/registry/ui/marketing/atoms/ui-hero-section.orb +39 -1
  182. package/behaviors/registry/ui/marketing/atoms/ui-marketing-footer.orb +55 -1
  183. package/behaviors/registry/ui/marketing/atoms/ui-pricing-card.orb +15 -1
  184. package/behaviors/registry/ui/marketing/atoms/ui-pricing-grid.orb +65 -1
  185. package/behaviors/registry/ui/marketing/atoms/ui-service-catalog.orb +19 -1
  186. package/behaviors/registry/ui/marketing/atoms/ui-showcase-card.orb +15 -1
  187. package/behaviors/registry/ui/marketing/atoms/ui-split-section.orb +15 -1
  188. package/behaviors/registry/ui/marketing/atoms/ui-stats-grid.orb +15 -1
  189. package/behaviors/registry/ui/marketing/atoms/ui-step-flow.orb +23 -1
  190. package/behaviors/registry/ui/marketing/atoms/ui-tag-cloud.orb +18 -1
  191. package/behaviors/registry/ui/marketing/organisms/ui-book-viewer.orb +84 -1
  192. package/behaviors/registry/ui/marketing/organisms/ui-case-study-organism.orb +22 -1
  193. package/behaviors/registry/ui/marketing/organisms/ui-feature-grid-organism.orb +22 -1
  194. package/behaviors/registry/ui/marketing/organisms/ui-hero-organism.orb +52 -1
  195. package/behaviors/registry/ui/marketing/organisms/ui-pricing-organism.orb +22 -1
  196. package/behaviors/registry/ui/marketing/organisms/ui-showcase-organism.orb +32 -1
  197. package/behaviors/registry/ui/marketing/organisms/ui-stats-organism.orb +22 -1
  198. package/behaviors/registry/ui/marketing/organisms/ui-step-flow-organism.orb +22 -1
  199. package/behaviors/registry/ui/marketing/organisms/ui-team-organism.orb +22 -1
  200. package/behaviors/registry/ui/marketing/templates/ui-about-page-template.orb +176 -1
  201. package/behaviors/registry/ui/marketing/templates/ui-feature-detail-page-template.orb +147 -1
  202. package/behaviors/registry/ui/marketing/templates/ui-landing-page-template.orb +260 -1
  203. package/behaviors/registry/ui/marketing/templates/ui-pricing-page-template.orb +98 -1
  204. package/dist/behaviors/exports-reader.js +3302 -2594
  205. package/dist/behaviors/functions/index.d.ts +203 -29
  206. package/dist/behaviors/functions/index.js +3297 -2595
  207. package/dist/behaviors/index.d.ts +1 -1
  208. package/dist/behaviors/index.js +3303 -2595
  209. package/dist/behaviors/query.js +3302 -2594
  210. package/dist/behaviors-embeddings.hash.json +3 -3
  211. package/dist/behaviors-embeddings.json +9 -1
  212. package/dist/behaviors-registry.json +531 -8
  213. package/dist/index.d.ts +1 -1
  214. package/dist/index.js +3303 -2595
  215. package/dist/knob-embeddings.hash.json +3 -3
  216. package/dist/knob-embeddings.json +1 -1
  217. package/dist/registry/factory-signatures.json +1 -1
  218. package/package.json +2 -2
@@ -10,7 +10,7 @@ orbital FormOrbital {
10
10
  inputType : string
11
11
  placeholder : string
12
12
  required : boolean
13
- defaultValue : opaque
13
+ defaultValue : ControlValue
14
14
  options : [FormFieldsItemOptionsItem]
15
15
  values : [string]
16
16
  relation : FormFieldsItemRelation
@@ -22,6 +22,13 @@ orbital FormOrbital {
22
22
  disabled : boolean
23
23
  hint : string
24
24
  }
25
+ type ControlValue = string | number | boolean | [string] | FileValue
26
+ type FileValue = {
27
+ name : string!
28
+ url : string!
29
+ mimeType : string!
30
+ sizeBytes : number!
31
+ }
25
32
  type FormFieldsItemOptionsItem = {
26
33
  value : string!
27
34
  label : string!
@@ -69,10 +76,10 @@ orbital FormOrbital {
69
76
  message : string!
70
77
  }
71
78
  type FormEvaluationContext = {
72
- formValues : Map string opaque!
73
- globalVariables : Map string opaque!
74
- localVariables : Map string opaque
75
- entity : Map string opaque
79
+ formValues : Map string ControlValue!
80
+ globalVariables : Map string ControlValue!
81
+ localVariables : Map string ControlValue
82
+ entity : Map string ControlValue
76
83
  }
77
84
  type FormSectionsItem = {
78
85
  id : string!
@@ -89,7 +96,7 @@ orbital FormOrbital {
89
96
  inputType : string
90
97
  placeholder : string
91
98
  required : boolean
92
- defaultValue : opaque
99
+ defaultValue : ControlValue
93
100
  options : [FormSectionsItemFieldsItemOptionsItem]
94
101
  values : [string]
95
102
  relation : FormSectionsItemFieldsItemRelation
@@ -116,7 +123,7 @@ orbital FormOrbital {
116
123
  type FormFIELDCHANGEChange = {
117
124
  fieldId : string!
118
125
  value : string | number | boolean | [string] | FormFIELDCHANGEChangeValue!
119
- formValues : Map string opaque!
126
+ formValues : Map string ControlValue!
120
127
  }
121
128
  type FormFIELDCHANGEChangeValue = {
122
129
  name : string!
@@ -283,7 +290,7 @@ orbital FormOrbital {
283
290
  @label "Class Name"
284
291
  @description "Additional CSS classes"
285
292
  @tier "presentation"
286
- mode : "create" | "edit" = create
293
+ mode : string
287
294
  @label "Mode"
288
295
  @description "Form mode — 'create' for new records, 'edit' for updating existing. Accepts `string` so schema-driven callers (whose `config.mode` is typed as `string` per the trait's declared config block) compile cleanly. The runtime treats anything other than 'edit' as 'create'."
289
296
  @tier "presentation"
@@ -18,7 +18,7 @@ orbital StatCardOrbital {
18
18
  label : string!
19
19
  value : string
20
20
  icon : icon
21
- format : "currency" | "percent" | "number"
21
+ format : string
22
22
  }
23
23
 
24
24
  entity StatCardItem [runtime] {
@@ -114,7 +114,7 @@ orbital SubagentTracePanelOrbital {
114
114
  @label "Selected Ids"
115
115
  @description "Currently selected item IDs"
116
116
  @tier "presentation"
117
- subagents : [opaque] = []
117
+ subagents : [Map string scalar] = []
118
118
  @label "Subagents"
119
119
  @description "All known subagents from the runner."
120
120
  @tier "presentation"
@@ -134,11 +134,11 @@ orbital SubagentTracePanelOrbital {
134
134
  @label "On Close"
135
135
  @description "Optional dismiss handler."
136
136
  @tier "presentation"
137
- coordinatorActivities : [opaque] = []
137
+ coordinatorActivities : [Map string scalar] = []
138
138
  @label "Coordinator Activities"
139
139
  @description "Full coordinator activities (tool calls, results, messages, errors)."
140
140
  @tier "presentation"
141
- coordinatorMessages : [opaque] = []
141
+ coordinatorMessages : [Map string scalar] = []
142
142
  @label "Coordinator Messages"
143
143
  @description "Canonical Coordinator conversation — same shape live and on reload. When present, takes precedence over `coordinatorActivities` for the Coordinator section."
144
144
  @tier "presentation"
@@ -6,7 +6,7 @@ orbital DashboardLayoutOrbital {
6
6
  href : string!
7
7
  icon : icon
8
8
  badge : string
9
- children : [opaque]
9
+ children : [DashboardLayoutNavItemsItem]
10
10
  }
11
11
  type DashboardLayoutUser = {
12
12
  name : string!
@@ -0,0 +1,126 @@
1
+ app std-fx-narrative "1.0.0"
2
+ "Headless pedagogy→fx translator for game boards and learning shells: turns high-level narrative events into big transient screen-space or world-space text effects consumed by std-fx-particles / fx-overlay. Levels emit NARRATE { text, style } and get a correctly styled, centered (or positioned) floating text burst without hand-rolling particle structs. Tutorials emit TUTORIAL_SHOW and the atom forwards SHOW to a composed std-tutorial-overlay trait. Renders nothing; centralizes the FX vocabulary so every level's teaching text looks and behaves the same."
3
+
4
+ orbital FxNarrativeOrbital {
5
+ type NarrativeCue = {
6
+ text : string!
7
+ style : "hint" | "fact" | "warn" | "celebrate"
8
+ x : number
9
+ y : number
10
+ ttl : number
11
+ space : "screen" | "world"
12
+ }
13
+
14
+ type FxParticle = {
15
+ id : string!
16
+ type : string!
17
+ x : number!
18
+ z : number
19
+ y : number
20
+ message : string
21
+ ttl : number!
22
+ maxTtl : number
23
+ bornAt : number
24
+ space : string
25
+ effect : string
26
+ color : string
27
+ size : number
28
+ vx : number
29
+ vy : number
30
+ vz : number
31
+ particleCount : number
32
+ }
33
+
34
+ type StyleDef = {
35
+ color : string!
36
+ size : number!
37
+ ttl : number!
38
+ effect : string!
39
+ }
40
+
41
+ entity FxNarrativeData [runtime, shared] {
42
+ id : string!
43
+ seq : number = 0
44
+ lastText : string = ""
45
+ }
46
+
47
+ trait FxNarrative -> @rebindable FxNarrativeData [lifecycle] {
48
+ initial: active
49
+
50
+ state active {
51
+ INIT -> active
52
+ (set @entity.seq 0)
53
+ (set @entity.lastText "")
54
+
55
+ NARRATE -> active when @config.running
56
+ (let ((styleKey (if (== (object/get @payload style) null) "fact" (object/get @payload style)))
57
+ (styleDef (object/get @config.styles @styleKey))
58
+ (ttl (if (== (object/get @payload ttl) null) (object/get @styleDef ttl) (object/get @payload ttl)))
59
+ (x (if (== (object/get @payload x) null) 0.5 (object/get @payload x)))
60
+ (y (if (== (object/get @payload y) null) 0.25 (object/get @payload y)))
61
+ (space (if (== (object/get @payload space) null) "world" (object/get @payload space)))
62
+ (text (object/get @payload text)))
63
+ (do
64
+ (set @entity.seq (+ @entity.seq 1))
65
+ (set @entity.lastText @text)
66
+ (emit BURST { particles: [ {
67
+ id: (str/concat "narrative-" @entity.seq),
68
+ type: "narrative",
69
+ x: @x,
70
+ z: @y,
71
+ y: 0,
72
+ message: @text,
73
+ ttl: @ttl,
74
+ maxTtl: @ttl,
75
+ bornAt: (time/now),
76
+ space: @space,
77
+ effect: (object/get @styleDef effect),
78
+ color: (object/get @styleDef color),
79
+ size: (object/get @styleDef size),
80
+ vx: 0,
81
+ vy: 0,
82
+ vz: 0,
83
+ particleCount: 1
84
+ } ] })))
85
+
86
+ TUTORIAL_SHOW -> active when @config.running
87
+ (emit SHOW { id: "tutorial" })
88
+ }
89
+
90
+ emits {
91
+ BURST -> external {
92
+ particles : [FxParticle]
93
+ }
94
+ @description "Styled floating-text particle batch for std-fx-particles / fx-overlay."
95
+ @tier "domain"
96
+ SHOW -> external {
97
+ id : string
98
+ }
99
+ @description "Forwarded to a composed std-tutorial-overlay to open the tutorial modal."
100
+ @tier "domain"
101
+ }
102
+
103
+ listens {
104
+ NARRATE { text : string!, style : "hint" | "fact" | "warn" | "celebrate", x : number, y : number, ttl : number, space : "screen" | "world" }
105
+ TUTORIAL_SHOW { text : string, title : string }
106
+ }
107
+
108
+ config {
109
+ running : boolean = true
110
+ @label "Running"
111
+ @description "When false all narrative events are ignored."
112
+ @tier "domain"
113
+ styles : Map string StyleDef = {
114
+ "fact": { color: "#38bdf8", size: 0.7, ttl: 3, effect: "float-text" },
115
+ "hint": { color: "#a78bfa", size: 0.6, ttl: 2, effect: "float-text" },
116
+ "warn": { color: "#f87171", size: 0.6, ttl: 1.5, effect: "shake" },
117
+ "celebrate": { color: "#facc15", size: 0.9, ttl: 3, effect: "sparkle" }
118
+ }
119
+ @label "Styles"
120
+ @description "Map of narrative style to color, size, ttl, and effect. Override per game theme."
121
+ @tier "presentation"
122
+ }
123
+ }
124
+
125
+ page "/fx-narrative" as FxNarrativePage -> FxNarrative
126
+ }
@@ -0,0 +1,104 @@
1
+ app std-pickup "1.0.0"
2
+ "Headless side-view collectible authority — the platformer twin of grid std-gather. Listens BODY_MOVED and, when the player touches an uncollected feature (|dx| <= reachX, |dy| <= reachY of the feature center — the coef-pad touch idiom minus the grounded requirement, so airborne pickups work), stamps it collected on the shared entity and emits PICKED once per item (id, kind, position, glyph, message) plus COLLECT{total} with the running count (the event std-gate-lock already consumes). When every feature is collected it emits PICKUP_SET_COMPLETED once. RESTART re-arms every feature and zeroes the count. kind is board-defined vocabulary (star, boost, …) — this atom reports, boards judge. Renders nothing; boards draw the features and read collected from the shared entity."
3
+ orbital PickupOrbital {
4
+ type PickupFeature = {
5
+ id : string!
6
+ x : number!
7
+ y : number!
8
+ kind : string!
9
+ glyph : string
10
+ message : string
11
+ collected : boolean
12
+ }
13
+
14
+ entity PickupData [runtime, shared] {
15
+ id : string!
16
+ pickups : [PickupFeature] = []
17
+ pickupCompleted : boolean = false
18
+ total : number = 0
19
+ }
20
+
21
+ trait Pickup -> @rebindable PickupData [lifecycle] {
22
+ initial: active
23
+
24
+ state active {
25
+ INIT -> active
26
+ (set @entity.pickups (array/map @config.features (fn f (object/merge @f { collected: false }))))
27
+ (set @entity.pickupCompleted false)
28
+ (set @entity.total 0)
29
+
30
+ BODY_MOVED -> active when @config.running
31
+ (let ((touch (array/filter @entity.pickups (fn f
32
+ (and (== (object/get @f collected) false)
33
+ (and (<= (math/abs (- @payload.x (object/get @f x))) @config.reachX)
34
+ (<= (math/abs (- @payload.y (object/get @f y))) @config.reachY)))))))
35
+ (if (> (array/len @touch) 0)
36
+ (let ((f (array/first @touch)))
37
+ (let ((remaining (array/len (array/filter @entity.pickups (fn c (and (== (object/get @c collected) false) (!= (object/get @c id) (object/get @f id))))))))
38
+ (do
39
+ (set @entity.pickups (array/map @entity.pickups (fn c (if (== (object/get @c id) (object/get @f id)) (object/merge @c { collected: true }) @c))))
40
+ (set @entity.total (+ @entity.total 1))
41
+ (emit PICKED { id: (object/get @f id), kind: (object/get @f kind), x: (object/get @f x), y: (object/get @f y), glyph: (object/get @f glyph), message: (object/get @f message) })
42
+ (emit COLLECT { total: @entity.total })
43
+ (if (and (== @entity.pickupCompleted false) (== @remaining 0))
44
+ (do
45
+ (set @entity.pickupCompleted true)
46
+ (emit PICKUP_SET_COMPLETED {}))
47
+ null))))
48
+ null))
49
+
50
+ RESTART -> active
51
+ (set @entity.pickups (array/map @config.features (fn f (object/merge @f { collected: false }))))
52
+ (set @entity.pickupCompleted false)
53
+ (set @entity.total 0)
54
+ }
55
+
56
+ emits {
57
+ PICKED -> external {
58
+ id : string!
59
+ kind : string!
60
+ x : number!
61
+ y : number!
62
+ glyph : string
63
+ message : string
64
+ }
65
+ @description "The player touched an uncollected feature; carries the feature identity, board-defined kind (star, boost, …), position and display glyph/message. Fires once per feature per run."
66
+ @tier "domain"
67
+ COLLECT -> external {
68
+ total : number!
69
+ }
70
+ @description "Running count of collected features after this pickup — the event std-gate-lock consumes to count openings."
71
+ @tier "domain"
72
+ PICKUP_SET_COMPLETED -> external {
73
+ }
74
+ @description "Every feature in the set is collected; fires once per run."
75
+ @tier "domain"
76
+ }
77
+
78
+ listens {
79
+ BODY_MOVED { x : number!, y : number!, vx : number!, vy : number!, grounded : boolean!, skating : boolean!, speed : number! }
80
+ RESTART { id : string }
81
+ }
82
+
83
+ config {
84
+ running : boolean = true
85
+ @label "Running"
86
+ @description "When true, BODY_MOVED collects touched features; toggle to freeze the set as-is."
87
+ @tier "domain"
88
+ features : [PickupFeature] = []
89
+ @label "Features"
90
+ @description "One row per collectible: id, center (x, y in world units), board-defined kind (star, boost, …), display glyph and message floated on pickup. collected is stamped at runtime."
91
+ @tier "domain"
92
+ reachX : number = 0.7
93
+ @label "Reach X"
94
+ @description "Horizontal tolerance (world units) around a feature's center when testing player contact."
95
+ @tier "domain"
96
+ reachY : number = 1.2
97
+ @label "Reach Y"
98
+ @description "Vertical tolerance (world units) around a feature's center when testing player contact; generous values catch fly-through pickups."
99
+ @tier "domain"
100
+ }
101
+ }
102
+
103
+ page "/pickup" as PickupPage -> Pickup
104
+ }
@@ -39,6 +39,11 @@ orbital PlatformerBodyOrbital {
39
39
  h : number!
40
40
  k : number!
41
41
  }
42
+ type PlatformerTuning = {
43
+ jumpStrength : number
44
+ moveSpeed : number
45
+ gravity : number
46
+ }
42
47
 
43
48
  entity PlatformerBodyData [runtime, shared] {
44
49
  id : string!
@@ -48,6 +53,7 @@ orbital PlatformerBodyOrbital {
48
53
  curveMods : [CurveMod] = []
49
54
  goalId : string = ""
50
55
  skating : boolean = false
56
+ tuning : PlatformerTuning = {}
51
57
  }
52
58
 
53
59
  trait PlatformerBody -> @rebindable PlatformerBodyData [lifecycle] {
@@ -62,10 +68,10 @@ orbital PlatformerBodyOrbital {
62
68
  (set @entity.skating false)
63
69
 
64
70
  STEER -> active when @config.running
65
- (set @entity.body (object/merge @entity.body { vx: (* @payload.dir @config.moveSpeed), facingRight: (if (!= @payload.dir 0) (> @payload.dir 0) @entity.body.facingRight) }))
71
+ (set @entity.body (object/merge @entity.body { vx: (* @payload.dir (if (== (object/get @entity.tuning moveSpeed null) null) @config.moveSpeed (object/get @entity.tuning moveSpeed null))), facingRight: (if (!= @payload.dir 0) (> @payload.dir 0) @entity.body.facingRight) }))
66
72
 
67
73
  JUMP -> active when (and @config.running (== @entity.body.grounded true))
68
- (set @entity.body (object/merge @entity.body { vy: (if (> @config.gravity 0) (- 0 @config.jumpStrength) @config.jumpStrength), grounded: false }))
74
+ (set @entity.body (object/merge @entity.body { vy: (if (> (if (== (object/get @entity.tuning gravity null) null) @config.gravity (object/get @entity.tuning gravity null)) 0) (- 0 (if (== (object/get @entity.tuning jumpStrength null) null) @config.jumpStrength (object/get @entity.tuning jumpStrength null))) (if (== (object/get @entity.tuning jumpStrength null) null) @config.jumpStrength (object/get @entity.tuning jumpStrength null))), grounded: false }))
69
75
  (emit BODY_JUMPED { x: @entity.body.x, y: @entity.body.y })
70
76
 
71
77
  PLACE -> active
@@ -77,6 +83,11 @@ orbital PlatformerBodyOrbital {
77
83
  CURVE_MOD_ADD -> active when @config.curveModsEnabled
78
84
  (set @entity.curveMods (array/append @entity.curveMods { x0: @payload.x0, x1: @payload.x1, a: @payload.a, h: @payload.h, k: @payload.k }))
79
85
 
86
+ SET_TUNING -> active
87
+ (set @entity.tuning (object/merge @entity.tuning (if (== @payload.jumpStrength null) {} { jumpStrength: @payload.jumpStrength })))
88
+ (set @entity.tuning (object/merge @entity.tuning (if (== @payload.moveSpeed null) {} { moveSpeed: @payload.moveSpeed })))
89
+ (set @entity.tuning (object/merge @entity.tuning (if (== @payload.gravity null) {} { gravity: @payload.gravity })))
90
+
80
91
  RESTART -> active
81
92
  (set @entity.body @config.spawn)
82
93
  (set @entity.curveMods [])
@@ -84,16 +95,18 @@ orbital PlatformerBodyOrbital {
84
95
  (set @entity.hazardId "")
85
96
  (set @entity.goalId "")
86
97
  (set @entity.skating false)
98
+ (set @entity.tuning {})
87
99
  }
88
100
 
89
101
  ticks {
90
102
  physicsTick every 33ms
91
103
  when (and @config.running (> @entity.body.width 0))
92
- (let ((gdir (if (> @config.gravity 0) 1 -1)))
104
+ (let ((eg (if (== (object/get @entity.tuning gravity null) null) @config.gravity (object/get @entity.tuning gravity null))))
105
+ (let ((gdir (if (> @eg 0) 1 -1)))
93
106
  (let ((bcx (+ (object/get @entity.body x) (/ (object/get @entity.body width) 2))) (bcy (+ (object/get @entity.body y) (/ (object/get @entity.body height) 2))))
94
107
  (let ((drift (array/find @config.driftRegions (fn r (and (>= @bcx (object/get @r x0)) (and (<= @bcx (object/get @r x1)) (and (>= @bcy (object/get @r y0)) (<= @bcy (object/get @r y1)))))))))
95
108
  (let ((dax (if (== @drift null) 0 (object/get @drift ax))) (day (if (== @drift null) 0 (object/get @drift ay))))
96
- (let ((vy1 (math/clamp (+ @entity.body.vy (* (+ @config.gravity @day) 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed)))
109
+ (let ((vy1 (math/clamp (+ @entity.body.vy (* (+ @eg @day) 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed)))
97
110
  (let ((bw (object/get @entity.body width)) (bh (object/get @entity.body height)))
98
111
  (let ((nx (math/clamp (+ @entity.body.x (* @entity.body.vx 0.033)) @config.xMin @config.xMax)))
99
112
  (let ((ny (+ @entity.body.y (* @vy1 0.033))))
@@ -108,18 +121,24 @@ orbital PlatformerBodyOrbital {
108
121
  (let ((slope (if @inRange (/ (- (object/get @rightSamp y) (object/get @leftSamp y)) (- (object/get @rightSamp x) (object/get @leftSamp x))) 0)))
109
122
  (let ((curveY (if @inRange (+ (object/get @leftSamp y) (* @slope (- @cx (object/get @leftSamp x)))) 0)))
110
123
  (let ((gapBreak (and (> @config.skateMaxGap 0) (> (- (object/get @rightSamp x) (object/get @leftSamp x)) @config.skateMaxGap))))
111
- (let ((curveMod (if (and @config.curveModsEnabled @inRange) (array/find @entity.curveMods (fn m (and (>= @cx (object/get @m x0)) (<= @cx (object/get @m x1))))) null)))
112
- (let ((modX (if (== @curveMod null) @cx (- @cx (object/get @curveMod h)))))
113
- (let ((modInRange (and (!= @curveMod null) (and (>= @modX (object/get (array/first @config.skateCurve) x)) (< @modX (object/get (array/last @config.skateCurve) x))))))
114
- (let ((modLeft (if @modInRange (array/last (array/filter @config.skateCurve (fn s (<= (object/get @s x) @modX)))) @leftSamp)))
115
- (let ((modRight (if @modInRange (array/first (array/filter @config.skateCurve (fn s (> (object/get @s x) @modX)))) @rightSamp)))
116
- (let ((modSlope (if @modInRange (/ (- (object/get @modRight y) (object/get @modLeft y)) (- (object/get @modRight x) (object/get @modLeft x))) @slope)))
117
- (let ((modCurveY (if @modInRange (+ (object/get @modLeft y) (* @modSlope (- @modX (object/get @modLeft x)))) @curveY)))
118
- (let ((slope (if (== @curveMod null) @slope (* (object/get @curveMod a) @modSlope))))
119
- (let ((curveY (if (== @curveMod null) @curveY (+ (* (object/get @curveMod a) @modCurveY) (object/get @curveMod k)))))
124
+ (let ((mods (if (and @config.curveModsEnabled @inRange) (array/filter @entity.curveMods (fn m (and (>= @cx (object/get @m x0)) (<= @cx (object/get @m x1))))) [])))
125
+ (let ((modded (array/reduce @mods { y: @curveY, s: @slope } (fn (acc m)
126
+ (let ((modX (- @cx (object/get @m h))))
127
+ (let ((modInRange (and (>= @modX (object/get (array/first @config.skateCurve) x)) (< @modX (object/get (array/last @config.skateCurve) x)))))
128
+ (let ((modLeft (if @modInRange (array/last (array/filter @config.skateCurve (fn s (<= (object/get @s x) @modX)))) null)))
129
+ (let ((modRight (if @modInRange (array/first (array/filter @config.skateCurve (fn s (> (object/get @s x) @modX)))) null)))
130
+ (let ((modOK (and @modInRange (and (!= @modLeft null) (!= @modRight null)))))
131
+ (let ((modSlope (if @modOK (/ (- (object/get @modRight y) (object/get @modLeft y)) (- (object/get @modRight x) (object/get @modLeft x))) 0)))
132
+ (let ((modCurveY (if @modOK (+ (object/get @modLeft y) (* @modSlope (- @modX (object/get @modLeft x)))) 0)))
133
+ (if @modOK
134
+ { y: (+ (object/get @acc y) (- (+ (* (object/get @m a) @modCurveY) (object/get @m k)) @curveY)), s: (+ (object/get @acc s) (- (* (object/get @m a) @modSlope) @slope)) }
135
+ @acc))))))))))))
136
+ (let ((slope (object/get @modded s)))
137
+ (let ((curveY (object/get @modded y)))
138
+ (let ((aboveCurve (< (* (- @ny2 @curveY) @gdir) 0)))
120
139
  (let ((movingUp (< (* @vy1 @gdir) -0.01)))
121
- (let ((skateNow (and @inRange (and (not @gapBreak) (and (<= (math/abs (- @ny2 @curveY)) @config.skateSnap) (and (or @landed @entity.skating) (or @entity.body.grounded (not @movingUp))))))))
122
- (let ((vx2 (if @skateNow (math/clamp (+ @entity.body.vx (* (/ (* @config.gravity @slope) (+ 1 (* @slope @slope))) 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed) @entity.body.vx)))
140
+ (let ((skateNow (and @inRange (and (not @gapBreak) (and (<= (math/abs (- @ny2 @curveY)) @config.skateSnap) (and (or @landed (or @entity.skating (and (not @movingUp) @aboveCurve))) (or @entity.body.grounded (not @movingUp))))))))
141
+ (let ((vx2 (if @skateNow (math/clamp (+ @entity.body.vx (* (/ (* @eg @slope) (+ 1 (* @slope @slope))) 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed) @entity.body.vx)))
123
142
  (let ((vx3 (if (== @drift null) @vx2 (math/clamp (+ @vx2 (* @dax 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed))))
124
143
  (let ((fy (if @skateNow @curveY @ny2)) (fvy (if @skateNow (* (* @vx2 (math/cos (math/atan @slope))) (math/sin (math/atan @slope))) @vy2)) (fgrounded (or @landed @skateNow)))
125
144
  (let ((hazardHit (array/find @config.platforms (fn p (and (== (object/get @p type) "hazard") (geo/aabb-overlap @rect { x: @p.x, y: @p.y, w: @p.width, h: @p.height }))))))
@@ -156,7 +175,7 @@ orbital PlatformerBodyOrbital {
156
175
  (set @entity.fell true)
157
176
  (emit BODY_FELL { x: @nx, y: @fy }))
158
177
  null)
159
- (emit BODY_MOVED { x: @nx, y: @fy, vx: @entity.body.vx, vy: @fvy, grounded: @fgrounded, skating: @skateNow, speed: (math/hypot @entity.body.vx @fvy) }))))))))))))))))))))))))))))))))))))))
178
+ (emit BODY_MOVED { x: @nx, y: @fy, vx: @entity.body.vx, vy: @fvy, grounded: @fgrounded, skating: @skateNow, speed: (math/hypot @entity.body.vx @fvy) })))))))))))))))))))))))))))))))))))
160
179
  }
161
180
 
162
181
  emits {
@@ -176,7 +195,7 @@ orbital PlatformerBodyOrbital {
176
195
  y : number!
177
196
  slope : number!
178
197
  }
179
- @description "Body engaged curve skating this tick (grounded within skateSnap of the skateCurve surface); slope is the local dy/dx — boards layer fx and equation readouts"
198
+ @description "Body engaged curve skating this tick (grounded, landing, or falling within skateSnap above the skateCurve surface); slope is the local dy/dx — boards layer fx and equation readouts"
180
199
  @tier "domain"
181
200
  BODY_SKATE_END -> external {
182
201
  x : number!
@@ -224,6 +243,7 @@ orbital PlatformerBodyOrbital {
224
243
  JUMP { id : string }
225
244
  PLACE { x : number!, y : number! }
226
245
  CURVE_MOD_ADD { x0 : number!, x1 : number!, a : number!, h : number!, k : number! }
246
+ SET_TUNING { jumpStrength : number, moveSpeed : number, gravity : number }
227
247
  RESTART { id : string }
228
248
  }
229
249
 
@@ -246,7 +266,7 @@ orbital PlatformerBodyOrbital {
246
266
  @tier "domain"
247
267
  curveModsEnabled : boolean = false
248
268
  @label "Curve Mods Enabled"
249
- @description "When true, entity.curveMods reshape the skate surface inside each mod's x-range: the road samples the base curve at (x − h) and applies a·y + k (slope scales by a) — coefficient pads lift/tilt the segment the player is riding. Default off: boards without coef pads pay nothing."
269
+ @description "When true, entity.curveMods reshape the skate surface inside each mod's x-range: the road samples the base curve at (x − h) and applies a·y + k (slope scales by a) — coefficient pads lift/tilt the segment the player is riding. Multiple overlapping mods stack by summing each mod's delta from the base surface; a mod whose shifted sample leaves the curve range is skipped. Default off: boards without coef pads pay nothing."
250
270
  @tier "domain"
251
271
  jumpStrength : number = 11
252
272
  @label "Jump Strength"
@@ -274,7 +294,7 @@ orbital PlatformerBodyOrbital {
274
294
  @tier "domain"
275
295
  skate : boolean = false
276
296
  @label "Curve Skating"
277
- @description "When true, a grounded body within skateSnap of the skateCurve surface rides the curve: y snaps to the interpolated surface and tangential gravity (g·slope/(1+slope²)) accelerates vx, so the body slides downhill along the graph and launches off its ends; JUMP kicks free"
297
+ @description "When true, a grounded body within skateSnap of the skateCurve surface rides the curve: y snaps to the interpolated surface and tangential gravity (g·slope/(1+slope²)) accelerates vx, so the body slides downhill along the graph and launches off its ends; JUMP kicks free. Engages when grounded, when landing on a tile, or when a falling (not rising) body passes within skateSnap above the surface."
278
298
  @tier "domain"
279
299
  skateCurve : [PlatformerCurveSample] = []
280
300
  @label "Skate Curve"
@@ -65,15 +65,15 @@ orbital ControlButtonOrbital {
65
65
  @label "Icon"
66
66
  @description "Icon component or emoji"
67
67
  @tier "presentation"
68
- size : "sm" | "md" | "lg" | "xl" = md
68
+ size : string = md
69
69
  @label "Size"
70
70
  @description "Size variant"
71
71
  @tier "presentation"
72
- shape : "circle" | "rounded" | "square" = circle
72
+ shape : string = circle
73
73
  @label "Shape"
74
74
  @description "Shape variant"
75
75
  @tier "presentation"
76
- variant : "primary" | "secondary" | "ghost" = secondary
76
+ variant : string = secondary
77
77
  @label "Variant"
78
78
  @description "Visual variant"
79
79
  @tier "presentation"
@@ -6,7 +6,7 @@ orbital ControlGridOrbital {
6
6
  label : string
7
7
  icon : icon
8
8
  assetUrl : ControlGridButtonsItemAssetUrl
9
- variant : "primary" | "secondary" | "ghost"
9
+ variant : string
10
10
  }
11
11
  type ControlGridButtonsItemAssetUrl = {
12
12
  url : asset!
@@ -58,7 +58,7 @@ orbital GameHudOrbital {
58
58
  }
59
59
 
60
60
  config {
61
- position : "top" | "bottom" | "corners" = top
61
+ position : string
62
62
  @label "Position"
63
63
  @description "Position of the HUD"
64
64
  @tier "presentation"
@@ -6,7 +6,7 @@ orbital GameMenuOrbital {
6
6
  label : string!
7
7
  event : event
8
8
  navigatesTo : string
9
- variant : "primary" | "secondary" | "ghost"
9
+ variant : string
10
10
  disabled : boolean
11
11
  subLabel : string
12
12
  }
@@ -15,7 +15,7 @@ orbital GameMenuOrbital {
15
15
  label : string!
16
16
  event : event
17
17
  navigatesTo : string
18
- variant : "primary" | "secondary" | "ghost"
18
+ variant : string
19
19
  disabled : boolean
20
20
  subLabel : string
21
21
  }
@@ -38,7 +38,7 @@ orbital GameMenuOrbital {
38
38
  label : string!
39
39
  event : string
40
40
  navigatesTo : string
41
- variant : "primary" | "secondary" | "ghost"
41
+ variant : string
42
42
  disabled : boolean
43
43
  subLabel : string
44
44
  }
@@ -85,7 +85,7 @@ orbital StatBadgeOrbital {
85
85
  @label "Field"
86
86
  @description "Field name in the source (for schema config)"
87
87
  @tier "presentation"
88
- format : "number" | "hearts" | "bar" | "text" = number
88
+ format : string = number
89
89
  @label "Format"
90
90
  @description "Display format"
91
91
  @tier "presentation"
@@ -93,11 +93,11 @@ orbital StatBadgeOrbital {
93
93
  @label "Icon"
94
94
  @description "Icon component or emoji"
95
95
  @tier "presentation"
96
- size : "sm" | "md" | "lg" = md
96
+ size : string = md
97
97
  @label "Size"
98
98
  @description "Size variant"
99
99
  @tier "presentation"
100
- variant : "default" | "primary" | "success" | "warning" | "danger" = default
100
+ variant : string = default
101
101
  @label "Variant"
102
102
  @description "Visual variant"
103
103
  @tier "presentation"