@almadar/std 16.234.0 → 16.236.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 (245) hide show
  1. package/behaviors/behaviors-registry.json +4402 -1898
  2. package/behaviors/lolo/infra/atoms/std-approval-gate.lolo +25 -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-mod-queue.lolo +40 -18
  12. package/behaviors/lolo/infra/atoms/std-notification-preferences.lolo +20 -11
  13. package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +0 -5
  14. package/behaviors/lolo/infra/atoms/std-permission-matrix.lolo +23 -11
  15. package/behaviors/lolo/infra/atoms/std-rate-limiter.lolo +84 -22
  16. package/behaviors/lolo/infra/atoms/std-status-lifecycle.lolo +1 -6
  17. package/behaviors/lolo/ml/atoms/std-graph-builder.lolo +3 -1
  18. package/behaviors/lolo/ml/atoms/std-ml-classify.lolo +0 -4
  19. package/behaviors/lolo/ml/atoms/std-ml-similarity.lolo +0 -4
  20. package/behaviors/lolo/ui/avl/atoms/ui-avl-state-machine.lolo +12 -0
  21. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +55 -9
  22. package/behaviors/lolo/ui/core/atoms/std-app-search.lolo +6 -2
  23. package/behaviors/lolo/ui/core/atoms/std-billable-hour.lolo +19 -14
  24. package/behaviors/lolo/ui/core/atoms/std-board.lolo +77 -27
  25. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +44 -28
  26. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +7 -3
  27. package/behaviors/lolo/ui/core/atoms/std-esign-flow.lolo +25 -13
  28. package/behaviors/lolo/ui/core/atoms/std-esign-request.lolo +5 -0
  29. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +0 -5
  30. package/behaviors/lolo/ui/core/atoms/std-export.lolo +0 -10
  31. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +7 -3
  32. package/behaviors/lolo/ui/core/atoms/std-form-advanced.lolo +1 -6
  33. package/behaviors/lolo/ui/core/atoms/std-geosearch.lolo +1 -0
  34. package/behaviors/lolo/ui/core/atoms/std-graphs.lolo +20 -4
  35. package/behaviors/lolo/ui/core/atoms/std-import.lolo +0 -5
  36. package/behaviors/lolo/ui/core/atoms/std-list.lolo +46 -32
  37. package/behaviors/lolo/ui/core/atoms/std-modal-editor.lolo +2 -2
  38. package/behaviors/lolo/ui/core/atoms/std-rating-review.lolo +12 -13
  39. package/behaviors/lolo/ui/core/atoms/std-record-detail.lolo +16 -12
  40. package/behaviors/lolo/ui/core/atoms/std-recurrence.lolo +10 -1
  41. package/behaviors/lolo/ui/core/atoms/std-role-gate.lolo +39 -0
  42. package/behaviors/lolo/ui/core/atoms/std-saved-search.lolo +78 -16
  43. package/behaviors/lolo/ui/core/atoms/std-selection.lolo +15 -10
  44. package/behaviors/lolo/ui/core/atoms/std-stats.lolo +5 -5
  45. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +3 -0
  46. package/behaviors/lolo/ui/core/atoms/std-thread.lolo +41 -73
  47. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +20 -11
  48. package/behaviors/lolo/ui/core/atoms/std-vote.lolo +0 -4
  49. package/behaviors/lolo/ui/core/atoms/std-wizard.lolo +3 -3
  50. package/behaviors/lolo/ui/core/atoms/ui-presence.lolo +21 -0
  51. package/behaviors/lolo/ui/core/molecules/ui-breadcrumb.lolo +6 -1
  52. package/behaviors/lolo/ui/core/molecules/ui-chart.lolo +11 -1
  53. package/behaviors/lolo/ui/core/molecules/ui-code-block.lolo +13 -8
  54. package/behaviors/lolo/ui/core/molecules/ui-command-palette.lolo +7 -2
  55. package/behaviors/lolo/ui/core/molecules/ui-commit-row.lolo +2 -2
  56. package/behaviors/lolo/ui/core/molecules/ui-confirm-dialog.lolo +8 -0
  57. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +41 -3
  58. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +41 -3
  59. package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +30 -9
  60. package/behaviors/lolo/ui/core/molecules/ui-document-panel.lolo +8 -3
  61. package/behaviors/lolo/ui/core/molecules/ui-document-viewer.lolo +6 -1
  62. package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +13 -0
  63. package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +6 -1
  64. package/behaviors/lolo/ui/core/molecules/ui-floating-toolbar.lolo +6 -1
  65. package/behaviors/lolo/ui/core/molecules/ui-form-actions.lolo +6 -1
  66. package/behaviors/lolo/ui/core/molecules/ui-graph-canvas.lolo +6 -1
  67. package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +6 -1
  68. package/behaviors/lolo/ui/core/molecules/ui-meter.lolo +6 -1
  69. package/behaviors/lolo/ui/core/molecules/ui-modal.lolo +5 -0
  70. package/behaviors/lolo/ui/core/molecules/ui-page-header.lolo +11 -1
  71. package/behaviors/lolo/ui/core/molecules/ui-page-transition.lolo +1 -1
  72. package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +44 -15
  73. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +41 -3
  74. package/behaviors/lolo/ui/core/molecules/ui-tabs.lolo +8 -2
  75. package/behaviors/lolo/ui/core/organisms/ui-detail-panel.lolo +66 -12
  76. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +9 -3
  77. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +9 -3
  78. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +18 -9
  79. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +55 -10
  80. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +55 -10
  81. package/behaviors/lolo/ui/core/organisms/ui-media-gallery.lolo +8 -3
  82. package/behaviors/lolo/ui/core/organisms/ui-state-machine-view.lolo +12 -0
  83. package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +8 -3
  84. package/behaviors/lolo/ui/core/templates/ui-counter-template.lolo +2 -44
  85. package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +6 -1
  86. package/behaviors/lolo/ui/core/templates/ui-generic-app-template.lolo +2 -37
  87. package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +8 -2
  88. package/behaviors/lolo/ui/game/organisms/std-arcade-board-3d.lolo +2 -2
  89. package/behaviors/lolo/ui/game/organisms/std-crew-board-2d.lolo +0 -4
  90. package/behaviors/lolo/ui/game/organisms/std-platformer-puzzle.lolo +2 -66
  91. package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +0 -4
  92. package/behaviors/lolo/ui/game/organisms/std-worldmap-board-2d.lolo +0 -4
  93. package/behaviors/lolo/ui/learning/atoms/std-learn-stepper.lolo +6 -6
  94. package/behaviors/lolo-behavior-contracts.json +1 -1
  95. package/behaviors/registry/factory-signatures.json +1 -1
  96. package/behaviors/registry/infra/atoms/std-approval-gate.orb +124 -67
  97. package/behaviors/registry/infra/atoms/std-audit-capture.orb +0 -8
  98. package/behaviors/registry/infra/atoms/std-cache-aside.orb +0 -84
  99. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +1 -44
  100. package/behaviors/registry/infra/atoms/std-data-erasure.orb +124 -55
  101. package/behaviors/registry/infra/atoms/std-data-import.orb +12 -11
  102. package/behaviors/registry/infra/atoms/std-game-clock.orb +31 -0
  103. package/behaviors/registry/infra/atoms/std-knowledge-loop.orb +0 -57
  104. package/behaviors/registry/infra/atoms/std-lifecycle.orb +43 -0
  105. package/behaviors/registry/infra/atoms/std-mod-queue.orb +379 -103
  106. package/behaviors/registry/infra/atoms/std-notification-preferences.orb +126 -12
  107. package/behaviors/registry/infra/atoms/std-notify-on-event.orb +0 -11
  108. package/behaviors/registry/infra/atoms/std-permission-matrix.orb +128 -12
  109. package/behaviors/registry/infra/atoms/std-rate-limiter.orb +287 -72
  110. package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +5 -8
  111. package/behaviors/registry/ml/atoms/std-graph-builder.orb +11 -0
  112. package/behaviors/registry/ml/atoms/std-ml-classify.orb +0 -7
  113. package/behaviors/registry/ml/atoms/std-ml-similarity.orb +0 -7
  114. package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +82 -0
  115. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +417 -9
  116. package/behaviors/registry/ui/core/atoms/std-app-search.orb +53 -1
  117. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +209 -19
  118. package/behaviors/registry/ui/core/atoms/std-board.orb +242 -61
  119. package/behaviors/registry/ui/core/atoms/std-browse.orb +295 -41
  120. package/behaviors/registry/ui/core/atoms/std-calendar.orb +96 -2
  121. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +122 -15
  122. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +11 -0
  123. package/behaviors/registry/ui/core/atoms/std-event-log.orb +0 -8
  124. package/behaviors/registry/ui/core/atoms/std-export.orb +0 -16
  125. package/behaviors/registry/ui/core/atoms/std-file-store.orb +109 -2
  126. package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +1 -43
  127. package/behaviors/registry/ui/core/atoms/std-geosearch.orb +5 -0
  128. package/behaviors/registry/ui/core/atoms/std-graphs.orb +173 -66
  129. package/behaviors/registry/ui/core/atoms/std-import.orb +0 -8
  130. package/behaviors/registry/ui/core/atoms/std-list.orb +226 -34
  131. package/behaviors/registry/ui/core/atoms/std-modal-editor.orb +10 -1
  132. package/behaviors/registry/ui/core/atoms/std-rating-review.orb +37 -19
  133. package/behaviors/registry/ui/core/atoms/std-record-detail.orb +204 -11
  134. package/behaviors/registry/ui/core/atoms/std-recurrence.orb +89 -4
  135. package/behaviors/registry/ui/core/atoms/std-role-gate.orb +217 -0
  136. package/behaviors/registry/ui/core/atoms/std-saved-search.orb +419 -19
  137. package/behaviors/registry/ui/core/atoms/std-selection.orb +140 -10
  138. package/behaviors/registry/ui/core/atoms/std-stats.orb +73 -1
  139. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +3 -0
  140. package/behaviors/registry/ui/core/atoms/std-thread.orb +190 -115
  141. package/behaviors/registry/ui/core/atoms/std-version-history.orb +127 -13
  142. package/behaviors/registry/ui/core/atoms/std-vote.orb +0 -9
  143. package/behaviors/registry/ui/core/atoms/std-wizard.orb +33 -3
  144. package/behaviors/registry/ui/core/atoms/ui-presence.orb +59 -0
  145. package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +53 -1
  146. package/behaviors/registry/ui/core/molecules/ui-chart.orb +68 -1
  147. package/behaviors/registry/ui/core/molecules/ui-code-block.orb +291 -8
  148. package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +87 -2
  149. package/behaviors/registry/ui/core/molecules/ui-commit-row.orb +3 -2
  150. package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +32 -0
  151. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +189 -3
  152. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +189 -3
  153. package/behaviors/registry/ui/core/molecules/ui-document-details.orb +81 -24
  154. package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +121 -3
  155. package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +53 -1
  156. package/behaviors/registry/ui/core/molecules/ui-drawer.orb +40 -0
  157. package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +53 -1
  158. package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +53 -1
  159. package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +53 -1
  160. package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +53 -1
  161. package/behaviors/registry/ui/core/molecules/ui-menu.orb +57 -1
  162. package/behaviors/registry/ui/core/molecules/ui-meter.orb +53 -1
  163. package/behaviors/registry/ui/core/molecules/ui-modal.orb +8 -0
  164. package/behaviors/registry/ui/core/molecules/ui-page-header.orb +60 -1
  165. package/behaviors/registry/ui/core/molecules/ui-page-transition.orb +1 -1
  166. package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +393 -23
  167. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +189 -3
  168. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +99 -2
  169. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +282 -20
  170. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +130 -3
  171. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +130 -3
  172. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +367 -9
  173. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +104 -13
  174. package/behaviors/registry/ui/core/organisms/ui-form.orb +104 -13
  175. package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +121 -3
  176. package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +82 -0
  177. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +121 -3
  178. package/behaviors/registry/ui/core/templates/ui-counter-template.orb +1 -172
  179. package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +53 -1
  180. package/behaviors/registry/ui/core/templates/ui-generic-app-template.orb +1 -116
  181. package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +99 -2
  182. package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +10 -0
  183. package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +0 -7
  184. package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +1 -807
  185. package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +0 -7
  186. package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +0 -7
  187. package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +6 -0
  188. package/canonical-operators.json +18 -1
  189. package/dist/behaviors/exports-reader.js +7662 -3762
  190. package/dist/behaviors/functions/index.d.ts +309 -104
  191. package/dist/behaviors/functions/index.js +7651 -3762
  192. package/dist/behaviors/index.d.ts +1 -1
  193. package/dist/behaviors/index.js +7663 -3763
  194. package/dist/behaviors/query.js +7662 -3762
  195. package/dist/behaviors-embeddings.hash.json +3 -3
  196. package/dist/behaviors-embeddings.json +35 -27
  197. package/dist/behaviors-registry.json +4402 -1898
  198. package/dist/index.d.ts +3 -3
  199. package/dist/index.js +7697 -3763
  200. package/dist/knob-embeddings.hash.json +3 -3
  201. package/dist/knob-embeddings.json +612 -352
  202. package/dist/modules/anim.d.ts +1 -1
  203. package/dist/modules/array.d.ts +1 -1
  204. package/dist/modules/array.js +15 -0
  205. package/dist/modules/async.d.ts +1 -1
  206. package/dist/modules/async.js +9 -0
  207. package/dist/modules/behavior.d.ts +1 -1
  208. package/dist/modules/browser.d.ts +1 -1
  209. package/dist/modules/composition.d.ts +1 -1
  210. package/dist/modules/contract.d.ts +1 -1
  211. package/dist/modules/core.d.ts +1 -1
  212. package/dist/modules/core.js +10 -0
  213. package/dist/modules/data.d.ts +1 -1
  214. package/dist/modules/ease.d.ts +1 -1
  215. package/dist/modules/format.d.ts +1 -1
  216. package/dist/modules/geo.d.ts +1 -1
  217. package/dist/modules/graph.d.ts +1 -1
  218. package/dist/modules/grid.d.ts +1 -1
  219. package/dist/modules/index.d.ts +1 -1
  220. package/dist/modules/index.js +34 -0
  221. package/dist/modules/integration.d.ts +1 -1
  222. package/dist/modules/json.d.ts +1 -1
  223. package/dist/modules/llm.d.ts +1 -1
  224. package/dist/modules/math.d.ts +1 -1
  225. package/dist/modules/memory.d.ts +1 -1
  226. package/dist/modules/nn.d.ts +1 -1
  227. package/dist/modules/noise.d.ts +1 -1
  228. package/dist/modules/object.d.ts +1 -1
  229. package/dist/modules/os.d.ts +1 -1
  230. package/dist/modules/path.d.ts +1 -1
  231. package/dist/modules/prob.d.ts +1 -1
  232. package/dist/modules/session.d.ts +1 -1
  233. package/dist/modules/str.d.ts +1 -1
  234. package/dist/modules/tensor.d.ts +1 -1
  235. package/dist/modules/time.d.ts +1 -1
  236. package/dist/modules/trace.d.ts +1 -1
  237. package/dist/modules/train.d.ts +1 -1
  238. package/dist/modules/validate.d.ts +1 -1
  239. package/dist/modules/vector.d.ts +1 -1
  240. package/dist/modules/workspace.d.ts +1 -1
  241. package/dist/registry/factory-signatures.json +1 -1
  242. package/dist/registry.d.ts +5 -2
  243. package/dist/registry.js +55 -1
  244. package/dist/{types-DwAW4Nni.d.ts → types-DLx38UFZ.d.ts} +31 -4
  245. package/package.json +2 -2
