@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,5 @@
1
1
  {
2
- "description": "std-thread — forum-style nested replies with collapse + flat-mode toggle. Owns ThreadPost (persistent). flat:true covers 1:1 linear inquiry threads; flat:false renders forum-style nested. INIT fetches, scoped by @config.threadRootId when set (blank = every root, the default). REPLY persists a child post under @payload.parentId, stamped with the real @user identity. A consumer that mounts this as page comments forwards its own document-opened signal to SET_THREAD_ROOT { rootId }, which stamps @entity.replyRootId (scratch — the persisted threadRootId column is written only by the reply persist create) and refetches filtered by the payload; a plain INIT re-entry now also falls back through @entity.replyRootId before @config.threadRootId, so it stays scoped to the last SET_THREAD_ROOT instead of re-widening — only the after-create/after-select refetches still scope directly off their own event payload. Layer 3 variants override `bodyContent` to deliver chat-bubble, email-threaded, or linear-comments UX while inheriting the same trait, state machine, emits, and listens. A non-empty sectionTitle switches the default bodyContent into titled-comments mode: header + post list + a standalone composer button (without it an empty thread has no REPLY emitter at all — the affordance only existed per-row).",
2
+ "description": "std-thread — forum-style nested replies with collapse. Owns ThreadPost (persistent). INIT fetches, scoped by @config.threadRootId when set (blank = every root, the default). REPLY persists a child post under @payload.parentId, stamped with the real @user identity. A consumer that mounts this as page comments forwards its own document-opened signal to SET_THREAD_ROOT { rootId }, which stamps @entity.replyRootId (scratch — the persisted threadRootId column is written only by the reply persist create) and refetches filtered by the payload; a plain INIT re-entry now also falls back through @entity.replyRootId before @config.threadRootId, so it stays scoped to the last SET_THREAD_ROOT instead of re-widening — only the after-create/after-select refetches still scope directly off their own event payload. Layer 3 variants override `bodyContent` to deliver chat-bubble, email-threaded, or linear-comments UX while inheriting the same trait, state machine, emits, and listens. A non-empty sectionTitle switches the default bodyContent into titled-comments mode: header + post list + a standalone composer button (without it an empty thread has no REPLY emitter at all — the affordance only existed per-row).",
3
3
  "ledger": {
4
4
  "entries": {
5
5
  "ent_01KXG04HSZB16HRNNZWKASR1J1": {
@@ -132,6 +132,22 @@
132
132
  "kind": "trait",
133
133
  "owner": "workspace",
134
134
  "renames": []
135
+ },
136
+ "trt_01M3SFBP3PBCHDCWJGXP1X40MH": {
137
+ "bakedName": "ThreadReplyGate",
138
+ "curName": "ThreadReplyGate",
139
+ "id": "trt_01M3SFBP3PBCHDCWJGXP1X40MH",
140
+ "kind": "trait",
141
+ "owner": "workspace",
142
+ "renames": []
143
+ },
144
+ "trt_01M3SFBP3PXZ9F1MSVF2X0R18C": {
145
+ "bakedName": "ThreadReplyButton",
146
+ "curName": "ThreadReplyButton",
147
+ "id": "trt_01M3SFBP3PXZ9F1MSVF2X0R18C",
148
+ "kind": "trait",
149
+ "owner": "workspace",
150
+ "renames": []
135
151
  }
136
152
  },
137
153
  "schemaVersion": 1
@@ -308,11 +324,38 @@
308
324
  ],
309
325
  "gap": "sm",
310
326
  "itemActions": [
311
- {
312
- "event": "REPLY",
313
- "icon": "message-square",
314
- "label": "Reply"
315
- }
327
+ "array/filter",
328
+ "@config.itemActions",
329
+ [
330
+ "fn",
331
+ "action",
332
+ [
333
+ "or",
334
+ [
335
+ "=",
336
+ [
337
+ "array/len",
338
+ [
339
+ "object/get",
340
+ "@action",
341
+ "roles",
342
+ []
343
+ ]
344
+ ],
345
+ 0.0
346
+ ],
347
+ [
348
+ "array/includes",
349
+ [
350
+ "object/get",
351
+ "@action",
352
+ "roles",
353
+ []
354
+ ],
355
+ "@config.viewerRole"
356
+ ]
357
+ ]
358
+ ]
316
359
  ],
317
360
  "look": "@config.tableLook",
318
361
  "type": "data-list",
@@ -325,13 +368,7 @@
325
368
  "@config.sectionTitle",
326
369
  ""
327
370
  ],
