@almadar/std 16.235.0 → 16.237.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 (283) hide show
  1. package/behaviors/behaviors-registry.json +5621 -1993
  2. package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +32 -41
  3. package/behaviors/lolo/infra/atoms/std-audit-capture.lolo +0 -5
  4. package/behaviors/lolo/infra/atoms/std-cache-aside.lolo +0 -24
  5. package/behaviors/lolo/infra/atoms/std-circuit-breaker.lolo +1 -17
  6. package/behaviors/lolo/infra/atoms/std-data-erasure.lolo +17 -24
  7. package/behaviors/lolo/infra/atoms/std-data-import.lolo +8 -11
  8. package/behaviors/lolo/infra/atoms/std-game-clock.lolo +2 -0
  9. package/behaviors/lolo/infra/atoms/std-knowledge-loop.lolo +0 -5
  10. package/behaviors/lolo/infra/atoms/std-lifecycle.lolo +3 -1
  11. package/behaviors/lolo/infra/atoms/std-migration-job.lolo +2 -2
  12. package/behaviors/lolo/infra/atoms/std-mod-queue.lolo +40 -18
  13. package/behaviors/lolo/infra/atoms/std-notification-preferences.lolo +25 -11
  14. package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +0 -5
  15. package/behaviors/lolo/infra/atoms/std-permission-matrix.lolo +28 -11
  16. package/behaviors/lolo/infra/atoms/std-rate-limiter.lolo +84 -22
  17. package/behaviors/lolo/infra/atoms/std-status-lifecycle.lolo +1 -6
  18. package/behaviors/lolo/ml/atoms/std-graph-builder.lolo +3 -1
  19. package/behaviors/lolo/ml/atoms/std-ml-classify.lolo +0 -4
  20. package/behaviors/lolo/ml/atoms/std-ml-similarity.lolo +0 -4
  21. package/behaviors/lolo/ui/avl/atoms/ui-avl-state-machine.lolo +12 -0
  22. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +55 -9
  23. package/behaviors/lolo/ui/core/atoms/std-app-search.lolo +6 -2
  24. package/behaviors/lolo/ui/core/atoms/std-billable-hour.lolo +19 -14
  25. package/behaviors/lolo/ui/core/atoms/std-board.lolo +77 -27
  26. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +76 -33
  27. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +7 -3
  28. package/behaviors/lolo/ui/core/atoms/std-esign-flow.lolo +25 -13
  29. package/behaviors/lolo/ui/core/atoms/std-esign-request.lolo +5 -0
  30. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +32 -5
  31. package/behaviors/lolo/ui/core/atoms/std-export.lolo +0 -10
  32. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +15 -4
  33. package/behaviors/lolo/ui/core/atoms/std-form-advanced.lolo +1 -6
  34. package/behaviors/lolo/ui/core/atoms/std-gantt-schedule.lolo +8 -1
  35. package/behaviors/lolo/ui/core/atoms/std-geosearch.lolo +1 -0
  36. package/behaviors/lolo/ui/core/atoms/std-graphs.lolo +20 -4
  37. package/behaviors/lolo/ui/core/atoms/std-image-upload-multi.lolo +2 -2
  38. package/behaviors/lolo/ui/core/atoms/std-import.lolo +0 -5
  39. package/behaviors/lolo/ui/core/atoms/std-list.lolo +53 -32
  40. package/behaviors/lolo/ui/core/atoms/std-modal-editor.lolo +2 -2
  41. package/behaviors/lolo/ui/core/atoms/std-multi-party-flow.lolo +24 -0
  42. package/behaviors/lolo/ui/core/atoms/std-rating-review.lolo +12 -13
  43. package/behaviors/lolo/ui/core/atoms/std-record-detail.lolo +29 -13
  44. package/behaviors/lolo/ui/core/atoms/std-recurrence.lolo +14 -1
  45. package/behaviors/lolo/ui/core/atoms/std-role-gate.lolo +39 -0
  46. package/behaviors/lolo/ui/core/atoms/std-saved-search.lolo +84 -16
  47. package/behaviors/lolo/ui/core/atoms/std-selection.lolo +22 -10
  48. package/behaviors/lolo/ui/core/atoms/std-stats.lolo +5 -5
  49. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +3 -0
  50. package/behaviors/lolo/ui/core/atoms/std-thread.lolo +41 -73
  51. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +27 -12
  52. package/behaviors/lolo/ui/core/atoms/std-vote.lolo +0 -4
  53. package/behaviors/lolo/ui/core/atoms/std-wizard.lolo +3 -3
  54. package/behaviors/lolo/ui/core/atoms/ui-presence.lolo +21 -0
  55. package/behaviors/lolo/ui/core/atoms/ui-time-slot-cell.lolo +36 -0
  56. package/behaviors/lolo/ui/core/atoms/ui-typography.lolo +5 -0
  57. package/behaviors/lolo/ui/core/molecules/ui-alert.lolo +5 -0
  58. package/behaviors/lolo/ui/core/molecules/ui-animated-counter.lolo +1 -1
  59. package/behaviors/lolo/ui/core/molecules/ui-breadcrumb.lolo +6 -1
  60. package/behaviors/lolo/ui/core/molecules/ui-chart.lolo +11 -1
  61. package/behaviors/lolo/ui/core/molecules/ui-code-block.lolo +13 -8
  62. package/behaviors/lolo/ui/core/molecules/ui-command-palette.lolo +11 -6
  63. package/behaviors/lolo/ui/core/molecules/ui-commit-row.lolo +2 -2
  64. package/behaviors/lolo/ui/core/molecules/ui-confirm-dialog.lolo +8 -0
  65. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +60 -5
  66. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +47 -3
  67. package/behaviors/lolo/ui/core/molecules/ui-date-range-picker.lolo +3 -3
  68. package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +31 -9
  69. package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +8 -3
  70. package/behaviors/lolo/ui/core/molecules/ui-document-viewer.lolo +6 -1
  71. package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +13 -0
  72. package/behaviors/lolo/ui/core/molecules/ui-emoji-picker.lolo +1 -1
  73. package/behaviors/lolo/ui/core/molecules/ui-feature-card.lolo +1 -1
  74. package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +6 -1
  75. package/behaviors/lolo/ui/core/molecules/ui-floating-toolbar.lolo +6 -1
  76. package/behaviors/lolo/ui/core/molecules/ui-form-actions.lolo +6 -1
  77. package/behaviors/lolo/ui/core/molecules/ui-gantt.lolo +9 -1
  78. package/behaviors/lolo/ui/core/molecules/ui-graph-canvas.lolo +6 -1
  79. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +3 -2
  80. package/behaviors/lolo/ui/core/molecules/ui-likert-scale.lolo +1 -1
  81. package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +7 -1
  82. package/behaviors/lolo/ui/core/molecules/ui-meter.lolo +6 -1
  83. package/behaviors/lolo/ui/core/molecules/ui-modal.lolo +5 -0
  84. package/behaviors/lolo/ui/core/molecules/ui-page-header.lolo +11 -1
  85. package/behaviors/lolo/ui/core/molecules/ui-page-transition.lolo +1 -1
  86. package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +44 -15
  87. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +57 -5
  88. package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +8 -2
  89. package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +87 -16
  90. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +37 -10
  91. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +46 -8
  92. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +36 -10
  93. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +57 -10
  94. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +57 -10
  95. package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +22 -3
  96. package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +6 -0
  97. package/behaviors/lolo/ui/core/organisms/ui-state-machine-view.lolo +12 -0
  98. package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +38 -5
  99. package/behaviors/lolo/ui/core/templates/ui-auth-layout.lolo +1 -1
  100. package/behaviors/lolo/ui/core/templates/ui-counter-template.lolo +3 -45
  101. package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +7 -2
  102. package/behaviors/lolo/ui/core/templates/ui-generic-app-template.lolo +2 -37
  103. package/behaviors/lolo/ui/game/.hand-authored.json +2 -2
  104. package/behaviors/lolo/ui/game/atoms/ui-choice-button.lolo +1 -1
  105. package/behaviors/lolo/ui/game/atoms/ui-dialogue-bubble.lolo +2 -2
  106. package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +9 -3
  107. package/behaviors/lolo/ui/game/atoms/ui-score-display.lolo +1 -1
  108. package/behaviors/lolo/ui/game/organisms/std-arcade-board-3d.lolo +2 -2
  109. package/behaviors/lolo/ui/game/organisms/std-crew-board-2d.lolo +0 -4
  110. package/behaviors/lolo/ui/game/organisms/std-platformer-puzzle.lolo +2 -66
  111. package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +0 -4
  112. package/behaviors/lolo/ui/game/organisms/std-worldmap-board-2d.lolo +0 -4
  113. package/behaviors/lolo/ui/learning/atoms/std-learn-stepper.lolo +6 -6
  114. package/behaviors/lolo-behavior-contracts.json +1 -1
  115. package/behaviors/registry/factory-signatures.json +1 -1
  116. package/behaviors/registry/infra/atoms/std-approval-gate.orb +194 -67
  117. package/behaviors/registry/infra/atoms/std-audit-capture.orb +0 -8
  118. package/behaviors/registry/infra/atoms/std-cache-aside.orb +0 -84
  119. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +1 -44
  120. package/behaviors/registry/infra/atoms/std-data-erasure.orb +124 -55
  121. package/behaviors/registry/infra/atoms/std-data-import.orb +12 -11
  122. package/behaviors/registry/infra/atoms/std-game-clock.orb +31 -0
  123. package/behaviors/registry/infra/atoms/std-knowledge-loop.orb +0 -57
  124. package/behaviors/registry/infra/atoms/std-lifecycle.orb +43 -0
  125. package/behaviors/registry/infra/atoms/std-migration-job.orb +26 -1
  126. package/behaviors/registry/infra/atoms/std-mod-queue.orb +379 -103
  127. package/behaviors/registry/infra/atoms/std-notification-preferences.orb +135 -12
  128. package/behaviors/registry/infra/atoms/std-notify-on-event.orb +0 -11
  129. package/behaviors/registry/infra/atoms/std-permission-matrix.orb +137 -12
  130. package/behaviors/registry/infra/atoms/std-rate-limiter.orb +287 -72
  131. package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +5 -8
  132. package/behaviors/registry/ml/atoms/std-graph-builder.orb +11 -0
  133. package/behaviors/registry/ml/atoms/std-ml-classify.orb +0 -7
  134. package/behaviors/registry/ml/atoms/std-ml-similarity.orb +0 -7
  135. package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +82 -0
  136. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +417 -9
  137. package/behaviors/registry/ui/core/atoms/std-app-search.orb +53 -1
  138. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +209 -19
  139. package/behaviors/registry/ui/core/atoms/std-board.orb +242 -61
  140. package/behaviors/registry/ui/core/atoms/std-browse.orb +499 -49
  141. package/behaviors/registry/ui/core/atoms/std-calendar.orb +96 -2
  142. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +122 -15
  143. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +11 -0
  144. package/behaviors/registry/ui/core/atoms/std-event-log.orb +42 -6
  145. package/behaviors/registry/ui/core/atoms/std-export.orb +0 -16
  146. package/behaviors/registry/ui/core/atoms/std-file-store.orb +121 -3
  147. package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +1 -43
  148. package/behaviors/registry/ui/core/atoms/std-gantt-schedule.orb +25 -1
  149. package/behaviors/registry/ui/core/atoms/std-geosearch.orb +5 -0
  150. package/behaviors/registry/ui/core/atoms/std-graphs.orb +173 -66
  151. package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +4 -0
  152. package/behaviors/registry/ui/core/atoms/std-import.orb +0 -8
  153. package/behaviors/registry/ui/core/atoms/std-list.orb +237 -34
  154. package/behaviors/registry/ui/core/atoms/std-modal-editor.orb +10 -1
  155. package/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +24 -0
  156. package/behaviors/registry/ui/core/atoms/std-rating-review.orb +37 -19
  157. package/behaviors/registry/ui/core/atoms/std-record-detail.orb +275 -14
  158. package/behaviors/registry/ui/core/atoms/std-recurrence.orb +93 -4
  159. package/behaviors/registry/ui/core/atoms/std-role-gate.orb +217 -0
  160. package/behaviors/registry/ui/core/atoms/std-saved-search.orb +473 -19
  161. package/behaviors/registry/ui/core/atoms/std-selection.orb +179 -10
  162. package/behaviors/registry/ui/core/atoms/std-stats.orb +73 -1
  163. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +3 -0
  164. package/behaviors/registry/ui/core/atoms/std-thread.orb +190 -115
  165. package/behaviors/registry/ui/core/atoms/std-version-history.orb +138 -14
  166. package/behaviors/registry/ui/core/atoms/std-vote.orb +0 -9
  167. package/behaviors/registry/ui/core/atoms/std-wizard.orb +33 -3
  168. package/behaviors/registry/ui/core/atoms/ui-presence.orb +59 -0
  169. package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +132 -0
  170. package/behaviors/registry/ui/core/atoms/ui-typography.orb +7 -0
  171. package/behaviors/registry/ui/core/molecules/ui-alert.orb +7 -0
  172. package/behaviors/registry/ui/core/molecules/ui-animated-counter.orb +1 -1
  173. package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +53 -1
  174. package/behaviors/registry/ui/core/molecules/ui-chart.orb +68 -1
  175. package/behaviors/registry/ui/core/molecules/ui-code-block.orb +291 -8
  176. package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +89 -6
  177. package/behaviors/registry/ui/core/molecules/ui-commit-row.orb +3 -2
  178. package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +32 -0
  179. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +297 -5
  180. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +261 -3
  181. package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +1 -3
  182. package/behaviors/registry/ui/core/molecules/ui-document-details.orb +93 -24
  183. package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +121 -3
  184. package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +53 -1
  185. package/behaviors/registry/ui/core/molecules/ui-drawer.orb +40 -0
  186. package/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +0 -1
  187. package/behaviors/registry/ui/core/molecules/ui-feature-card.orb +0 -1
  188. package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +53 -1
  189. package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +53 -1
  190. package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +53 -1
  191. package/behaviors/registry/ui/core/molecules/ui-gantt.orb +28 -1
  192. package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +53 -1
  193. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +9 -2
  194. package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +1 -1
  195. package/behaviors/registry/ui/core/molecules/ui-menu.orb +74 -1
  196. package/behaviors/registry/ui/core/molecules/ui-meter.orb +53 -1
  197. package/behaviors/registry/ui/core/molecules/ui-modal.orb +8 -0
  198. package/behaviors/registry/ui/core/molecules/ui-page-header.orb +60 -1
  199. package/behaviors/registry/ui/core/molecules/ui-page-transition.orb +1 -1
  200. package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +393 -23
  201. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +337 -5
  202. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +99 -2
  203. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +415 -33
  204. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +340 -29
  205. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +296 -20
  206. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +489 -9
  207. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +132 -13
  208. package/behaviors/registry/ui/core/organisms/ui-form.orb +132 -13
  209. package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +141 -3
  210. package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +58 -0
  211. package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +82 -0
  212. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +159 -8
  213. package/behaviors/registry/ui/core/templates/ui-auth-layout.orb +0 -1
  214. package/behaviors/registry/ui/core/templates/ui-counter-template.orb +1 -173
  215. package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +53 -2
  216. package/behaviors/registry/ui/core/templates/ui-generic-app-template.orb +1 -116
  217. package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +1 -1
  218. package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +1 -2
  219. package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +100 -3
  220. package/behaviors/registry/ui/game/atoms/ui-score-display.orb +0 -1
  221. package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +10 -0
  222. package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +0 -7
  223. package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +1 -807
  224. package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +0 -7
  225. package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +0 -7
  226. package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +6 -0
  227. package/canonical-operators.json +18 -1
  228. package/dist/behaviors/exports-reader.js +8942 -3946
  229. package/dist/behaviors/functions/index.d.ts +419 -132
  230. package/dist/behaviors/functions/index.js +8931 -3946
  231. package/dist/behaviors/index.d.ts +1 -1
  232. package/dist/behaviors/index.js +8943 -3947
  233. package/dist/behaviors/query.js +8942 -3946
  234. package/dist/behaviors-embeddings.hash.json +3 -3
  235. package/dist/behaviors-embeddings.json +49 -41
  236. package/dist/behaviors-registry.json +5621 -1993
  237. package/dist/index.d.ts +3 -3
  238. package/dist/index.js +8960 -3947
  239. package/dist/knob-embeddings.hash.json +3 -3
  240. package/dist/knob-embeddings.json +774 -374
  241. package/dist/modules/anim.d.ts +1 -1
  242. package/dist/modules/array.d.ts +1 -1
  243. package/dist/modules/array.js +15 -0
  244. package/dist/modules/async.d.ts +1 -1
  245. package/dist/modules/behavior.d.ts +1 -1
  246. package/dist/modules/browser.d.ts +1 -1
  247. package/dist/modules/composition.d.ts +1 -1
  248. package/dist/modules/contract.d.ts +1 -1
  249. package/dist/modules/core.d.ts +1 -1
  250. package/dist/modules/core.js +2 -0
  251. package/dist/modules/data.d.ts +1 -1
  252. package/dist/modules/ease.d.ts +1 -1
  253. package/dist/modules/format.d.ts +1 -1
  254. package/dist/modules/geo.d.ts +1 -1
  255. package/dist/modules/graph.d.ts +1 -1
  256. package/dist/modules/grid.d.ts +1 -1
  257. package/dist/modules/index.d.ts +1 -1
  258. package/dist/modules/index.js +17 -0
  259. package/dist/modules/integration.d.ts +1 -1
  260. package/dist/modules/json.d.ts +1 -1
  261. package/dist/modules/llm.d.ts +1 -1
  262. package/dist/modules/math.d.ts +1 -1
  263. package/dist/modules/memory.d.ts +1 -1
  264. package/dist/modules/nn.d.ts +1 -1
  265. package/dist/modules/noise.d.ts +1 -1
  266. package/dist/modules/object.d.ts +1 -1
  267. package/dist/modules/os.d.ts +1 -1
  268. package/dist/modules/path.d.ts +1 -1
  269. package/dist/modules/prob.d.ts +1 -1
  270. package/dist/modules/session.d.ts +1 -1
  271. package/dist/modules/str.d.ts +1 -1
  272. package/dist/modules/tensor.d.ts +1 -1
  273. package/dist/modules/time.d.ts +1 -1
  274. package/dist/modules/trace.d.ts +1 -1
  275. package/dist/modules/train.d.ts +1 -1
  276. package/dist/modules/validate.d.ts +1 -1
  277. package/dist/modules/vector.d.ts +1 -1
  278. package/dist/modules/workspace.d.ts +1 -1
  279. package/dist/registry/factory-signatures.json +1 -1
  280. package/dist/registry.d.ts +2 -2
  281. package/dist/registry.js +17 -0
  282. package/dist/{types-Ggla7OK7.d.ts → types-DLx38UFZ.d.ts} +23 -3
  283. package/package.json +3 -3