@@ -371,6 +371,64 @@
371
371
  {
372
372
  "category": "interaction",
373
373
  "config": {
374
+ "itemActions": {
375
+ "default": [
376
+ {
377
+ "event": "EDIT",
378
+ "icon": "pencil",
379
+ "label": "Edit",
380
+ "variant": "secondary"
381
+ },
382
+ {
383
+ "event": "DELETE",
384
+ "icon": "trash-2",
385
+ "label": "Delete",
386
+ "variant": "danger"
387
+ }
388
+ ],
389
+ "description": "Actions offered on each row; give an item `roles` to show it only to those viewer roles.",
390
+ "items": {
391
+ "properties": {
392
+ "event": {
393
+ "name": "event",
394
+ "required": false,
395
+ "type": "event"
396
+ },
397
+ "icon": {
398
+ "name": "icon",
399
+ "required": false,
400
+ "type": "string"
401
+ },
402
+ "label": {
403
+ "name": "label",
404
+ "required": true,
405
+ "type": "string"
406
+ },
407
+ "roles": {
408
+ "items": {
409
+ "type": "string"
410
+ },
411
+ "name": "roles",
412
+ "required": false,
413
+ "type": "array"
414
+ },
415
+ "variant": {
416
+ "name": "variant",
417
+ "required": false,
418
+ "type": "string"
419
+ },
420
+ "when": {
421
+ "name": "when",
422
+ "required": false,
423
+ "type": "object"
424
+ }
425
+ },
426
+ "type": "object"
427
+ },
428
+ "label": "Row actions",
429
+ "tier": "presentation",
430
+ "type": "[ItemAction]"
431
+ },
374
432
  "tableLook": {
375
433
  "default": "dense",
376
434
  "description": "Layer 2 visual treatment for the preference data table rendered by this atom.",
@@ -391,6 +449,13 @@
391
449
  "label": "Section title",
392
450
  "tier": "presentation",
393
451
  "type": "string"
452
+ },
453
+ "viewerRole": {
454
+ "default": "",
455
+ "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.",
456
+ "label": "Viewer's role",
457
+ "tier": "policy",
458
+ "type": "string"
394
459
  }
395
460
  },
396
461
  "effectRow": [
@@ -1156,18 +1221,38 @@
1156
1221
  ],
1157
1222
  "gap": "sm",
1158
1223
  "itemActions": [
1159
- {
1160
- "event": "EDIT",
1161
- "icon": "pencil",
1162
- "label": "Edit",
1163
- "variant": "secondary"
1164
- },
1165
- {
1166
- "event": "DELETE",
1167
- "icon": "trash-2",
1168
- "label": "Delete",
1169
- "variant": "danger"
1170
- }
1224
+ "array/filter",
1225
+ "@config.itemActions",
1226
+ [
1227
+ "fn",
1228
+ "action",
1229
+ [
1230
+ "or",
1231
+ [
1232
+ "=",
1233
+ [
1234
+ "array/len",
1235
+ [
1236
+ "object/get",
1237
+ "@action",
1238
+ "roles",
1239
+ []
1240
+ ]
1241
+ ],
1242
+ 0.0
1243
+ ],
1244
+ [
1245
+ "array/includes",
1246
+ [
1247
+ "object/get",
1248
+ "@action",
1249
+ "roles",
1250
+ []
1251
+ ],
1252
+ "@config.viewerRole"
1253
+ ]
1254
+ ]
1255
+ ]
1171
1256
  ],
1172
1257
  "look": "@config.tableLook",
1173
1258
  "type": "data-grid"
@@ -2384,6 +2469,35 @@
2384
2469
  }