328
- {
329
- "action": "REPLY",
330
- "icon": "message-square",
331
- "label": "@config.composerLabel",
332
- "type": "button",
333
- "variant": "secondary"
334
- },
371
+ "@trait.ThreadReplyGate",
335
372
  {
336
373
  "children": [],
337
374
  "gap": "none",
@@ -356,110 +393,61 @@
356
393
  "tier": "presentation",
357
394
  "type": "string"
358
395
  },
359
- "detailAuthorBinding": {
360
- "default": "@entity.focusedRow.authorName",
361
- "description": "Detail-pane binding for the focused message author.",
362
- "label": "detailAuthorBinding",
363
- "tier": "presentation",
364
- "type": "string"
365
- },
366
- "detailContentBinding": {
367
- "default": "@entity.focusedRow.content",
368
- "description": "Detail-pane binding for the message body.",
369
- "label": "detailContentBinding",
370
- "tier": "presentation",
371
- "type": "string"
372
- },
373
- "detailDateBinding": {
374
- "default": "@entity.focusedRow.createdAt",
375
- "description": "Detail-pane binding for the timestamp.",
376
- "label": "detailDateBinding",
377
- "tier": "presentation",
378
- "type": "string"
379
- },
380
- "detailFromBinding": {
381
- "default": "@entity.focusedRow.fromAddress",
382
- "description": "Detail-pane binding for the From address.",
383
- "label": "detailFromBinding",
384
- "tier": "presentation",
385
- "type": "string"
386
- },
387
- "detailSubjectBinding": {
388
- "default": "@entity.focusedRow.subject",
389
- "description": "Detail-pane binding for the focused message subject.",
390
- "label": "detailSubjectBinding",
391
- "tier": "presentation",
392
- "type": "string"
393
- },
394
- "detailToBinding": {
395
- "default": "@entity.focusedRow.toAddress",
396
- "description": "Detail-pane binding for the To address.",
397
- "label": "detailToBinding",
398
- "tier": "presentation",
399
- "type": "string"
400
- },
401
- "emailAuthorBinding": {
402
- "default": "@item.authorName",
403
- "description": "List-pane binding for the message author.",
404
- "label": "emailAuthorBinding",
405
- "tier": "presentation",
406
- "type": "string"
407
- },
408
- "emailPreviewBinding": {
409
- "default": "@item.preview",
410
- "description": "List-pane binding for the message preview text.",
411
- "label": "emailPreviewBinding",
412
- "tier": "presentation",
413
- "type": "string"
414
- },
415
- "emailSubjectBinding": {
416
- "default": "@item.subject",
417
- "description": "List-pane binding for the message subject.",
418
- "label": "emailSubjectBinding",
419
- "tier": "presentation",
420
- "type": "string"
421
- },
422
- "flat": {
423
- "default": false,
424
- "description": "Render replies as a linear list instead of nested tree",
425
- "label": "Flat thread",
426
- "tier": "presentation",
427
- "type": "boolean"
428
- },
429
- "recipientName": {
430
- "default": "Conversation",
431
- "description": "Header/recipient label for chat-style threads.",
432
- "label": "recipientName",
433
- "tier": "presentation",
434
- "type": "string"
435
- },
436
- "replyAuthorBinding": {
437
- "default": "@reply.authorName",
438
- "description": "Reply binding for the reply author.",
439
- "label": "replyAuthorBinding",
440
- "tier": "presentation",
441
- "type": "string"
442
- },
443
- "replyContentBinding": {
444
- "default": "@reply.content",
445
- "description": "Reply binding for the reply body.",
446
- "label": "replyContentBinding",
447
- "tier": "presentation",
448
- "type": "string"
449
- },
450
- "replyDateBinding": {
451
- "default": "@reply.createdAt",
452
- "description": "Reply binding for the reply timestamp.",
453
- "label": "replyDateBinding",
396
+ "itemActions": {
397
+ "default": [
398
+ {
399
+ "event": "REPLY",
400
+ "icon": "message-square",
401
+ "label": "Reply"
402
+ }
403
+ ],
404
+ "description": "Actions offered on each row; give an item `roles` to show it only to those viewer roles.",
405
+ "items": {
406
+ "properties": {
407
+ "event": {
408
+ "name": "event",
409
+ "required": false,
410
+ "type": "event"
411
+ },
412
+ "icon": {
413
+ "name": "icon",
414
+ "required": false,
415
+ "type": "string"
416
+ },
417
+ "label": {
418
+ "name": "label",
419
+ "required": true,
420
+ "type": "string"
421
+ },
422
+ "roles": {
423
+ "items": {
424
+ "type": "string"
425
+ },
426
+ "name": "roles",
427
+ "required": false,
428
+ "type": "array"
429
+ },
430
+ "when": {
431
+ "name": "when",
432
+ "required": false,
433
+ "type": "object"
434
+ }
435
+ },
436
+ "type": "object"
437
+ },
438
+ "label": "Row actions",
454
439
  "tier": "presentation",
455
- "type": "string"
440
+ "type": "[ItemAction]"
456
441
  },
457
- "replyFromBinding": {
458
- "default": "@reply.fromAddress",
459
- "description": "Reply binding for the reply From address.",
460
- "label": "replyFromBinding",
461
- "tier": "presentation",
462
- "type": "string"
442
+ "replyRoles": {
443
+ "default": [],
444
+ "description": "Roles (matched against viewerRole) that see the thread's Reply button. Empty = everyone.",
445
+ "items": {
446
+ "type": "string"
447
+ },
448
+ "label": "Roles that can reply",
449
+ "tier": "policy",
450
+ "type": "[string]"
463
451
  },
464
452
  "sectionTitle": {
465
453
  "default": "",
@@ -490,6 +478,13 @@
490
478
  "synonyms": "rootId, topLevelId, scope, threadScope",
491
479
  "tier": "domain",
492
480
  "type": "string"
481
+ },
482
+ "viewerRole": {
483
+ "default": "",
484
+ "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.",
485
+ "label": "Viewer's role",
486
+ "tier": "policy",
487
+ "type": "string"
493
488
  }
494
489
  },
495
490
  "effectRow": [
@@ -1990,7 +1985,87 @@
1990
1985
  "to": "loading"
1991
1986
  }
1992
1987
  ]