@@ -1,5 +1,6 @@
1
1
  app std-version-history "1.0.0"
2
2
  "std-version-history — wiki/CMS revision history with diff + rollback. Browses revisions; opens detail in `viewing_single`; compares the opened revision with the newest in `comparing`; Rollback emits RevisionRolledBack { row } for the consumer to restore onto its source document. `RevisionManage` is a rebindable single-entity trait: a consumer rebinds it to its own entity via `linkedEntity`. `config.scopeField` names the Revision field holding the parent document id; a page-mounted `{id}` route param scopes INIT's own fetch, and a consumer forwards SHOW_HISTORY { key } (via a `listens` override) to rescope the feed to one document — empty scopeField (default) or no id keeps today's unfiltered global feed. Rollback and retry refetches stay scoped."
3
+ type ItemAction = { label : string!, event : event, variant : string, icon : string, roles : [string], when : SExpr }
3
4
  orbital RevisionOrbital {
4
5
  type RevisionLoaded = Event { data : [Revision] } "Fired when the revision collection finishes loading"
5
6
 
@@ -72,24 +73,16 @@ orbital RevisionOrbital {
72
73
  }, {
73
74
  label: Summary
74
75
  name: summary
75
- variant: caption
76
+ variant: h4
76
77
  }, {
77
78
  label: Saved
79
+ format: date
78
80
  name: createdAt
79
81
  variant: caption
80
82
  }]