2385
2470
  }
2386
2471
  ],
2472
+ "types": {
2473
+ "ItemAction": [
2474
+ {
2475
+ "name": "label",
2476
+ "required": true,
2477
+ "type": "string"
2478
+ },
2479
+ {
2480
+ "name": "event",
2481
+ "type": "event"
2482
+ },
2483
+ {
2484
+ "name": "variant",
2485
+ "type": "string"
2486
+ },
2487
+ {
2488
+ "name": "icon",
2489
+ "type": "string"
2490
+ },
2491
+ {
2492
+ "name": "roles",
2493
+ "type": "[string]"
2494
+ },
2495
+ {
2496
+ "name": "when",
2497
+ "type": "SExpr"
2498
+ }
2499
+ ]
2500
+ },
2387
2501
  "uses": [
2388
2502
  {
2389
2503
  "as": "Modal",
@@ -514,17 +514,6 @@
514
514
  "tier": "policy",
515
515
  "type": "number"
516
516
  },
517
- "listensFor": {
518
- "default": [],
519
- "description": "Event names that should fire a notification. Set this to the upstream event name (e.g. OrderPlaced, CheckoutCompleted) so this atom listens for events from the orbital that emits them. The orbital owning this trait reacts whenever the named event fires anywhere in the schema.",
520
- "items": {
521
- "type": "string"
522
- },
523
- "label": "Trigger events",
524
- "synonyms": "subscribe to event, listen for event, react to event, watch for, wire upstream event, observe event from another orbital, cross-orbital subscription, on-event trigger",
525
- "tier": "internal",
526
- "type": "[string]"
527
- },
528
517
  "notifyChannel": {
529
518
  "default": "in-app",
530
519
  "description": "Delivery channel. `in-app` (default) emits the in-app `notify` toast. `email`/`sms`/`webhook` dispatch through call-service at event time (email.send / twilio.sendSMS / webhook.send) and persist a NotificationRecord audit row with an honest `dispatched` flag: true only once the service call succeeds, false plus the failure detail in `error` otherwise. `push` looks up the recipient's PushSubscription row (captured by std-notification-center's subscribe flow) and dispatches web-push via push.send — a recipient with no subscription records the audit row undispatched (`no-push-subscription`). `webhook` requires `webhookUrl` to actually dispatch; a blank `webhookUrl` still records the audit row undispatched rather than failing. A per-user NotificationPreference row's `channel` overrides this value for that recipient.",
@@ -484,6 +484,73 @@
484
484
  "access"
485
485
  ],
486
486
  "category": "interaction",
487
+ "config": {
488
+ "itemActions": {
489
+ "default": [
490
+ {
491
+ "event": "EDIT",
492
+ "icon": "pencil",
493
+ "label": "Edit",
494
+ "variant": "ghost"
495
+ },
496
+ {
497
+ "event": "DELETE",
498
+ "icon": "trash",
499
+ "label": "Delete",
500
+ "variant": "danger"
501
+ }
502
+ ],
503
+ "description": "Actions offered on each row; give an item `roles` to show it only to those viewer roles.",
504
+ "items": {
505
+ "properties": {
506
+ "event": {
507
+ "name": "event",
508
+ "required": false,
509
+ "type": "event"
510
+ },
511
+ "icon": {
512
+ "name": "icon",
513
+ "required": false,
514
+ "type": "string"
515
+ },
516
+ "label": {
517
+ "name": "label",
518
+ "required": true,
519
+ "type": "string"
520
+ },
521
+ "roles": {
522
+ "items": {
523
+ "type": "string"
524
+ },
525
+ "name": "roles",
526
+ "required": false,
527
+ "type": "array"
528
+ },
529
+ "variant": {
530
+ "name": "variant",
531
+ "required": false,
532
+ "type": "string"
533
+ },
534
+ "when": {
535
+ "name": "when",
536
+ "required": false,
537
+ "type": "object"
538
+ }
539
+ },
540
+ "type": "object"
541
+ },
542
+ "label": "Row actions",
543
+ "tier": "presentation",
544
+ "type": "[ItemAction]"
545
+ },
546
+ "viewerRole": {
547
+ "default": "",
548
+ "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.",
549
+ "label": "Viewer's role",
550
+ "tier": "policy",
551
+ "type": "string"
552
+ }
553
+ },
487
554
  "effectRow": [
488
555
  {
489
556
  "kind": "fetch",
@@ -1040,18 +1107,38 @@
1040
1107
  ],
1041
1108
  "gap": "sm",
1042
1109
  "itemActions": [
1043
- {
1044
- "event": "EDIT",
1045
- "icon": "pencil",
1046
- "label": "Edit",
1047
- "variant": "ghost"
1048
- },
1049
- {
1050
- "event": "DELETE",
1051
- "icon": "trash",
1052
- "label": "Delete",
1053
- "variant": "danger"
1054
- }
1110
+ "array/filter",
1111
+ "@config.itemActions",
1112
+ [
1113
+ "fn",
1114
+ "action",
1115
+ [
1116
+ "or",
1117
+ [
1118
+ "=",
1119
+ [
1120
+ "array/len",
1121
+ [
1122
+ "object/get",
1123
+ "@action",
1124
+ "roles",
1125
+ []
1126
+ ]
1127
+ ],
1128
+ 0.0
1129
+ ],
1130
+ [
1131
+ "array/includes",
1132
+ [
1133
+ "object/get",
1134
+ "@action",
1135
+ "roles",
1136
+ []
1137
+ ],
1138
+ "@config.viewerRole"
1139
+ ]
1140
+ ]
1141
+ ]
1055
1142
  ],
1056
1143
  "type": "data-grid"
1057
1144
  }
@@ -2196,6 +2283,35 @@
2196
2283
  }
2197
2284
  }
2198
2285
  ],
2286
+ "types": {
2287
+ "ItemAction": [
2288
+ {
2289
+ "name": "label",
2290
+ "required": true,
2291
+ "type": "string"
2292
+ },
2293
+ {
2294
+ "name": "event",
2295
+ "type": "event"
2296
+ },
2297
+ {
2298
+ "name": "variant",
2299
+ "type": "string"
2300
+ },
2301
+ {
2302
+ "name": "icon",
2303
+ "type": "string"
2304
+ },
2305
+ {
2306
+ "name": "roles",
2307
+ "type": "[string]"
2308
+ },
2309
+ {
2310
+ "name": "when",
2311
+ "type": "SExpr"
2312
+ }
2313
+ ]
2314
+ },
2199
2315
  "uses": [
2200
2316
  {
2201
2317
  "as": "Modal",