1988
+ },
1989
+ "traitEmbedIds": {
1990
+ "ThreadReplyGate": "trt_01M3SFBP3PBCHDCWJGXP1X40MH"
1991
+ }
1992
+ },
1993
+ {
1994
+ "config": {
1995
+ "action": {
1996
+ "default": "REPLY",
1997
+ "type": "unknown"
1998
+ },
1999
+ "icon": {
2000
+ "default": "message-square",
2001
+ "type": "unknown"
2002
+ },
2003
+ "label": {
2004
+ "default": "@config.composerLabel",
2005
+ "type": "unknown"
2006
+ },
2007
+ "variant": {
2008
+ "default": "secondary",
2009
+ "type": "unknown"
2010
+ }
2011
+ },
2012
+ "id": "trt_01M3SFBP3PXZ9F1MSVF2X0R18C",
2013
+ "name": "ThreadReplyButton",
2014
+ "ref": "Button.traits.ButtonRender"
2015
+ },
2016
+ {
2017
+ "config": {
2018
+ "content": {
2019
+ "default": "@trait.ThreadReplyButton",
2020
+ "type": "unknown"
2021
+ },
2022
+ "roles": {
2023
+ "default": "@config.replyRoles",
2024
+ "type": "unknown"
2025
+ },
2026
+ "viewerRole": {
2027
+ "default": "@config.viewerRole",
2028
+ "type": "unknown"
2029
+ }
2030
+ },
2031
+ "id": "trt_01M3SFBP3PBCHDCWJGXP1X40MH",
2032
+ "name": "ThreadReplyGate",
2033
+ "ref": "RoleGate.traits.RoleGate"
2034
+ }
2035
+ ],
2036
+ "types": {
2037
+ "ItemAction": [
2038
+ {
2039
+ "name": "label",
2040
+ "required": true,
2041
+ "type": "string"
2042
+ },
2043
+ {
2044
+ "name": "event",
2045
+ "type": "event"
2046
+ },
2047
+ {
2048
+ "name": "icon",
2049
+ "type": "string"
2050
+ },
2051
+ {
2052
+ "name": "roles",
2053
+ "type": "[string]"
2054
+ },
2055
+ {
2056
+ "name": "when",
2057
+ "type": "SExpr"
1993
2058
  }
2059
+ ]
2060
+ },
2061
+ "uses": [
2062
+ {
2063
+ "as": "RoleGate",
2064
+ "from": "std/behaviors/std-role-gate"
2065
+ },
2066
+ {
2067
+ "as": "Button",
2068
+ "from": "std/behaviors/ui-button"
1994
2069
  }
1995
2070
  ]