81
83
  gap: sm
82
- itemActions: [{
83
- event: OPEN_REVISION
84
- icon: arrow-right
85
- label: Open
86
- variant: ghost
87
- }, {
88
- event: ROLLBACK
89
- icon: rotate-ccw
90
- label: Rollback
91
- variant: danger
92
- }]
84
+ itemClickEvent: @config.itemClickEvent
85
+ itemActions: (array/filter @config.itemActions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
93
86
  look: @config.tableLook
94
87
  type: data-grid
95
88
  }]
@@ -600,6 +593,28 @@ orbital RevisionOrbital {
600
593
  @label "Scope field"
601
594
  @description "Revision entity field holding the parent document's id. When set, a page-mounted {id} route param scopes INIT's fetch, and a SHOW_HISTORY { key } event rescopes the feed, to rows whose scopeField equals the id/key; rollback and retry refetches stay scoped too. Empty (default) or no id = unfiltered global feed, unchanged from prior behavior."
602
595
  @tier "domain"
596
+ itemClickEvent : event = OPEN_REVISION
597
+ @label "Row click"
598
+ @description "Event emitted when a row is clicked; opens the revision. Empty disables the row click."
599
+ @tier "presentation"
600
+ itemActions : [ItemAction] = [{
601
+ event: OPEN_REVISION
602
+ icon: arrow-right
603
+ label: Open
604
+ variant: ghost
605
+ }, {
606
+ event: ROLLBACK
607
+ icon: rotate-ccw
608
+ label: Rollback
609
+ variant: danger
610
+ }]
611
+ @label "Row actions"
612
+ @description "Actions offered on each row; give an item `roles` to show it only to those viewer roles."
613
+ @tier "presentation"
614
+ viewerRole : string = ""
615
+ @label "Viewer's role"
616
+ @description "The signed-in viewer's role that each action's `roles` is checked against. Bind it explicitly at the call site (e.g. `viewerRole: @user.role`) in an app whose identity carries a role; left empty, only actions with no `roles` show."
617
+ @tier "policy"
603
618
  }