1996
2071
  }
@@ -231,6 +231,72 @@
231
231
  {
232
232
  "category": "interaction",
233
233
  "config": {
234
+ "itemActions": {
235
+ "default": [
236
+ {
237
+ "event": "OPEN_REVISION",
238
+ "icon": "arrow-right",
239
+ "label": "Open",
240
+ "variant": "ghost"
241
+ },
242
+ {
243
+ "event": "ROLLBACK",
244
+ "icon": "rotate-ccw",
245
+ "label": "Rollback",
246
+ "variant": "danger"
247
+ }
248
+ ],
249
+ "description": "Actions offered on each row; give an item `roles` to show it only to those viewer roles.",
250
+ "items": {
251
+ "properties": {
252
+ "event": {
253
+ "name": "event",
254
+ "required": false,
255
+ "type": "event"
256
+ },
257
+ "icon": {
258
+ "name": "icon",
259
+ "required": false,
260
+ "type": "string"
261
+ },
262
+ "label": {
263
+ "name": "label",
264
+ "required": true,
265
+ "type": "string"
266
+ },
267
+ "roles": {
268
+ "items": {
269
+ "type": "string"
270
+ },
271
+ "name": "roles",
272
+ "required": false,
273
+ "type": "array"
274
+ },
275
+ "variant": {
276
+ "name": "variant",
277
+ "required": false,
278
+ "type": "string"
279
+ },
280
+ "when": {
281
+ "name": "when",
282
+ "required": false,
283
+ "type": "object"
284
+ }
285
+ },
286
+ "type": "object"
287
+ },
288
+ "label": "Row actions",
289
+ "tier": "presentation",
290
+ "type": "[ItemAction]"
291
+ },
292
+ "itemClickEvent": {
293
+ "default": "OPEN_REVISION",
294
+ "description": "Event emitted when a row is clicked; opens the revision. Empty disables the row click.",
295
+ "label": "Row click",
296
+ "refId": "evt_01KXG04HVBMTG6DVMQ7QH49Z94",
297
+ "tier": "presentation",
298
+ "type": "event"
299
+ },
234
300
  "scopeField": {
235
301
  "default": "",
236
302
  "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.",
@@ -272,6 +338,13 @@
272
338
  "label": "Section title",
273
339
  "tier": "presentation",
274
340
  "type": "string"
341
+ },
342
+ "viewerRole": {
343
+ "default": "",
344
+ "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.",
345
+ "label": "Viewer's role",
346
+ "tier": "policy",
347
+ "type": "string"
275
348
  }
276
349
  },
277
350
  "effectRow": [
@@ -1177,9 +1250,10 @@
1177
1250
  {
1178
1251
  "label": "Summary",
1179
1252
  "name": "summary",
1180
- "variant": "caption"
1253
+ "variant": "h4"
1181
1254
  },
1182
1255
  {
1256
+ "format": "date",
1183
1257
  "label": "Saved",
1184
1258
  "name": "createdAt",
1185
1259
  "variant": "caption"
@@ -1187,19 +1261,40 @@
1187
1261
  ],
1188
1262
  "gap": "sm",
1189
1263
  "itemActions": [
1190
- {
1191
- "event": "OPEN_REVISION",
1192
- "icon": "arrow-right",
1193
- "label": "Open",
1194
- "variant": "ghost"
1195
- },
1196
- {
1197
- "event": "ROLLBACK",
1198
- "icon": "rotate-ccw",
1199
- "label": "Rollback",
1200
- "variant": "danger"
1201
- }
1264
+ "array/filter",
1265
+ "@config.itemActions",
1266
+ [
1267
+ "fn",
1268
+ "action",
1269
+ [
1270
+ "or",
1271
+ [
1272
+ "=",
1273
+ [
1274
+ "array/len",
1275
+ [
1276
+ "object/get",
1277
+ "@action",
1278
+ "roles",
1279
+ []
1280
+ ]
1281
+ ],
1282
+ 0.0
1283
+ ],
1284
+ [
1285
+ "array/includes",
1286
+ [
1287
+ "object/get",
1288
+ "@action",
1289
+ "roles",
1290
+ []
1291
+ ],
1292
+ "@config.viewerRole"
1293
+ ]
1294
+ ]
1295
+ ]
1202
1296
  ],
1297
+ "itemClickEvent": "@config.itemClickEvent",
1203
1298
  "look": "@config.tableLook",
1204
1299
  "type": "data-grid"
1205
1300
  }
@@ -2340,7 +2435,36 @@
2340
2435
  ]