604
619
  }
605
620
 
@@ -235,10 +235,6 @@ orbital VoteOrbital {
235
235
  }
236
236
 
237
237
  config {
238
- allowDown : boolean = true
239
- @label "Allow downvotes"
240
- @description "Show the downvote arrow alongside the upvote"
241
- @tier "domain"
242
238
  }
243
239
  }
244
240
 
@@ -109,7 +109,7 @@ orbital WizardOrbital {
109
109
  }, { type: divider }, {
110
110
  cancelEvent: CANCEL
111
111
  entity: @entity
112
- fields: @entity.currentFields
112
+ fields: (array/map @entity.currentFields (fn f { name: @f }))
113
113
  mode: edit
114
114
  showCancel: false
115
115
  showSubmit: false
@@ -232,7 +232,7 @@ orbital WizardOrbital {
232
232
  }, { type: divider }, {
233
233
  cancelEvent: CANCEL
234
234
  entity: @entity
235
- fields: @entity.currentFields
235
+ fields: (array/map @entity.currentFields (fn f { name: @f }))
236
236
  mode: edit
237
237
  showCancel: false
238
238
  showSubmit: false
@@ -368,7 +368,7 @@ orbital WizardOrbital {
368
368
  }, { type: divider }, {
369
369
  cancelEvent: CANCEL
370
370
  entity: @entity
371
- fields: @entity.currentFields
371
+ fields: (array/map @entity.currentFields (fn f { name: @f }))
372
372
  mode: edit
373
373
  showCancel: false
374
374
  showSubmit: false
@@ -12,6 +12,9 @@ orbital PresenceOrbital {
12
12
  state idle {
13
13
  INIT -> idle
14
14
  (render-ui main {
15
+ animation: @config.animation
16
+ animate: @config.animate
17
+ onExited: @config.onExited
15
18
  show: @config.show
16
19
  className: @config.className
17
20
  children: @config.children
@@ -19,7 +22,25 @@ orbital PresenceOrbital {
19
22
  })
20
23
  }
21
24
 
25
+ emits {
26
+ @config.onExited -> external { }
27
+ @description "Fired after the exit animation completes (before unmount)."
28
+ @tier "essential"
29
+ }
30
+
22
31
  config {
32
+ animation : "modal" | "overlay" | "slide-up" | "drawer" | "popover" | "toast" | "fade" | "page" = modal
33
+ @label "Animation"
34
+ @description "Which motion preset to use (maps to `animate-<name>-in/out`)."
35
+ @tier "presentation"
36
+ animate : boolean
37
+ @label "Animate"
38
+ @description "Per-instance opt-out. Global opt-out is `--motion-enable` / reduced-motion. @default true"
39
+ @tier "presentation"
40
+ onExited : event = "EXITED"
41
+ @label "On Exited"
42
+ @description "Fired after the exit animation completes (before unmount)."
43
+ @tier "presentation"
23
44
  show : boolean = false
24
45
  @label "Show"
25
46
  @description "When false, the exit animation runs, then children unmount."
@@ -19,6 +19,10 @@ orbital TimeSlotCellOrbital {
19
19
  className: @config.className
20
20
  children: @config.children
21
21
  isOccupied: @config.isOccupied
22
+ onPointerDown: @config.onPointerDown
23
+ onPointerUp: @config.onPointerUp
24
+ onPointerCancel: @config.onPointerCancel
25
+ onPointerLeave: @config.onPointerLeave
22
26
  type: time-slot-cell
23
27
  })
24
28
  CLICK -> idle
@@ -29,6 +33,10 @@ orbital TimeSlotCellOrbital {
29
33
  className: @config.className
30
34
  children: @config.children
31
35
  isOccupied: @config.isOccupied
36
+ onPointerDown: @config.onPointerDown
37
+ onPointerUp: @config.onPointerUp
38
+ onPointerCancel: @config.onPointerCancel
39
+ onPointerLeave: @config.onPointerLeave
32
40
  type: time-slot-cell
33
41
  })
34
42
  }
@@ -39,6 +47,18 @@ orbital TimeSlotCellOrbital {
39
47
  }
40
48
  @description "Called when the slot is clicked"
41
49
  @tier "essential"
50
+ @config.onPointerDown -> external { }
51
+ @description "onPointerDown prop"
52
+ @tier "essential"
53
+ @config.onPointerUp -> external { }
54
+ @description "onPointerUp prop"
55
+ @tier "essential"
56
+ @config.onPointerCancel -> external { }
57
+ @description "onPointerCancel prop"
58
+ @tier "essential"
59
+ @config.onPointerLeave -> external { }
60
+ @description "onPointerLeave prop"
61
+ @tier "essential"
42
62
  }
43
63
 
44
64
  listens {
@@ -68,6 +88,22 @@ orbital TimeSlotCellOrbital {
68
88
  @label "Is Occupied"
69
89
  @description "Whether this slot contains an event"
70
90
  @tier "presentation"
91
+ onPointerDown : event = "POINTER_DOWN"
92
+ @label "On Pointer Down"
93
+ @description "onPointerDown prop"
94
+ @tier "presentation"
95
+ onPointerUp : event = "POINTER_UP"
96
+ @label "On Pointer Up"
97
+ @description "onPointerUp prop"
98
+ @tier "presentation"
99
+ onPointerCancel : event = "POINTER_CANCEL"
100
+ @label "On Pointer Cancel"
101
+ @description "onPointerCancel prop"
102
+ @tier "presentation"
103
+ onPointerLeave : event = "POINTER_LEAVE"
104
+ @label "On Pointer Leave"
105
+ @description "onPointerLeave prop"
106
+ @tier "presentation"
71
107
  }
72
108
  }
73
109
 
@@ -22,6 +22,7 @@ orbital TypographyOrbital {
22
22
  overflow: @config.overflow
23
23
  className: @config.className
24
24
  style: @config.style
25
+ role: @config.role
25
26
  format: @config.format
26
27
  content: @config.content
27
28
  children: @config.children
@@ -70,6 +71,10 @@ orbital TypographyOrbital {
70
71
  @label "Style"
71
72
  @description "Inline style"
72
73
  @tier "presentation"
74
+ role : string
75
+ @label "Role"
76
+ @description "Accessibility role"
77
+ @tier "presentation"
73
78
  format : "none" | "date" | "time" | "datetime" | "number" | "currency" | "percent" = none
74
79
  @label "Format"
75
80
  @description "Value formatting applied to string/number/Date content — `none` (the default) renders content as-is. Covers the raw-ISO-date class: a bound datetime renders human-readable via `format='date'|'time'|'datetime'`."
@@ -20,6 +20,7 @@ orbital AlertOrbital {
20
20
  onDismiss: @config.onDismiss
21
21
  onClose: @config.onClose
22
22
  actions: @config.actions
23
+ icon: @config.icon
23
24
  className: @config.className
24
25
  dismissEvent: @config.dismissEvent
25
26
  type: alert
@@ -68,6 +69,10 @@ orbital AlertOrbital {
68
69
  @label "Actions"
69
70
  @description "actions prop"
70
71
  @tier "presentation"
72
+ icon : icon
73
+ @label "Icon"
74
+ @description "Icon shown instead of the variant's default (Lucide name or component)"
75
+ @tier "presentation"
71
76
  className : string
72
77
  @label "Class Name"
73
78
  @description "className prop"
@@ -46,7 +46,7 @@ orbital AnimatedCounterOrbital {
46
46
  @tier "presentation"
47
47
  format : string
48
48
  @label "Format"
49
- @description "'number' (locale grouping), 'currency' ($x.xx), 'percent' (rounded %). Unset keeps the value's own decimals."
49
+ @description "'number' (locale grouping), 'currency' (locale currency), 'percent' (rounded %). Unset keeps the value's own decimals."
50
50
  @tier "presentation"
51
51
  className : string
52
52
  @label "Class Name"
@@ -9,6 +9,7 @@ orbital BreadcrumbOrbital {
9
9
  icon : icon
10
10
  isCurrent : boolean
11
11
  event : event
12
+ roles : [string]
12
13
  }
13
14
 
14
15
  entity BreadcrumbItem [runtime] {
@@ -21,7 +22,7 @@ orbital BreadcrumbOrbital {
21
22
  state idle {
22
23
  INIT -> idle
23
24
  (render-ui main {
24
- items: @config.items
25
+ items: (array/filter @config.items (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
25
26
  fromNavStack: @config.fromNavStack
26
27
  itemEvent: @config.itemEvent
27
28
  separator: @config.separator
@@ -66,6 +67,10 @@ orbital BreadcrumbOrbital {
66
67
  @label "Class Name"
67
68
  @description "Additional CSS classes"
68
69
  @tier "presentation"
70
+ viewerRole : string = ""
71
+ @label "Viewer's role"
72
+ @description "The viewer's role that each action's `roles` is checked against; bind it at the call site (e.g. `viewerRole: @user.role`). Empty = only actions with no `roles` show."
73
+ @tier "policy"
69
74
  }
70
75
  }
71
76
 
@@ -30,6 +30,7 @@ orbital ChartOrbital {
30
30
  event : event
31
31
  navigatesTo : string
32
32
  variant : "primary" | "secondary" | "ghost"
33
+ roles : [string]
33
34
  }
34
35
  type ChartError = {
35
36
  message : string!
@@ -60,8 +61,9 @@ orbital ChartOrbital {
60
61
  showValues: @config.showValues
61
62
  stack: @config.stack
62
63
  timeAxis: @config.timeAxis
64
+ period: @config.period
63
65
  drillEvent: @config.drillEvent
64
- actions: @config.actions
66
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
65
67
  isLoading: @config.isLoading
66
68
  error: @config.error
67
69
  className: @config.className
@@ -120,6 +122,10 @@ orbital ChartOrbital {
120
122
  @label "Time Axis"
121
123
  @description "Format X-axis labels as time (ISO date in → 'Mar 2026'-style label out)"
122
124
  @tier "presentation"
125
+ period : "day" | "week" | "month" | "quarter" | "year" = day
126
+ @label "Period"
127
+ @description "Bucket granularity of a time axis — labels read 'Oct 2', 'Week of Sep 28', 'Oct 2026', 'Q4 2026' or '2026'"
128
+ @tier "presentation"
123
129
  drillEvent : string
124
130
  @label "Drill Event"
125
131
  @description "Event name emitted as `UI:{drillEvent}` with `{ label, value, seriesLabel? }` on data-point click"
@@ -140,6 +146,10 @@ orbital ChartOrbital {
140
146
  @label "Class Name"
141
147
  @description "Additional CSS classes"
142
148
  @tier "presentation"
149
+ viewerRole : string = ""
150
+ @label "Viewer's role"
151
+ @description "The viewer's role that each action's `roles` is checked against; bind it at the call site (e.g. `viewerRole: @user.role`). Empty = only actions with no `roles` show."
152
+ @tier "policy"
143
153
  }
144
154
  }
145
155
 
@@ -18,6 +18,7 @@ orbital CodeBlockOrbital {
18
18
  event : event
19
19
  navigatesTo : string
20
20
  variant : "primary" | "secondary" | "ghost"
21
+ roles : [string]
21
22
  }
22
23
  type CodeBlockError = {
23
24
  message : string!
@@ -66,7 +67,7 @@ orbital CodeBlockOrbital {
66
67
  showLineNumbers: @config.showLineNumbers
67
68
  wordWrap: @config.wordWrap
68
69
  files: @config.files
69
- actions: @config.actions
70
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
70
71
  isLoading: @config.isLoading
71
72
  error: @config.error
72
73
  showCopy: @config.showCopy
@@ -106,7 +107,7 @@ orbital CodeBlockOrbital {
106
107
  showLineNumbers: @config.showLineNumbers
107
108
  wordWrap: @config.wordWrap
108
109
  files: @config.files
109
- actions: @config.actions
110
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
110
111
  isLoading: @config.isLoading
111
112
  error: @config.error
112
113
  showCopy: @config.showCopy
@@ -146,7 +147,7 @@ orbital CodeBlockOrbital {
146
147
  showLineNumbers: @config.showLineNumbers
147
148
  wordWrap: @config.wordWrap
148
149
  files: @config.files
149
- actions: @config.actions
150
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
150
151
  isLoading: @config.isLoading
151
152
  error: @config.error
152
153
  showCopy: @config.showCopy
@@ -186,7 +187,7 @@ orbital CodeBlockOrbital {
186
187
  showLineNumbers: @config.showLineNumbers
187
188
  wordWrap: @config.wordWrap
188
189
  files: @config.files
189
- actions: @config.actions
190
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
190
191
  isLoading: @config.isLoading
191
192
  error: @config.error
192
193
  showCopy: @config.showCopy
@@ -226,7 +227,7 @@ orbital CodeBlockOrbital {
226
227
  showLineNumbers: @config.showLineNumbers
227
228
  wordWrap: @config.wordWrap
228
229
  files: @config.files
229
- actions: @config.actions
230
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
230
231
  isLoading: @config.isLoading
231
232
  error: @config.error
232
233
  showCopy: @config.showCopy
@@ -266,7 +267,7 @@ orbital CodeBlockOrbital {
266
267
  showLineNumbers: @config.showLineNumbers
267
268
  wordWrap: @config.wordWrap
268
269
  files: @config.files
269
- actions: @config.actions
270
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
270
271
  isLoading: @config.isLoading
271
272
  error: @config.error
272
273
  showCopy: @config.showCopy
@@ -306,7 +307,7 @@ orbital CodeBlockOrbital {
306
307
  showLineNumbers: @config.showLineNumbers
307
308
  wordWrap: @config.wordWrap
308
309
  files: @config.files
309
- actions: @config.actions
310
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
310
311
  isLoading: @config.isLoading
311
312
  error: @config.error
312
313
  showCopy: @config.showCopy
@@ -346,7 +347,7 @@ orbital CodeBlockOrbital {
346
347
  showLineNumbers: @config.showLineNumbers
347
348
  wordWrap: @config.wordWrap
348
349
  files: @config.files
349
- actions: @config.actions
350
+ actions: (array/filter @config.actions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
350
351
  isLoading: @config.isLoading
351
352
  error: @config.error
352
353
  showCopy: @config.showCopy
@@ -564,6 +565,10 @@ orbital CodeBlockOrbital {
564
565
  @label "Line Numbers"
565
566
  @description "Editable only: number the lines in a gutter (lines with errors in red). Default on."
566
567
  @tier "presentation"
568
+ viewerRole : string = ""
569
+ @label "Viewer's role"
570
+ @description "The viewer's role that each action's `roles` is checked against; bind it at the call site (e.g. `viewerRole: @user.role`). Empty = only actions with no `roles` show."
571
+ @tier "policy"
567
572
  }
568
573
  }
569
574
 
@@ -13,6 +13,7 @@ orbital CommandPaletteOrbital {
13
13
  event : event
14
14
  action : event
15
15
  actionPayload : @payload action
16
+ roles : [string]
16
17
  }
17
18
  type CommandPaletteSELECTCommand = {
18
19
  id : string!
@@ -41,7 +42,7 @@ orbital CommandPaletteOrbital {
41
42
  (render-ui main {
42
43
  open: @entity.open
43
44
  onOpenChange: @config.onOpenChange
44
- commands: @config.commands
45
+ commands: (array/filter @config.commands (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
45
46
  onSelect: @config.onSelect
46
47
  placeholder: @config.placeholder
47
48
  emptyLabel: @config.emptyLabel
@@ -53,7 +54,7 @@ orbital CommandPaletteOrbital {
53
54
  (render-ui main {
54
55
  open: @entity.open
55
56
  onOpenChange: @config.onOpenChange
56
- commands: @config.commands
57
+ commands: (array/filter @config.commands (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
57
58
  onSelect: @config.onSelect
58
59
  placeholder: @config.placeholder
59
60
  emptyLabel: @config.emptyLabel
@@ -98,18 +99,22 @@ orbital CommandPaletteOrbital {
98
99
  @label "On Select"
99
100
  @description "Called with the selected command (click, or Enter on the highlighted row)"
100
101
  @tier "presentation"
101
- placeholder : string = "Type a command..."
102
+ placeholder : string
102
103
  @label "Placeholder"
103
- @description "Search field placeholder. Consumers own i18n — plain string prop, no package-internal translation (matches FloatingToolbar's convention)."
104
+ @description "Search field placeholder. Defaults to the translated 'Type a command...'."
104
105
  @tier "presentation"
105
- emptyLabel : string = "No matching commands"
106
+ emptyLabel : string
106
107
  @label "Empty Label"
107
- @description "Label shown when no command matches the query"
108
+ @description "Label shown when no command matches the query. Defaults to the translated message."
108
109
  @tier "presentation"
109
110
  className : string
110
111
  @label "Class Name"
111
112
  @description "Additional CSS classes on the overlay's dialog"
112
113
  @tier "presentation"
114
+ viewerRole : string = ""
115
+ @label "Viewer's role"
116
+ @description "The viewer's role that each action's `roles` is checked against; bind it at the call site (e.g. `viewerRole: @user.role`). Empty = only actions with no `roles` show."
117
+ @tier "policy"
113
118
  }
114
119
  }
115
120
 
@@ -104,9 +104,9 @@ orbital CommitRowOrbital {
104
104
  @label "Timestamp"
105
105
  @description "Display time (already formatted, e.g. '2 min ago')."
106
106
  @tier "presentation"
107
- kind : "user" | "agent" | "restore" | "undo" | "redo" | "snapshot" = user
107
+ kind : "user" | "agent" | "restore" | "undo" | "redo" | "snapshot" | "merge" = user
108
108
  @label "Kind"
109
- @description "What made this version (a user save, an agent turn, a restore, an undo/redo, a snapshot)."
109
+ @description "What made this version (a user save, an agent turn, a restore, an undo/redo, a snapshot, a merge of a teammate's work)."
110
110
  @tier "presentation"
111
111
  additions : number
112
112
  @label "Additions"
@@ -27,6 +27,7 @@ orbital ConfirmDialogOrbital {
27
27
  (render-ui modal {
28
28
  isOpen: @config.isOpen
29
29
  onClose: @config.onClose
30
+ onExited: @config.onExited
30
31
  onConfirm: @config.onConfirm
31
32
  title: @config.title
32
33
  message: @config.message
@@ -58,6 +59,9 @@ orbital ConfirmDialogOrbital {
58
59
  @config.onClose -> external { }
59
60
  @description "Callback when dialog is closed (injected by slot wrapper)"
60
61
  @tier "essential"
62
+ @config.onExited -> external { }
63
+ @description "Fires after the exit animation completes (the dialog is about to unmount)."
64
+ @tier "essential"
61
65
  @config.onConfirm -> external { }
62
66
  @description "Callback when action is confirmed (injected by slot wrapper)"
63
67
  @tier "essential"
@@ -77,6 +81,10 @@ orbital ConfirmDialogOrbital {
77
81
  @label "On Close"
78
82
  @description "Callback when dialog is closed (injected by slot wrapper)"
79
83
  @tier "presentation"
84
+ onExited : event = "EXITED"
85
+ @label "On Exited"
86
+ @description "Fires after the exit animation completes (the dialog is about to unmount)."
87
+ @tier "presentation"
80
88
  onConfirm : event = "CONFIRM"
81
89
  @label "On Confirm"
82
90
  @description "Callback when action is confirmed (injected by slot wrapper)"
@@ -4,28 +4,38 @@ app ui-data-grid "1.0.0"
4
4
  ;; @pattern "data-grid"
5
5
  orbital DataGridOrbital {
6
6
  type DataGridLoaded = Event { data : [DataGridItem] } "DataGrid rows finished loading; payload.data holds the collection"
7
+ type DataGridEmptyAction = {
8
+ label : string!
9
+ event : event
10
+ }
7
11
  type DataGridFieldsItem = {
8
12
  name : string!
9
13
  label : string
10
14
  icon : icon
11
15
  variant : "h3" | "h4" | "body" | "caption" | "badge" | "small" | "progress"
12
16
  format : "date" | "currency" | "number" | "boolean" | "percent"
13
- colorMap : Map string string
17
+ colorMap : Map string DataGridFieldsItemColorMapValue
18
+ labels : Map string string
14
19
  }
20
+ type DataGridFieldsItemColorMapValue = "default" | "primary" | "secondary" | "success" | "warning" | "danger" | "error" | "info" | "neutral" | "destructive"
15
21
  type DataGridColumnsItem = {
16
22
  name : string!
17
23
  label : string
18
24
  icon : icon
19
25
  variant : "h3" | "h4" | "body" | "caption" | "badge" | "small" | "progress"
20
26
  format : "date" | "currency" | "number" | "boolean" | "percent"
21
- colorMap : Map string string
27
+ colorMap : Map string DataGridColumnsItemColorMapValue
28
+ labels : Map string string
22
29
  }
30
+ type DataGridColumnsItemColorMapValue = "default" | "primary" | "secondary" | "success" | "warning" | "danger" | "error" | "info" | "neutral" | "destructive"
23
31
  type DataGridItemActionsItem = {
24
32
  label : string!
25
33
  event : event
26
34
  navigatesTo : string
27
35
  icon : icon
28
36
  variant : "primary" | "secondary" | "ghost" | "danger"
37
+ when : SExpr
38
+ roles : [string]
29
39
  }
30
40
  type DataGridError = {
31
41
  message : string!
@@ -59,10 +69,15 @@ orbital DataGridOrbital {
59
69
  positionEvent: @config.positionEvent
60
70
  dndItemIdField: @config.dndItemIdField
61
71
  dndRoot: @config.dndRoot
72
+ emptyIcon: @config.emptyIcon
73
+ emptyTitle: @config.emptyTitle
74
+ emptyDescription: @config.emptyDescription
75
+ emptyAction: @config.emptyAction
62
76
  entity: @entity
63
77
  fields: @config.fields
64
78
  columns: @config.columns
65
- itemActions: @config.itemActions
79
+ itemActions: (array/filter @config.itemActions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
80
+ itemClickEvent: @config.itemClickEvent
66
81
  maxInlineActions: @config.maxInlineActions
67
82
  scrollX: @config.scrollX
68
83
  cols: @config.cols
@@ -92,10 +107,15 @@ orbital DataGridOrbital {
92
107
  positionEvent: @config.positionEvent
93
108
  dndItemIdField: @config.dndItemIdField
94
109
  dndRoot: @config.dndRoot
110
+ emptyIcon: @config.emptyIcon
111
+ emptyTitle: @config.emptyTitle
112
+ emptyDescription: @config.emptyDescription
113
+ emptyAction: @config.emptyAction
95
114
  entity: @entity
96
115
  fields: @config.fields
97
116
  columns: @config.columns
98
- itemActions: @config.itemActions
117
+ itemActions: (array/filter @config.itemActions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
118
+ itemClickEvent: @config.itemClickEvent
99
119
  maxInlineActions: @config.maxInlineActions
100
120
  scrollX: @config.scrollX
101
121
  cols: @config.cols
@@ -125,10 +145,15 @@ orbital DataGridOrbital {
125
145
  positionEvent: @config.positionEvent
126
146
  dndItemIdField: @config.dndItemIdField
127
147
  dndRoot: @config.dndRoot
148
+ emptyIcon: @config.emptyIcon
149
+ emptyTitle: @config.emptyTitle
150
+ emptyDescription: @config.emptyDescription
151
+ emptyAction: @config.emptyAction
128
152
  entity: @payload.data
129
153
  fields: @config.fields
130
154
  columns: @config.columns
131
- itemActions: @config.itemActions
155
+ itemActions: (array/filter @config.itemActions (fn action (or (= (array/len (object/get @action roles [])) 0) (array/includes (object/get @action roles []) @config.viewerRole))))
156
+ itemClickEvent: @config.itemClickEvent
132
157
  maxInlineActions: @config.maxInlineActions
133
158
  scrollX: @config.scrollX
134
159
  cols: @config.cols
@@ -151,6 +176,12 @@ orbital DataGridOrbital {
151
176
  }
152
177
 
153
178
  emits {
179
+ @config.itemClickEvent -> external {
180
+ id : string!
181
+ row : @entity!
182
+ }
183
+ @description "When set, clicking a card emits UI:{itemClickEvent} with { id, row }. Omit = cards are not clickable."
184
+ @tier "essential"
154
185
  @config.selectionEvent -> external {
155
186
  selectedIds : [string]!
156
187
  }
@@ -204,6 +235,22 @@ orbital DataGridOrbital {
204
235
  @label "Dnd Root"
205
236
  @description "Mark this container as the DnD root for its subtree — descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
206
237
  @tier "presentation"
238
+ emptyIcon : icon
239
+ @label "Empty Icon"
240
+ @description "Domain icon for the empty state."
241
+ @tier "presentation"
242
+ emptyTitle : string
243
+ @label "Empty Title"
244
+ @description "Specific title ('No orders yet')."
245
+ @tier "presentation"
246
+ emptyDescription : string
247
+ @label "Empty Description"
248
+ @description "What will appear here once rows exist."
249
+ @tier "presentation"
250
+ emptyAction : DataGridEmptyAction
251
+ @label "Empty Action"
252
+ @description "Create-the-first-item action."
253
+ @tier "presentation"
207
254
  fields : [DataGridFieldsItem] = []
208
255
  @label "Fields"
209
256
  @description "Field definitions for rendering each card. The pattern contract in `@almadar/core/patterns` documents `columns` as the wire-format alias the compiler emits — both names resolve to the same shape here. Pass either."
@@ -216,6 +263,10 @@ orbital DataGridOrbital {
216
263
  @label "Item Actions"
217
264
  @description "Per-item action buttons"
218
265
  @tier "presentation"
266
+ itemClickEvent : event = "ITEM_CLICK"
267
+ @label "Item Click Event"
268
+ @description "When set, clicking a card emits UI:{itemClickEvent} with { id, row }. Omit = cards are not clickable."
269
+ @tier "presentation"
219
270
  maxInlineActions : number
220
271
  @label "Max Inline Actions"
221
272
  @description "Max inline primary action buttons before the rest collapse into a '⋯' overflow menu. Omit = all inline."
@@ -284,6 +335,10 @@ orbital DataGridOrbital {
284
335
  @label "Relations Data"
285
336
  @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."
286
337
  @tier "presentation"
338
+ viewerRole : string = ""
339
+ @label "Viewer's role"
340
+ @description "The viewer's role that each action's `roles` is checked against; bind it at the call site (e.g. `viewerRole: @user.role`). Empty = only actions with no `roles` show."
341
+ @tier "policy"
287
342
  selfFetch : boolean = true
288
343
  @label "Fetch its own rows on mount?"
289
344
  @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."