2341
2436
  }
2342
2437
  }
2343
- ]
2438
+ ],
2439
+ "types": {
2440
+ "ItemAction": [
2441
+ {
2442
+ "name": "label",
2443
+ "required": true,
2444
+ "type": "string"
2445
+ },
2446
+ {
2447
+ "name": "event",
2448
+ "type": "event"
2449
+ },
2450
+ {
2451
+ "name": "variant",
2452
+ "type": "string"
2453
+ },
2454
+ {
2455
+ "name": "icon",
2456
+ "type": "string"
2457
+ },
2458
+ {
2459
+ "name": "roles",
2460
+ "type": "[string]"
2461
+ },
2462
+ {
2463
+ "name": "when",
2464
+ "type": "SExpr"
2465
+ }
2466
+ ]
2467
+ }
2344
2468
  }
2345
2469
  ],
2346
2470
  "schemaVersion": 1,
@@ -164,15 +164,6 @@
164
164
  "traits": [
165
165
  {
166
166
  "category": "interaction",
167
- "config": {
168
- "allowDown": {
169
- "default": true,
170
- "description": "Show the downvote arrow alongside the upvote",
171
- "label": "Allow downvotes",
172
- "tier": "domain",
173
- "type": "boolean"
174
- }
175
- },
176
167
  "effectRow": [
177
168
  {
178
169
  "kind": "fetch",
@@ -1042,7 +1042,17 @@
1042
1042
  {
1043
1043
  "cancelEvent": "CANCEL",
1044
1044
  "entity": "@entity",
1045
- "fields": "@entity.currentFields",
1045
+ "fields": [
1046
+ "array/map",
1047
+ "@entity.currentFields",
1048
+ [
1049
+ "fn",
1050
+ "f",
1051
+ {
1052
+ "name": "@f"
1053
+ }
1054
+ ]
1055
+ ],
1046
1056
  "mode": "edit",
1047
1057
  "showCancel": false,
1048
1058
  "showSubmit": false,
@@ -1364,7 +1374,17 @@
1364
1374
  {
1365
1375
  "cancelEvent": "CANCEL",
1366
1376
  "entity": "@entity",
1367
- "fields": "@entity.currentFields",
1377
+ "fields": [
1378
+ "array/map",
1379
+ "@entity.currentFields",
1380
+ [
1381
+ "fn",
1382
+ "f",
1383
+ {
1384
+ "name": "@f"
1385
+ }
1386
+ ]
1387
+ ],
1368
1388
  "mode": "edit",
1369
1389
  "showCancel": false,
1370
1390
  "showSubmit": false,
@@ -1689,7 +1709,17 @@
1689
1709
  {
1690
1710
  "cancelEvent": "CANCEL",
1691
1711
  "entity": "@entity",
1692
- "fields": "@entity.currentFields",
1712
+ "fields": [
1713
+ "array/map",
1714
+ "@entity.currentFields",
1715
+ [
1716
+ "fn",
1717
+ "f",
1718
+ {
1719
+ "name": "@f"
1720
+ }
1721
+ ]
1722
+ ],
1693
1723
  "mode": "edit",
1694
1724
  "showCancel": false,
1695
1725
  "showSubmit": false,